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.
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.