Barre de progression dans une userform excel

Description

Ce code permet d'afficher une barre de progression simple dans un userform, préalablement conçu, pendant l'exécution d'une macro lourde.
Vous trouverez dans le fichier un userform déja créer, vous n'aurez plus qu'a l'importer.

L'utilisateur va devoir réfléchir comment incrémenter "PctDone" (Variable qui "rempli" la barre). Dans l'exemple suivant, je copie une parti d'une feuille dans une autre sous certaines conditions. Cela prend énormément de temp si votre base contient 3000 entrées...

Source / Exemple :


'A mettre au début dans la macro "lourde"
Dim PctDone As Single

'Ceci est un exemple de macro pour laquelle j'ai utilisé ma barre de progression

Sheets("Base de données").Select
For a = 3 To 3000
Range("T" & a).Select
If Selection <= Range("U1") Then
    Range("C" & a & ":D" & a).Select
    Selection.Copy
    Sheets("WorkSheet").Select
    With Range("C65536").End(xlUp).Offset(1, 0).Select
    ActiveSheet.Paste
    End With
    Sheets("Base de données").Select
    Range("K" & a).Select
    Selection.Copy
    Sheets("WorkSheet").Select
    With Range("E65536").End(xlUp).Offset(1, 0).Select
    ActiveSheet.Paste
    End With
    Sheets("Base de données").Select
    Range("L" & a).Select
    Selection.Copy
    Sheets("WorkSheet").Select
    With Range("G65536").End(xlUp).Offset(1, 0).Select
    ActiveSheet.Paste
    End With
End If
    Sheets("Base de données").Select
    ' A partir de ce point j'incrémente PctDone
    ' Mise à jour du pourcentage (Itération / par le nombre max de ligne)
    PctDone = a / 3000
    ' Appelle de la sous-routine qui met à jour la progressBar sur base du PctDone
    UpdateProgressBar PctDone
Next a
'Fin de la macro d'exemple

'Code de la sous-routine
Sub UpdateProgressBar(PctDone As Single)
    With ProgressBar

        ' Mise à jour du label.
        .FrameProgress.Caption = Format(PctDone, "0%")

        ' Afin de paramétrer la fin de la progressBar par rapport au frame
        .LabelProgress.Width = PctDone * _
            (.FrameProgress.Width - 20)
    End With

    ' DoEvents autorisant au UserForm de ce mettre à jour
    DoEvents
End Sub

'Voici le code de la userform
Private Sub UserForm_Activate()
    ' Largeur de la progressBar à 0
    ProgressBar.LabelProgress.Width = 0

    ' Appelle de la sous-routine
    Call ventilation
End Sub

Conclusion :


ProgressBar facile à mettre en place. L'idée du Label qui se rempli donne un beau rendu.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.