Quand elle a beaucoup de travail, une macro peut mettre quelques secondes à
s’exécuter .
Pour le confort des utilisateurs qui ont horreur du « vide »,
j’ai tenté une Userform (MessMaj) avec un Contrôle /Label/Caption = « Mise à
jour en cours »
Cette Userform s’affiche à l’aide
d’un bouton dans une barre d’outil
comme ceci :
Sub Maj_Message()
MessMaj.Show
End Sub
Ensuite à l’événement « Activate » de la Userform
je lance la Macro(« MAJ ») de mise à jour et masque à la fin la Userform
comme cela :
Private Sub UserForm_Activate()
Application.Run "MAJ"
MessMaj.Hide
End Sub
L'ensemble fonctionne, à ceci près :
Le message contenu dans le Label ne s’affiche pas.
(la Useform est vide, le contrôle Label n’apparaît pas ???)
Je sais, je pourrais mettre le message d’information
dans la rubrique « Caption » de la UserForm mais bon, ce n’est pas très
esthétique.
J’aimerais bien savoir ce que j’ai oublié .
Il y a aussi sûrement d’autres méthodes pour informer l’utilisateur de
l’exécution d’une Macro.
Merci
« On ne trace pas de message sur un écran propre. »
[Robert Mallet]
Il y a aussi sûrement d’autres méthodes pour informer l’utilisateur de l’exécution d’une Macro.
Commençons par la fin : oui Simple : Mettre le pointeur de la souris sous forme de sablier par exemple. Voir l'aide de MousePointer
Écrire dans la StatusBar
Plus compliqué: Afficher une barre de progression
Sinon je ne vois pas de raison que votre texte de label n'apparaisse pas. C'est bien un Label ?
-- A+
JMM21
"Geo",infatigable, a répondu
Il y a aussi sûrement d’autres méthodes pour informer l’utilisateur de l’exécution d’une Macro.
Simple : Mettre le pointeur de la souris sous forme de sablier par exemple. Voir l'aide de MousePointer
pas très efficace,un coup je te vois, un coup je ne te vois pas...
Écrire dans la StatusBar
UserForm aussi ?
Plus compliqué: Afficher une barre de progression
Ce serait le top (avec une UserForm et un contrôle supplémentaire "Progressbar" à activer, je suppose ???) Il faut que cherche de la doc.
Sinon je ne vois pas de raison que votre texte de label n'apparaisse pas. C'est bien un Label ?
Oui, et là je m'arrache les cheveux (blancs...)
Private Sub UserForm_Activate() Application.Run "MAJ" MessMaj.Hide End Sub
Le code : Application.Run "Nom_Macro" placé juste derrière la procédure Activate de la UserForm empèche l'affichage du Label contenu dans la UserForm. Si j'enlève la ligne de code, la Userform s'affiche avec son Label,mais forcément il ne se passe plus rien...
Dur, dur l'apprentissage... :<(
Merci
JMM21 A+
"Geo",infatigable, a répondu
Il y a aussi sûrement d’autres méthodes pour informer l’utilisateur de
l’exécution d’une Macro.
Simple :
Mettre le pointeur de la souris sous forme de sablier par exemple.
Voir l'aide de MousePointer
pas très efficace,un coup je te vois, un coup je ne te vois pas...
Écrire dans la StatusBar
UserForm aussi ?
Plus compliqué:
Afficher une barre de progression
Ce serait le top (avec une UserForm et un contrôle supplémentaire
"Progressbar" à activer, je suppose ???) Il faut que cherche de la doc.
Sinon je ne vois pas de raison que votre texte de label n'apparaisse
pas.
C'est bien un Label ?
Oui, et là je m'arrache les cheveux (blancs...)
Private Sub UserForm_Activate()
Application.Run "MAJ"
MessMaj.Hide
End Sub
Le code : Application.Run "Nom_Macro" placé juste derrière
la procédure Activate de la UserForm empèche l'affichage du Label contenu
dans la UserForm.
Si j'enlève la ligne de code, la Userform s'affiche avec son Label,mais
forcément il ne se passe plus rien...
Il y a aussi sûrement d’autres méthodes pour informer l’utilisateur de l’exécution d’une Macro.
Simple : Mettre le pointeur de la souris sous forme de sablier par exemple. Voir l'aide de MousePointer
pas très efficace,un coup je te vois, un coup je ne te vois pas...
Écrire dans la StatusBar
UserForm aussi ?
Plus compliqué: Afficher une barre de progression
Ce serait le top (avec une UserForm et un contrôle supplémentaire "Progressbar" à activer, je suppose ???) Il faut que cherche de la doc.
Sinon je ne vois pas de raison que votre texte de label n'apparaisse pas. C'est bien un Label ?
Oui, et là je m'arrache les cheveux (blancs...)
Private Sub UserForm_Activate() Application.Run "MAJ" MessMaj.Hide End Sub
Le code : Application.Run "Nom_Macro" placé juste derrière la procédure Activate de la UserForm empèche l'affichage du Label contenu dans la UserForm. Si j'enlève la ligne de code, la Userform s'affiche avec son Label,mais forcément il ne se passe plus rien...
Dur, dur l'apprentissage... :<(
Merci
JMM21 A+
Geo
"Geo",infatigable, a répondu
Il y a aussi sûrement d’autres méthodes pour informer l’utilisateur de l’exécution d’une Macro.
Simple : Mettre le pointeur de la souris sous forme de sablier par exemple. Voir l'aide de MousePointer
pas très efficace,un coup je te vois, un coup je ne te vois pas...
Ah ? Il faudrait chercher un curseur plus visible.
Écrire dans la StatusBar UserForm aussi ?
Non, c'est accessible de partout, c'est la barre en bas de l'écran. Il y a des exemples dans l'aide, mais ce n'est pas très visible, il faut dire aux utilisateurs de regarder.
Le code : Application.Run "Nom_Macro" placé juste derrière la procédure Activate de la UserForm empèche l'affichage du Label contenu dans la UserForm. Si j'enlève la ligne de code, la Userform s'affiche avec son Label,mais forcément il ne se passe plus rien...
La Userform, elle est affichée ?
-- A+
"Geo",infatigable, a répondu
Il y a aussi sûrement d’autres méthodes pour informer l’utilisateur de
l’exécution d’une Macro.
Simple :
Mettre le pointeur de la souris sous forme de sablier par exemple.
Voir l'aide de MousePointer
pas très efficace,un coup je te vois, un coup je ne te vois pas...
Ah ?
Il faudrait chercher un curseur plus visible.
Écrire dans la StatusBar
UserForm aussi ?
Non, c'est accessible de partout, c'est la barre en bas de l'écran.
Il y a des exemples dans l'aide, mais ce n'est pas très visible, il
faut dire aux utilisateurs de regarder.
Le code : Application.Run "Nom_Macro" placé juste derrière
la procédure Activate de la UserForm empèche l'affichage du Label contenu
dans la UserForm.
Si j'enlève la ligne de code, la Userform s'affiche avec son Label,mais
forcément il ne se passe plus rien...
Il y a aussi sûrement d’autres méthodes pour informer l’utilisateur de l’exécution d’une Macro.
Simple : Mettre le pointeur de la souris sous forme de sablier par exemple. Voir l'aide de MousePointer
pas très efficace,un coup je te vois, un coup je ne te vois pas...
Ah ? Il faudrait chercher un curseur plus visible.
Écrire dans la StatusBar UserForm aussi ?
Non, c'est accessible de partout, c'est la barre en bas de l'écran. Il y a des exemples dans l'aide, mais ce n'est pas très visible, il faut dire aux utilisateurs de regarder.
Le code : Application.Run "Nom_Macro" placé juste derrière la procédure Activate de la UserForm empèche l'affichage du Label contenu dans la UserForm. Si j'enlève la ligne de code, la Userform s'affiche avec son Label,mais forcément il ne se passe plus rien...
La Userform, elle est affichée ?
-- A+
JMM21
"Geo", persévérant, creuse le sujet
Le code : Application.Run "Nom_Macro" placé juste derrière la procédure Activate de la UserForm empèche l'affichage du Label contenu dans la UserForm. Si j'enlève la ligne de code, la Userform s'affiche avec son Label,mais forcément il ne se passe plus rien...
La Userform, elle est affichée ?
Oui, la UserForm s'affiche mais sans le contrôle Label
J'ai donc mis en attendant le message "Mise à jour en cours" dans la propriété Caption de la UserForm.
A+
"Geo", persévérant, creuse le sujet
Le code : Application.Run "Nom_Macro" placé juste derrière
la procédure Activate de la UserForm empèche l'affichage du Label contenu
dans la UserForm.
Si j'enlève la ligne de code, la Userform s'affiche avec son Label,mais
forcément il ne se passe plus rien...
La Userform, elle est affichée ?
Oui, la UserForm s'affiche mais sans le contrôle Label
J'ai donc mis en attendant le message "Mise à jour en cours" dans la
propriété Caption de la UserForm.
Le code : Application.Run "Nom_Macro" placé juste derrière la procédure Activate de la UserForm empèche l'affichage du Label contenu dans la UserForm. Si j'enlève la ligne de code, la Userform s'affiche avec son Label,mais forcément il ne se passe plus rien...
La Userform, elle est affichée ?
Oui, la UserForm s'affiche mais sans le contrôle Label
J'ai donc mis en attendant le message "Mise à jour en cours" dans la propriété Caption de la UserForm.
A+
Geo
Oui, la UserForm s'affiche mais sans le contrôle Label
J'ai donc mis en attendant le message "Mise à jour en cours" dans la propriété Caption de la UserForm.
Bonne idée. Vous pourriez exporter votre Userform et la mettre sur www.cjoint.com ?
-- A+
Oui, la UserForm s'affiche mais sans le contrôle Label
J'ai donc mis en attendant le message "Mise à jour en cours" dans la
propriété Caption de la UserForm.
Bonne idée.
Vous pourriez exporter votre Userform et la mettre sur www.cjoint.com ?
Vous pourriez exporter votre Userform et la mettre sur www.cjoint.com ?
C'est bien volontiers, si cela peut faire avancer...
http://cjoint.com/?ksvvqph0ZC
a+
Geo
Vous pourriez exporter votre Userform et la mettre sur www.cjoint.com ?
C'est bien volontiers, si cela peut faire avancer...
http://cjoint.com/?ksvvqph0ZC
a+
La userform n'a pas le temps de s'afficher. Il faut ajouter un doevents avant le run. Pour faire plus simple : supprimez la procédure UserForm_Activate et modifiez celle-ci :
Sub Bouton_Maj() Message_Maj.Show False DoEvents Application.Run "Maj_Champ" Message_Maj.Hide End Sub
Pour votre mise à jour si vous aviez pu faire une boucle vous auriez pu y insérer qqch comme : Message_Maj.Label1.Caption = "Texte5" DoEvents Comme ça le texte évoluerait sur votre userform, ça ferait plus vivant.
-- A+
Vous pourriez exporter votre Userform et la mettre sur www.cjoint.com ?
C'est bien volontiers, si cela peut faire avancer...
http://cjoint.com/?ksvvqph0ZC
a+
La userform n'a pas le temps de s'afficher.
Il faut ajouter un doevents avant le run.
Pour faire plus simple :
supprimez la procédure UserForm_Activate
et modifiez celle-ci :
Sub Bouton_Maj()
Message_Maj.Show False
DoEvents
Application.Run "Maj_Champ"
Message_Maj.Hide
End Sub
Pour votre mise à jour si vous aviez pu faire une boucle
vous auriez pu y insérer qqch comme :
Message_Maj.Label1.Caption = "Texte5"
DoEvents
Comme ça le texte évoluerait sur votre userform, ça ferait plus vivant.
Vous pourriez exporter votre Userform et la mettre sur www.cjoint.com ?
C'est bien volontiers, si cela peut faire avancer...
http://cjoint.com/?ksvvqph0ZC
a+
La userform n'a pas le temps de s'afficher. Il faut ajouter un doevents avant le run. Pour faire plus simple : supprimez la procédure UserForm_Activate et modifiez celle-ci :
Sub Bouton_Maj() Message_Maj.Show False DoEvents Application.Run "Maj_Champ" Message_Maj.Hide End Sub
Pour votre mise à jour si vous aviez pu faire une boucle vous auriez pu y insérer qqch comme : Message_Maj.Label1.Caption = "Texte5" DoEvents Comme ça le texte évoluerait sur votre userform, ça ferait plus vivant.
-- A+
Anacoluthe
Bonjour !
'JMM21' nous a écrit ...
C'est bien volontiers, si cela peut faire avancer... http://cjoint.com/?ksvvqph0ZC
Vous ne laissez pas le /temps/ à votre Userform d'être dessinée vous lancez la longue macro dès son /activation/ mais l'activation se passe /avant/ l'affichage ! On active une Userform puis on l'affiche VBA est sympa : si vous faites un Show sur une userform non encore activée, il l'active pour vous. Oui mais là ça lance la macro trop vite...
Pour réparer ça ajouter un Message_Maj.Repaint au début de la longue macro : ceci va d'abord dessiner votre Userform
C'est mieux ?
Anacoluthe « Le temps perdu ne se rattrape jamais. Alors continuons à ne rien faire » - Jules RENARD
Bonjour !
'JMM21' nous a écrit ...
C'est bien volontiers, si cela peut faire avancer...
http://cjoint.com/?ksvvqph0ZC
Vous ne laissez pas le /temps/ à votre Userform d'être dessinée
vous lancez la longue macro dès son /activation/
mais l'activation se passe /avant/ l'affichage !
On active une Userform puis on l'affiche
VBA est sympa : si vous faites un Show sur une userform
non encore activée, il l'active pour vous.
Oui mais là ça lance la macro trop vite...
Pour réparer ça ajouter un
Message_Maj.Repaint
au début de la longue macro : ceci va d'abord dessiner votre Userform
C'est mieux ?
Anacoluthe
« Le temps perdu ne se rattrape jamais.
Alors continuons à ne rien faire »
- Jules RENARD
C'est bien volontiers, si cela peut faire avancer... http://cjoint.com/?ksvvqph0ZC
Vous ne laissez pas le /temps/ à votre Userform d'être dessinée vous lancez la longue macro dès son /activation/ mais l'activation se passe /avant/ l'affichage ! On active une Userform puis on l'affiche VBA est sympa : si vous faites un Show sur une userform non encore activée, il l'active pour vous. Oui mais là ça lance la macro trop vite...
Pour réparer ça ajouter un Message_Maj.Repaint au début de la longue macro : ceci va d'abord dessiner votre Userform
C'est mieux ?
Anacoluthe « Le temps perdu ne se rattrape jamais. Alors continuons à ne rien faire » - Jules RENARD
JMM21
"Anacoluthe" a solutionné :
Pour réparer ça ajouter un Message_Maj.Repaint au début de la longue macro : ceci va d'abord dessiner votre Userform
C'est mieux ?
Parfait, je n'y crois pas , il suffisait de /repeindre/...
"Il faut que la peinture serve à autre chose qu'à la peinture" [Matisse]
Merci à Anacoluthe & Géo (ordre alpha...)
P.S: Le respect des utilisateurs doit être un souci permanent. La surqualité serait de rajouter une /progressbar/ (contôle supplémentaire à cocher). Mais pour la faire fonctionner, il faut du code en plus (timer ?) Je vais chercher !!! (seul...)
"Anacoluthe" a solutionné :
Pour réparer ça ajouter un
Message_Maj.Repaint
au début de la longue macro : ceci va d'abord dessiner votre Userform
C'est mieux ?
Parfait,
je n'y crois pas ,
il suffisait de /repeindre/...
"Il faut que la peinture serve à autre chose qu'à la peinture"
[Matisse]
Merci à Anacoluthe & Géo (ordre alpha...)
P.S:
Le respect des utilisateurs doit être un souci permanent.
La surqualité serait de rajouter une /progressbar/ (contôle supplémentaire à
cocher).
Mais pour la faire fonctionner, il faut du code en plus (timer ?)
Je vais chercher !!! (seul...)
Pour réparer ça ajouter un Message_Maj.Repaint au début de la longue macro : ceci va d'abord dessiner votre Userform
C'est mieux ?
Parfait, je n'y crois pas , il suffisait de /repeindre/...
"Il faut que la peinture serve à autre chose qu'à la peinture" [Matisse]
Merci à Anacoluthe & Géo (ordre alpha...)
P.S: Le respect des utilisateurs doit être un souci permanent. La surqualité serait de rajouter une /progressbar/ (contôle supplémentaire à cocher). Mais pour la faire fonctionner, il faut du code en plus (timer ?) Je vais chercher !!! (seul...)
JMM21
"Geo" a solutionné, aussi...
La userform n'a pas le temps de s'afficher. Il faut ajouter un doevents avant le run. Pour faire plus simple : supprimez la procédure UserForm_Activate et modifiez celle-ci :
Sub Bouton_Maj() Message_Maj.Show False DoEvents Application.Run "Maj_Champ" Message_Maj.Hide End Sub
Pour votre mise à jour si vous aviez pu faire une boucle vous auriez pu y insérer qqch comme : Message_Maj.Label1.Caption = "Texte5" DoEvents Comme ça le texte évoluerait sur votre userform, ça ferait plus vivant.
J'ai lu la réponse d'Anacoluthe en premier... La votre fonctionne aussi, bien sûr
Merci
"Geo" a solutionné, aussi...
La userform n'a pas le temps de s'afficher.
Il faut ajouter un doevents avant le run.
Pour faire plus simple :
supprimez la procédure UserForm_Activate
et modifiez celle-ci :
Sub Bouton_Maj()
Message_Maj.Show False
DoEvents
Application.Run "Maj_Champ"
Message_Maj.Hide
End Sub
Pour votre mise à jour si vous aviez pu faire une boucle
vous auriez pu y insérer qqch comme :
Message_Maj.Label1.Caption = "Texte5"
DoEvents
Comme ça le texte évoluerait sur votre userform, ça ferait plus vivant.
J'ai lu la réponse d'Anacoluthe en premier...
La votre fonctionne aussi, bien sûr
La userform n'a pas le temps de s'afficher. Il faut ajouter un doevents avant le run. Pour faire plus simple : supprimez la procédure UserForm_Activate et modifiez celle-ci :
Sub Bouton_Maj() Message_Maj.Show False DoEvents Application.Run "Maj_Champ" Message_Maj.Hide End Sub
Pour votre mise à jour si vous aviez pu faire une boucle vous auriez pu y insérer qqch comme : Message_Maj.Label1.Caption = "Texte5" DoEvents Comme ça le texte évoluerait sur votre userform, ça ferait plus vivant.
J'ai lu la réponse d'Anacoluthe en premier... La votre fonctionne aussi, bien sûr