Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème sur une Userform

21 réponses
Avatar
JMM21
Bonjour à toutes et à tous,

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]

10 réponses

1 2 3
Avatar
Geo

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+

Avatar
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+

Avatar
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+


Avatar
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+


Avatar
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+

Avatar
JMM21


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+

Avatar
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+


Avatar
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

Avatar
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...)

Avatar
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

1 2 3