ProgressBar sur un userform

Fermé
Amélie - 10 déc. 2002 à 15:46
 Amélie - 11 déc. 2002 à 13:14
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

2 réponses

beldyn Messages postés 188 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 1 février 2005 19
10 déc. 2002 à 16:31
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
0
Merci pour ta réponse beldyn...

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

:-)))
0
WhiteFang Messages postés 2063 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204
11 déc. 2002 à 04:22
;-))

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
0
Merci WhiteFang

Je vais tester le avec le Timer...
tout comme mon deuxième message à propos du Label clignotant...

Micccciii des infooooo.... :-))))
et bonnes fêtes...
0
beldyn Messages postés 188 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 1 février 2005 19
11 déc. 2002 à 09:40
Désolé pour mon obscure réponse, il es vrai que je ne suis pas pédagogue pour un rond.
:-))
0
Amélie > beldyn Messages postés 188 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 1 février 2005
11 déc. 2002 à 10:03
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
0
beldyn Messages postés 188 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 1 février 2005 19 > beldyn Messages postés 188 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 1 février 2005
11 déc. 2002 à 10:19
Non, ta progressbar ne s'adaptera pas toute seul à ta macro. C'est toi qui doit gérer sa progression. L'idée de WhiteFang est à creuser, mais ne l'ayant jamais mise en place, je ne peut pas te guider sur ce point.
A+
0
Amélie > beldyn Messages postés 188 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 1 février 2005
11 déc. 2002 à 13:14
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
0