Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 Affichage dynamique dans un Label d'un UserForm

re4

XLDnaute Occasionnel
Bonjour,
But : Affichage temporaire d'information pendant l’exécution d'un macro

J'ai créé un UserForm avec une barre de progression qui fonctionne bien mais ma connaissance du VBA étant limité, je n'arrive pas à faire fonctionner l'affichage des données dans un label (en note dans le code joint) dans ce même UserForm

Pour le test c'est une boucle For/Next mais dans mes macros ça peut être une variable ou une valeur d'une cellule
Je ne suis pas arrivé à utiliser un timer dans la ProgressBar :-(
Sauf erreur, les macros sont éxutées pendant l'affichage de la progression.

Il me semble avoir lu quelque part qu'il faudrait ajouter en fin de code (une histoire de mémoire ?) :
UserForm1.Hide
UserForm1 = Nothing

En vous remerciant pour votre aide
VB:
Sub Test1()
UserForm1.Show 0
UserForm1.Repaint
For x = 1 To 1000
Range("B1") = x
UserForm1.ProgressBar1.Value = x / 1000 * 100
'UserForm1.Label1.Caption = Sheets("Feuil1").Range("B1").Value ' Ca ne fonctionne pas :-(
Next x
Unload UserForm1
End Sub
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
bonjour met un doevents
histoire de donner la main au label pour qu'il puisse se modifier
et il faut penser a soit adapter le max de la progress soit faire un prorata de l'évo de la boucle sur le max de la progress
exemple ici mon max progressbar est de 100 et je boucle jusqu’ à 10000
il me faut donc la positionner a chaque tour avec x/max
sauf que 0 elle n'aime pas donc un max de l'application entre 1 et x/maxi de la progress
ainsi tu peux changer le 10000 de la boucle sans changer le max de la progressbar

cela étant dit tu allonge le temps d’exécution de ta macro de (*3 et peut être plus)avec un vu metre
VB:
Sub Test1()
    Dim maxi&
    UserForm1.Show 0
    UserForm1.Repaint
    maxi = UserForm1.ProgressBar1.Max
    For x = 1 To 10000
        Range("B1") = x
        DoEvents
        UserForm1.ProgressBar1.Value = Application.Max(1, Round(x / maxi))
        UserForm1.Label1.Caption = Sheets("Feuil1").Range("B1").Value    ' Ca ne fonctionne pas :-(
    Next x
    Unload UserForm1
End Sub
 
Réactions: re4

re4

XLDnaute Occasionnel
Bonjour PatrickToulon
Super ça marche parfaitement, tu as raison, je vais me contenter juste du label avec un message mais pour le fun je garde précieusement ta macro
Bonne journée

 

Discussions similaires

Réponses
3
Affichages
481
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…