Barre de progression dans une userform excel

Soyez le premier à donner votre avis sur cette source.

Vue 24 607 fois - Téléchargée 3 672 fois

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

Ajouter un commentaire

Commentaires

Messages postés
22
Date d'inscription
jeudi 10 août 2006
Statut
Membre
Dernière intervention
8 juillet 2010

La fonction "Ventilation" est en faite le nom de la macro "lourde" dont je met une partie du code en source plus haut..
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
salut, il semble manquer la fonction ventilation (pour l'exemple) et le fichier excel si tu as exporté le code principal

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.