Executer un code avec userform ouvert

Résolu
siamens_duj Messages postés 212 Statut Membre -  
 siamens_duj -
Bonjour,

je viens vers vous car malgré toute les recherches que j'ai faites, je n'arrive pas à répondre
à ma question.

J'ai une macro qui appel plusieurs macros ( call toto, call tata ... ).
Pendant que ces macro s'exécute j'aimerais savoir où j'en suis, c'est pour cela que j'ai créé un userform
"pop" où est écrit "Veuillez patienter" et où se trouve également un label que je "colorie" au fur et à mesure que mes macros
se soit exécuté.

Pour être plus claire :

sub toto

'Ici la barre, semblable à une ProgressBar n'est pas colorié car l'exécution de la première macro commence
pop.show
With pop
.LabelPROGBAR.Width = .LabelPROGBAR.Width / 20 'Dimenssion de la barre
.LabelPROGBAR.BackColor = RGB(16, 78, 139) 'Couleur de la barre
End With

'mon code

'Ici la barre est un peu colorié en bleu car c'est la fin de l'éxécution de la première macro.
pop.show
With pop
.LabelPROGBAR.Width = .LabelPROGBAR.Width / 10 'Dimension de la barre
.LabelPROGBAR.BackColor = RGB(16, 78, 139) 'Couleur de la barre
End With

end sub

sub titi

'Je reprend la dimension de le dernier "résultat" de la barre
pop.show
With pop
.LabelPROGBAR.Width = .LabelPROGBAR.Width / 10 'Dimension de la barre
.LabelPROGBAR.BackColor = RGB(16, 78, 139) 'Couleur de la barre
End With

'mon code

'la barre est un peu colorié en bleu car c'est la fin de l'exécution de la deuxième macro.
pop.show
With pop
.LabelPROGBAR.Width = .LabelPROGBAR.Width / 8 'Dimension de la barre
.LabelPROGBAR.BackColor = RGB(16, 78, 139) 'Couleur de la barre
End With

end sub

etc ...


Mon problème est que je dois fermer le userform pour que la partie où il y a mon code s'exécute.
J'aimerais que le userform reste ouvert sans jamais se fermer et que le label se colorie au fur et à mesure
de l'exécution des macros.

Quelqu'un pourrait m'aider svp ??

1 réponse

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    J'ai une macro qui appel plusieurs macros ( call toto, call tata ...).

    Cette macro doit etre appelee dans l'userform ex ici:
    https://docs.microsoft.com/en-us/previous-versions/office/troubleshoot/office-developer/display-progress-bar-with-user-form-in-excel
    0
    1. siamens_duj
       
      Merci pour votre réponse. J' avais déjà essayé cette solution mais elle ne fonctionne pas dans mon cas.
      l'userform ne s'ouvre pas alors que j'ai fais comme indiqué et lorsque j'appel ShowUserForm avec le reste de mes macros il me dit que la fenêtre est déjà ouverte !
      Ma macro qui appelle les autre macros en appel 5, 6 avec le ShowUserForm mais je ne pense pas que le problème pourrait venir de là .. ?

      Merci quand même.
      0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > siamens_duj
       
      Re,

      Dans vos macros, enlevez les pop.show !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      Sauf celle qui lance au debut........
      0
    3. siamens_duj
       
      Merci encore pour votre réponse, le problème venait du fait que j'ai modifié le Main(), je l'ai donc remis comme il était mais quand j'exécute la macro le userform s'ouvre bien mais affiche direct 100% et reste comme ça jusqu'à la fin de l'exécution de la macro ..

      J'ai donc modifié la macro, j'ai retiré le Main() et j'ai repris quelques éléments pour mettre à jour ma ProgressBar à chaque fin de macro mais maintenant il m'affiche mon userform vide, pas même le label n'est visible.
      0
    4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > siamens_duj
       
      Re,

      Pour avoir un affichage du label, c'est une multiplication pas une division !!!!!!
      0
    5. siamens_duj > f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention  
       
      Private Sub UserForm_Activate()
      ' Set the width of the progress bar to 0.
      pop.LabelPROGRESS.Width = 0

      ' Call the main subroutine.
      'Call Main
      Call allMacros
      End Sub


      A la fin de ma première macro
      PctDone = (5 * 3)
      UpdateProgressBar PctDone


      A la fin de ma deuxième macro

      PctDone = (5 * 5)
      UpdateProgressBar PctDone


      et ainsi de suite

      et dans allMacros

      Sub allMacros()

      Call supprime
      Call Bz
      Call Copie
      Call coop
      Call Rech

      PctDone = (10 * 10)
      UpdateProgressBar PctDone

      Unload pop 'pop est mon userform

      End Sub
      0