StatusBar>ProgressBar : temporiser l'exécution

Bonsoir à tous,

J'ai une procédure glanée sur le web (auteur : sylvanu ; forum : excel-downloads) permettant d'exécuter une progressbar dans un statusbar. J'utilise cette macro-enfant dans une boucle de ma macro-parent.

La croissance de cette progressbar et l'utilisation en boucle de doevents est gourmande en temps. Je souhaite intégrer en plus d'un calcul de progression du type progress = i / total , une temporisation basée sur l'horloge système afin de ne traiter qu'une fois par seconde (par exemple).

Je suis fatigué et je tourne autour du pot, le truc m'échappe. Je pressens surement une variable publique contenant un Timer initial, l'utilisation de Application.ontime ce genre de truc..

Je ne veux pas que cela gel l'exécution de la macro-parent ni pendant (et je le sens venir... ni à la toute fin de la boucle i(=total)/total)

Avez-vous une idée ? Merci d'avance

Sub ProgressbarStatusBar(Titre, Valeur, Total, Optional tempo% = 0)
'*** ProgressBar dans StatusBar
Dim déclenche As Boolean
Dim pourcent, plein, vide, tpsb!
déclenche = False: tpsb = Timer

    If Titre = "" Then
        Application.StatusBar = ""
    ElseIf tpsb + tempo >= Timer Then
        déclenche = True
        tpsb = Timer
    End If
    If déclenche Then
        pourcent = Int(100 * Valeur / Total)    ' Calcul du % d'avancement
        plein = Int(50 * Valeur / Total)        ' Calcul du nombre de pavés pleins
        vide = 50 - plein                       ' Déduction du nombre de pavés vides ( pour faire 50 au total )
        Application.StatusBar = Titre & " - Progression : " & pourcent & "%   " & _
                                        WorksheetFunction.Rept(ChrW(9608), plein) & _
                                        WorksheetFunction.Rept(ChrW(9618), vide)
        DoEvents
    End If

End Sub

Bonjour,

à l'arrache au plus simple :

Dim i as long
' ...
i=i+1
if i mod 200 = 0 then
   ' executer 1 fois/200
   ' ....
endif

modifie 200 par essai/erreur jusqu'à la valeur qui te convienne
eric

bonjour,

edit : Hello eriiic

une adaptation de ton code :

Sub ProgressbarStatusBar(Titre, Valeur, Total, Optional tempo = 0)
    '*** ProgressBar dans StatusBar
    Dim déclenche As Boolean
    Dim pourcent, plein, vide
    If Valeur Mod tempo = 0 Then
        pourcent = Int(100 * Valeur / Total)    ' Calcul du % d'avancement
        plein = Int(50 * Valeur / Total)        ' Calcul du nombre de pavés pleins
        vide = 50 - plein                       ' Déduction du nombre de pavés vides ( pour faire 50 au total )

        Application.StatusBar = Titre & " - Progression : " & pourcent & "%   " & _
        WorksheetFunction.Rept(ChrW(9608), plein) & _
        WorksheetFunction.Rept(ChrW(9618), vide)

        DoEvents
    End If
End Sub

Sub test()
    bs = 100000
    tempo = Int(bs / 100) 'une mise à jour pour chaque progression de 1%
    For i = 1 To bs 'ta boucle
        ProgressbarStatusBar "test", i, bs, tempo
    Next i
End Sub

Bonjour à tous,
Salut h2so4,

mais là tu ne monopolises pas le processeur alors qu'il faut le laisser libre pour continuer la boucle de calcul dont on veut voir la progression ?

eric

bonjour eriiic,

mais là tu ne monopolises pas le processeur alors qu'il faut le laisser libre pour continuer la boucle de calcul dont on veut voir la progression ?

je suppose que tu voulais dire

mais là tu monopolises le processeur alors qu'il faut le laisser libre pour continuer la boucle de calcul dont on veut voir la progression ?

L'appel de la sub progressbarstatusbar doit être intégrée dans la boucle pour laquelle on veut voir le pourcentage d'évolution. J'aurais dû le préciser.

test est un exemple de boucle avec l'intégration de l'appel.

pas vraiment le temps de tester, je te crois

Hello ! Merci pour vos réponses.

Le "mod" est simple et efficace. résolu

Rechercher des sujets similaires à "statusbar progressbar temporiser execution"