ProgressBar sur un userform

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

2 réponses

  1. beldyn Messages postés 189 Statut Membre 19
     
    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
    1. Amélie
       
      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
  2. WhiteFang Messages postés 2063 Statut Membre 204
     
    ;-))

    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
    1. Amélie
       
      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
    2. beldyn Messages postés 189 Statut Membre 19
       
      Désolé pour mon obscure réponse, il es vrai que je ne suis pas pédagogue pour un rond.
      :-))
      0
      1. Amélie > beldyn Messages postés 189 Statut Membre
         
        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
      2. beldyn Messages postés 189 Statut Membre 19 > beldyn Messages postés 189 Statut Membre
         
        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
      3. Amélie > beldyn Messages postés 189 Statut Membre
         
        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