begin process at 2012 02 13 00:36:48
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

VBA

 > AFFICHER UN MESSAGE D'ATTENTE EN EXCEL LORS D'UN LONG TRAITEMENT (WAITBOX)

AFFICHER UN MESSAGE D'ATTENTE EN EXCEL LORS D'UN LONG TRAITEMENT (WAITBOX)


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :VBA Niveau :Débutant Date de création :18/08/2004 Date de mise à jour :18/08/2004 12:23:48 Vu :19 510

Auteur : ol69

Ecrire un message privé
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

Lors de long traitements sous Excel ou Word il est interressant de pouvoir afficher un message à l'écran pendant cette execution. La première chose à faire est de créer un Userform que j'ai appelé WaitBox contenant uniquement un contrôle Label avec le texte d'attente, le reste du code est ci dessous :

Source

  • Private Sub Workbook_open() 'dans le module thisWorkbook , événement à l'ouverture du classeur
  • Load WaitBox 'on charge le formulaire en mémoire
  • end sub
  • Sub VotreTraitement() 'la sub qui contient le gros traitement qui peut être dans un module
  • Application.Cursor = XlWait 'affiche le sablier
  • WaitBox.Show vbModeless 'affiche la waitbox mais continu le traitement
  • WaitBox.Repaint 'raffraichit le contenu affiché sinon on a une boite blanche vide
  • 'placer ici votre traitement...
  • WaitBox.hide 'masque la waitbox
  • Application.Cursor=XlDefault 'remet le curseur par défaut
  • End sub
  • Private Sub WorkBook_BeforeClose(Cancel as Boolean) 'dans module thisWorkbook
  • Unload WaitBox 'decharge la waitbox de la mémoire
  • End sub
Private Sub Workbook_open()   'dans le module thisWorkbook , événement à l'ouverture du classeur
  Load WaitBox        'on charge le formulaire en mémoire

end sub


Sub VotreTraitement()  'la sub qui contient le gros traitement qui peut être dans un module 

Application.Cursor = XlWait   'affiche le sablier
WaitBox.Show vbModeless   'affiche la waitbox mais continu le traitement
WaitBox.Repaint                   'raffraichit le contenu affiché sinon on a une boite blanche vide

'placer ici votre traitement...

WaitBox.hide  'masque la waitbox
Application.Cursor=XlDefault   'remet le curseur par défaut

End sub


Private Sub WorkBook_BeforeClose(Cancel as Boolean)  'dans module thisWorkbook

Unload WaitBox  'decharge la waitbox de la mémoire

End sub


 Conclusion

Ce petit code fonctionne bien sous office 2000 mais il devrait bien fonctionner sous 97 ou XP (à tester).
Il pourrait être interressant d'y ajouter une "progress bar" mais je n'ai pas encore trouvé le moyen de le faire.
Merci de vos commentaires


 Historique

18 août 2004 12:23:48 :
Oubli de private sub dans les modules This workbook ;-)

 Sources de la même categorie

Source avec Zip GESTION PERSONNEL par oudlarbi
Source avec Zip Source avec une capture CALENDRIER EN VBA POUR EXCEL 2010 par nounou94
Source avec Zip Source avec une capture MANIPULER LES FENETRES ENFANT D'EXCEL par bigfish_le vrai
Source avec Zip Source avec une capture COLLECTION ID par Le Pivert
Source avec Zip Source avec une capture VBA MASQUE DE SAISIE NUMÉRIQUE par acive

Commentaires et avis

Commentaire de sebhd le 13/10/2004 11:08:32

Bonjour ol69 et merci pour ce code, ca correspond en partie à ce que je recherche ! En effet, il manque la progressbar...

Bon, je bosse en Excel97 et ton petit programme ne semble pas compatible à 100%..
En effet, lorsque je lance la macro complète (avec mon traitement) la fenêtre de débogage s'affiche sur "vbModeless".

J'ai donc fait un test en le supprimant et bien evidemment, la waitbox s'affiche, le sablier aussi mais c'est tout ! Pas de traitement derrière...

Aurais-tu une idée de la source du problème ?

Merci à toi.

Commentaire de castor_furieux le 05/04/2005 16:53:30

salut!

Ca marche pas avec Excel 97...

en revanche pour la progressbar je connais une astuce :

si ton traitement s'effectue sur x fichiers/cellules alors
             a chaque ième fichiers/cellules traité(e)s, donnes la valeur "x/i" à la progressbar et le tour est joué.

Mais attention en faisant ca tu rajoute des calculs. si t'as 5 000 cellules à traiter tu vas générer 5 000 calculs et 5 000 modifications graphiques supplémentaires (ce qui va augmenter le temps de traitement...)

A ce moment là, vaut mieux rafraichir la progressbar tous les 100 traitements (par exemple)

@ la prochaine

Commentaire de sebhd le 05/04/2005 16:58:40

Merci Castor_furieux, faudra que je me repenche dessus et que je test ! ;-)

Commentaire de castor_furieux le 06/04/2005 08:54:33

Bin ecoute, y'a pas de quoi! ca m'a fait grand plaisir!

mais si t'arrive à trouver pourquoi ca merde sous XL 97 et surtout comment y remedier, je suis preneur ;)

@+

Commentaire de JM247L le 02/04/2008 14:43:45

Salut,
C'est exactement ce que je cherchais et de plus c'est très agréable de trouver des codes qui sont commentés

En fait le problème vient de l'aide Microsoft qui ne détaille pas suffisament l'utilisation de .Repaint qui ne fonbctionne que si un Load a été exécuté avant le show
Merci à toi
JML

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,452 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales