ProgressBar sur un userform
Amélie
-
Amélie -
Amélie -
Bonjour tout le monde...
Petit problème avec une ProgressBar...
J'ai un Userform avec un CommandButton...
Lorsque je clique sur le CommandButton j'ai une macro qui
s'exécute.
Cette macro se fait en environ 20 secondes...
J'aimerai intégré une ProgressBar pour que l'utilisateur
puisse savoir environ le temps à attendre...
J'ai bien ajouté la ProgressBar depuis la boîte à
outils....
Je l'ai intégré sur mon Userform sur lequel il y a aussi mon CommandButton
Mais je n'ai aucune idée du code à mettre pour qu'elle
s'anime...
Une âme charitable pourrait peut-être m'aider...
Merci beaucoup...
Amélie
Petit problème avec une ProgressBar...
J'ai un Userform avec un CommandButton...
Lorsque je clique sur le CommandButton j'ai une macro qui
s'exécute.
Cette macro se fait en environ 20 secondes...
J'aimerai intégré une ProgressBar pour que l'utilisateur
puisse savoir environ le temps à attendre...
J'ai bien ajouté la ProgressBar depuis la boîte à
outils....
Je l'ai intégré sur mon Userform sur lequel il y a aussi mon CommandButton
Mais je n'ai aucune idée du code à mettre pour qu'elle
s'anime...
Une âme charitable pourrait peut-être m'aider...
Merci beaucoup...
Amélie
A voir également:
- ProgressBar sur un userform
- Liste deroulante dans un Userform ✓ - Forum Excel
- Userform excel mac - Forum Word
- Rafraichir données userform ✓ - Forum Excel
- Excel vba création de formulaire userform ajouter rechercher modifier facilement ✓ - Forum Excel
- Création d'un trombinoscope via un userform Excel - Forum VB / VBA
2 réponses
Salut,
En fait il faut mettre la progressbar à jour périodiquement
Voici un exemple:
1 form avec un bouton, un timer et un progressbar
Private Sub Command1_Click()
Me.Timer1.Enabled = False
Me.Timer1.Interval = 100 '0.1 secondes
Me.Timer1.Enabled = True
Me.ProgressBar1.Min = 0
Me.ProgressBar1.Max = 100 '10 seconde de progression
Me.ProgressBar1.Value = 0 'valeur de départ à 0 (barre vierge)
End Sub
Private Sub Timer1_Timer()
Me.ProgressBar1.Value = Me.ProgressBar1.Value + 1
If Me.ProgressBar1.Value = Me.ProgressBar1.Max Then
'c fini, il faut arreter le timer pour eviter un débordement
Me.Timer1.Enabled = False
MsgBox "Fini"
End If
End Sub
A toi de l'adapter à ton critère d'avancement
Bon courage
En fait il faut mettre la progressbar à jour périodiquement
Voici un exemple:
1 form avec un bouton, un timer et un progressbar
Private Sub Command1_Click()
Me.Timer1.Enabled = False
Me.Timer1.Interval = 100 '0.1 secondes
Me.Timer1.Enabled = True
Me.ProgressBar1.Min = 0
Me.ProgressBar1.Max = 100 '10 seconde de progression
Me.ProgressBar1.Value = 0 'valeur de départ à 0 (barre vierge)
End Sub
Private Sub Timer1_Timer()
Me.ProgressBar1.Value = Me.ProgressBar1.Value + 1
If Me.ProgressBar1.Value = Me.ProgressBar1.Max Then
'c fini, il faut arreter le timer pour eviter un débordement
Me.Timer1.Enabled = False
MsgBox "Fini"
End If
End Sub
A toi de l'adapter à ton critère d'avancement
Bon courage
;-))
La réponse de beldyn est bonne, sauf qu'elle pourrait être plus détaillée ;-)))
Alors : Le timer, c'est un objet comme les autres (boutons, etc...)qui doit se trouver dans la barre d'outils des contrôles, il ressemble à un chronomètre, visuellement....
Sa particularité est de déclancher du code à des moments spécifiques quand il est activé, selon un intervalle de temps défini par sa propriété .Interval
Si tu pose cet objet dans ta forme, tu vas dans son code puis ce code se déclanchera à intervalle réguliers.... Mais il est invisible à l'exécution, ne panique pas....
Et si je devais rajouter quelque chose, je dirais que moi, j'utiliserai un fichier qui me récupérerai les temps moyens d'exécution de ta sub, pour mettre ensuite à jour le .Min et le .Max et faire évoluer le .Value ou le .Interval en fonction, ceci pour avoir des durées d'exécution cohérentes, au cas où tu distribuerais ton appli sur différentes machines.... Et aussi pour faire des stats... ;-)))
Sinon, Beldyn à dit l'essentiel... ;-)))
Wild and Free
La réponse de beldyn est bonne, sauf qu'elle pourrait être plus détaillée ;-)))
Alors : Le timer, c'est un objet comme les autres (boutons, etc...)qui doit se trouver dans la barre d'outils des contrôles, il ressemble à un chronomètre, visuellement....
Sa particularité est de déclancher du code à des moments spécifiques quand il est activé, selon un intervalle de temps défini par sa propriété .Interval
Si tu pose cet objet dans ta forme, tu vas dans son code puis ce code se déclanchera à intervalle réguliers.... Mais il est invisible à l'exécution, ne panique pas....
Et si je devais rajouter quelque chose, je dirais que moi, j'utiliserai un fichier qui me récupérerai les temps moyens d'exécution de ta sub, pour mettre ensuite à jour le .Min et le .Max et faire évoluer le .Value ou le .Interval en fonction, ceci pour avoir des durées d'exécution cohérentes, au cas où tu distribuerais ton appli sur différentes machines.... Et aussi pour faire des stats... ;-)))
Sinon, Beldyn à dit l'essentiel... ;-)))
Wild and Free
J'ai posé la meme question sur le forum VBA de Microsoft...
Désolée de ne pas être un modèle de fidélité à CCM :-)))
voila ce qu'on ma répondu...
ProgressBar1.Min = 1 ' Remplissage Minimum
ProgressBar1.Max = 100 'Remplissage Maximum
For x = 1 To 100
ProgressBar1.Value = x 'Change le remplissage fonction X
Next x
***************************
J'ai juste rajouté au début de ce code :
Dim x as Integer
x= 1
alors là, la progressbar s'anime, mais en 1 seconde...
alors que ma macro dure 15'
est-ce que la progressbar d'adapte si par exemple la marco dure plus ou moins longtemps...
:-))))))
bonnes fêtes
Désolée de ne pas être un modèle de fidélité à CCM :-)))
voila ce qu'on ma répondu...
ProgressBar1.Min = 1 ' Remplissage Minimum
ProgressBar1.Max = 100 'Remplissage Maximum
For x = 1 To 100
ProgressBar1.Value = x 'Change le remplissage fonction X
Next x
***************************
J'ai juste rajouté au début de ce code :
Dim x as Integer
x= 1
alors là, la progressbar s'anime, mais en 1 seconde...
alors que ma macro dure 15'
est-ce que la progressbar d'adapte si par exemple la marco dure plus ou moins longtemps...
:-))))))
bonnes fêtes
voila...
je crois que le problème est réglé...
tout fonctionne à merveille...
ma progressbar dure tout le temps de la macro
avec le code ci dessous....
Dim Compteur As Integer
Dim i As Integer
Dim Increment As Single
'ProgressBar
Compteur = 0
Do While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Activate
Compteur = Compteur + 1
Loop
For i = 0 To Compteur - 1
Increment = 100 / (Compteur + 1)
Increment = (i + 1) * Increment
Me.ProgressBar1.Value = Increment
Next i
Me.ProgressBar1 = 100
bye et bonne fêtes...
Amélie
je crois que le problème est réglé...
tout fonctionne à merveille...
ma progressbar dure tout le temps de la macro
avec le code ci dessous....
Dim Compteur As Integer
Dim i As Integer
Dim Increment As Single
'ProgressBar
Compteur = 0
Do While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Activate
Compteur = Compteur + 1
Loop
For i = 0 To Compteur - 1
Increment = 100 / (Compteur + 1)
Increment = (i + 1) * Increment
Me.ProgressBar1.Value = Increment
Next i
Me.ProgressBar1 = 100
bye et bonne fêtes...
Amélie
Je comprends bien le code que tu as mis, sauf le timer...
Est-ce que c'est un contrôle supplémentaire à installer sur la boìte à outils...
(parce que quand j'écris Me. je ne trouve pas le timer1 auquel tu fais référence dans la première partie de ton code...)
Si tu peux encore m'éclairer sur ce point tu serai vraiment un amour...
:-)))