ProgressBar sur un userform

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

  • Votes
  • Date
  • Date décroissante
  1. 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
    1. 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...

      :-)))
  2. ;-))

    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
    1. 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...
    2. Désolé pour mon obscure réponse, il es vrai que je ne suis pas pédagogue pour un rond.
      :-))
    3. @beldynJ'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
    4. @beldynNon, 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+
    5. @beldynvoila...

      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