COMMENT CRÉER UNE BARRE DE PROGRESSION EN VBA A RÉUTILISER DANS TOUS VOS CLASSEURS EXCEL !
Une barre de progression permet de montrer à un utilisateur l’état d’avancé d’un processus de manière visuelle, en attendant l'execution d'un processus principal. Voyons comment créer une barre de progression en VBA à réutiliser dans tous vos projets. Pour les plus pressés, vous pourrez télécharger le fichier, je vous montre dans la vidéo comment l'insérer dans vos propres documents.
Téléchargement
Vous pouvez télécharger le fichier d'exemple de cet article en cliquant sur le lien suivant :
Tutoriel Vidéo
Vous trouverez très régulièrement de nouvelles vidéos sur la chaîne, alors pensez à vous abonner pour ne manquer aucune astuce et devenir rapidement un pro d’Excel (cliquez-ici) !
1. Présentation
En règle générale, nous allons avoir besoin de mettre en place une barre de progression dans une macro commande VBA lorsque celle-ci va réaliser un nombre important d’opérations qui vont entraîner un certain temps de traitement.
Pour notre exemple, nous allons simplement actualiser la valeur contenue dans une cellule un très grand nombre de fois !
Nous disposons donc ici d’une cellule contenant une valeur initiale (la valeur 10), et nous allons simplement modifier cette valeur pour y afficher un nombre aléatoire un très grand nombre de fois, disons 5000 fois !
Cette cellule porte le nom de _maCellule, ce qui nous permettra de pouvoir l’appeler en VBA de manière très simple.
Si vous ne maîtrisez pas encore le VBA, pas de panique, nous développerons chaque point dans le détail, mais pour apprendre à maîtriser ce langage qui vous permettra de démultiplier les possibilités offertes par Excel, vous pouvez suivre la formation offerte sur excelformation.fr.
Pour créer la macro, nous allons commencer par créer un bouton qui permettra de l’appeler (Insertion > Forme) :
Puis nous dessinons simplement le rectangle qui représente le bouton :
Ensuite, nous ajoutons un texte à ce bouton (Clic-droit > Modifier le texte) :
Cela étant fait, nous pouvons maintenant ajouter une macro qui sera appelée lorsque nous cliquerons sur le bouton (clic-droit > Affecter une macro) :
Dans la fenêtre qui s’affiche, nous saisissons le nom à donner à la macro dans la zone Nom de la macro, puis nous cliquons sur le bouton Nouvelle pour créer la macro :
Cela a pour effet de lancer l’éditeur VBE au sein d’un tout nouveau module (module1), dans lequel la macro modifierValeurCellule a été ajoutée.
L’utilisation d’un bouton pour lancer une macro VBA est l’une des nombreuses possibilités offertes par Excel. Pour toutes les découvrir, je vous invite à consulter le chapitre dédié de la formation VBA d’excelformation.fr en cliquant ici.
Nous pouvons à présent insérer le code de la macro comme suit :
Sub modifierValeurCellule()
Dim i As Long
Randomize
For i = 1 To 5000
[_maCellule] = Rnd
Next
End Sub
Ce code très simple se contente de lancer 5000 une boucle dans laquelle la valeur de la cellule _maCellule va prendre une valeur aléatoire comprise entre 0 et 1.
Il s’agit évidemment d’une macro sans le moindre intérêt en dehors du fait de demander un certain temps d’exécution et donc de rendre l’usage d’une barre de progression plutôt utile.
Avant d’aller plus loin dans la lecture de ce tutoriel, vous pouvez lancer la macro une première fois, afin de tester si tout se passe normalement.
De cette manière, vous pouvez ajuster le nombre de répétitions de la boucle afin que la procédure ne prenne pas trop de temps, en fonction des capacités de votre ordinateur.
Sachez en effet, que la génération d’un nombre aléatoire demande en effet un certain temps de traitement (imperceptible lorsque celui-ci n’est exécuté qu’une seule fois, mais beaucoup plus significatif lorsque l’opération est répétée).
2. Création de la barre de progression
Deux options s’offrent à nous pour créer la barre de progression :
- Créer un graphique et modifier la valeur d’une cellule,
- Créer un userform et modifier dynamiquement la taille d’un élément
Evidemment, l’effet sera beaucoup plus intéressant dans le cadre de la deuxième option, et c’est bien évidemment ce que nous allons voir dans le cadre de ce tutoriel.
Pour créer le nouvel Userform, rendez-vous dans le menu Insertion > UserForm :
Ensuite, nous pouvons construire la fenêtre dans laquelle se trouvera insérée la barre de progression :
- Modifier le titre de cet UserForm (champs Caption de la fenêtre des propriétés) :
- Modifier la taille de l’UserForm :
- Insérer un champ Intitulé, qui pour le moment prend la valeur de « 0% » et pour lequel nous centrons le texte (Mettre la propriété TextAlign sur fmTextAlignCenter) :
- Ainsi qu’un champ image, qui va avoir exactement la même largeur que le champ de texte que nous avons inséré juste avant (nous verrons plus bas que cela est très important) :
- Que nous pouvons simplement personnaliser en modifiant les valeurs des couleurs de fond et de bordure depuis la fenêtre des propriétés :
Juste avant de pouvoir coder l’évolution de la barre de progression, nous allons attribuer des noms clairs aux deux éléments que nous venons d’insérer pour pouvoir les modifier simplement en VBA :
- barreProgression : désigne la barre de progression,
- textePourcentage : désigne le texte du pourcentage de progression
- maBarre : le nom de l’UserForm
Enfin, effectuons un clic-droit sur le nom de l’UserForm dans la fenêtre de navigation du projet afin de sélectionner Code :
Dans cette feuille de code, nous allons insérer deux procédures.
Tout d’abord la procédure qui permet d’afficher la barre de progression :
Sub afficher()
Me.Show 0
End Sub
L’instruction Me.Show permet de lancer l’UserForm, et l’argument « 0 » permet de définir que celui-ci n’est pas modal, c’est-à-dire que les macros vont continuer de fonctionner en tâche de fond en parallèle.
Ensuite nous insérons une seconde procédure qui va se charger d’actualiser la progression de la barre :
Sub actualiser(taux As Integer)
barreProgression.Width = (taux * textePourcentage.Width) / 100
textePourcentage = taux & "%"
If taux = 100 Then
Unload Me
End If
DoEvents
End Sub
Ici, la procédure actualiser attend un argument de type Integer qui porte le nom de taux.
Il s’agit d’un nombre allant de 0 à 100 qui va représenter l’évolution de la barre.
Ensuite, pour modifier la largeur de la barre de progression, nous intervenons sur la propriété Width de l’objet barreProgression, et nous lui affectons pour valeur la largeur de textePourcentage (comme nous avons vu plus haut, les deux objets textePourcentage et barreProgression ont exactement la même largeur) multiplié par la valeur de taux, le tout divisé par 100.
Cela étant fait, nous pouvons modifier le texte du champs textePourcentage pour y afficher le taux de progression en toute lettres.
Enfin, lorsque la valeur de taux est égale à 100, alors cela signifie que le traitement est terminé, nous pouvons alors masquer la barre de progression (Unload Me).
Pour finir, nous ajoutons simplement l’instruction DoEvents qui permet d’actualiser l’affichage de la barre de progressions.
Et voilà, notre barre de progression est maintenant pleinement fonctionnelle, il ne nous reste plus qu’à insérer celle-ci directement dans la procédure
Pour cela, nous commençons par l’afficher en lançant la procédure :
maBarre.afficher
À placer bien évidemment juste avant la boucle for.
Et pour terminer, à l’intérieur de celle-ci, nous actualisons simplement l’affichage de la barre de progression, grâce à l’instruction maBarre.actualiser (c’est-à-dire la procédure « actualiser » qui se trouve être un élément de l’objet UserForm « maBarre ») avec pour argument le nombre entier correspondant à l’état d’avancement de i pour arriver jusqu’à 5000.
Sub modifierValeurCellule()
Dim i As Long
Randomize
maBarre.afficher
For i = 1 To 5000
[_maCellule] = Rnd
maBarre.actualiser CInt(100 * i / 5000)
Next
End Sub
Noter l’utilisation de la fonction CInt() qui permet de convertir un nombre en entier (le résultat est donc ici tronqué).
Comme vous pouvez le constater, dans le cadre de ce tutoriel, nous avons totalement séparé le fonctionnement de la barre de progression et la construction de la macro.
Cela permet de pouvoir réutiliser à volonté cette barre de progression, il suffit en effet d’exporter l’UserForm dans un autre fichier, puis d’avoir recours aux procédures de la manière que ce que nous venons de voir !
Je vous montre dans la vidéo disponible au tout début du tutoriel comment procéder pour réutiliser la barre de progression dans tous vos projets !