Créer une barre de progression dans un formulaire utilisateur, Excel VBA
Voici une explication détaillée et un guide étape par étape pour créer une barre de progression dans un formulaire utilisateur avec Excel VBA :
Étape 1 : Créer un formulaire utilisateur
Pour commencer, nous devons créer un formulaire utilisateur dans lequel la barre de progression sera affichée.
1. Ouvrez l’éditeur VBA : appuyez sur Alt + F11 pour ouvrir l’éditeur Visual Basic pour Applications (VBA) dans Excel.
2. Insérer un formulaire utilisateur :
- Dans l’éditeur VBA, accédez à Insertion > Formulaire utilisateur pour créer un formulaire utilisateur.
3. Renommez le formulaire utilisateur (facultatif) :
- Dans la fenêtre des propriétés, vous pouvez renommer le formulaire avec un nom explicite, comme frmProgressBar.
Étape 2 : Ajouter un contrôle ProgressBar
Dans Excel VBA, il n’existe pas de contrôle ProgressBar intégré, mais vous pouvez utiliser une étiquette pour en simuler un.
1. Insérer une étiquette pour la barre de progression :
- Dans le formulaire utilisateur, insérez un contrôle Étiquette en cliquant sur le bouton Étiquette de la boîte à outils. o Redimensionnez l’étiquette pour qu’elle serve d’arrière-plan à la barre de progression (par exemple, 200 px de large et 20 px de haut).
- Définissez la couleur d’arrière-plan de l’étiquette sur une couleur claire (comme Gris ou Gris clair).
- Nommez cette étiquette lblProgressBar.
2. Insérez une autre étiquette pour l’indicateur de progression :
- Insérez un autre contrôle Étiquette qui représentera la barre de progression.
- Définissez la couleur d’arrière-plan de cette étiquette sur une couleur vive (par exemple, Vert, Bleu, etc.).
- Nommez cette étiquette lblProgress.
- Définissez la largeur initiale de cette étiquette sur 0 pour démarrer sans progression.
Étape 3 : Coder la barre de progression
Nous allons maintenant écrire le code pour mettre à jour la barre de progression. Nous allons créer une sous-routine pour mettre à jour la progression, qui sera appelée par la macro principale. 1. Ajout de la sous-routine UpdateProgressBar :
Ajoutez une sous-routine au code de l’UserForm pour mettre à jour la largeur de l’étiquette de progression (lblProgress) en fonction d’un pourcentage.
Sub UpdateProgressBar(ByVal Progress As Double) ' Progress ranges from 0 to 100 Dim ProgressWidth As Double ProgressWidth = (Progress / 100) * lblProgressBar.Width lblProgress.Width = ProgressWidth End Sub
Dans cette sous-routine :
• Progress est le pourcentage que vous transmettez à la sous-routine pour représenter le degré d’avancement de la tâche (de 0 à 100).
• La largeur de lblProgress est mise à jour en fonction de ce pourcentage. La largeur de lblProgressBar permet de mettre à l’échelle la progression.
Étape 4 : Appel de la sous-routine UpdateProgressBar
Vous devez appeler cette sous-routine UpdateProgressBar depuis une macro ou une autre sous-routine où vous souhaitez afficher la progression.
1. Créer un bouton ou un événement déclencheur :
- Insérez un bouton (ou tout autre contrôle) qui déclenche l’opération à suivre.
2. Codez le suivi de progression dans une sous-macro : Dans la macro principale, simulez une tâche qui prend du temps et mettez à jour la barre de progression au fur et à mesure. Par exemple, si la tâche est une boucle, vous pouvez mettre à jour la barre de progression à chaque itération terminée.
Sub StartTask() Dim i As Integer Dim TotalSteps As Integer TotalSteps = 100 ' Par exemple, si la tâche comporte 100 étapes ' Afficher le formulaire utilisateur frmProgressBar.Show vbModeless ' Parcourir chaque étape de la tâche For i = 1 To TotalSteps ' Simuler une tâche DoEvents ' Permet au formulaire de se mettre à jour pendant la boucle ' Mettre à jour la barre de progression frmProgressBar.UpdateProgressBar (i) Next i ' Fermer le formulaire utilisateur une fois terminé Décharger frmProgressBar End Sub
Explication du code :
• frmProgressBar.Show vbModeless
: Le formulaire utilisateur s’ouvre de manière non bloquante (sans mode), ce qui permet à d’autres actions (comme la mise à jour de la barre de progression) de se produire pendant l’exécution de la tâche.
• DoEvents
: Excel peut mettre à jour le formulaire utilisateur pendant l’exécution de la boucle. Sans cela, la barre de progression risque de ne pas être mise à jour pendant la boucle, car Excel risque de se figer pendant l’exécution du code.
• frmProgressBar.UpdateProgressBar (i)
: Cette méthode met à jour la barre de progression avec le pourcentage actuel i.
• Une fois la boucle terminée, le formulaire est déchargé (Unload frmProgressBar
), fermant ainsi la barre de progression.
Résultat :
• Lorsque vous exécutez la sous-routine StartTask
, l’UserForm apparaît avec la barre de progression. À mesure que la boucle progresse, la largeur de l’étiquette lblProgress
augmente, simulant la progression de la tâche. Une fois la tâche terminée, la barre de progression disparaît.
Conclusion :
Cette méthode utilise des contrôles VBA de base pour simuler une barre de progression. C’est une solution flexible qui s’adapte à diverses tâches, des boucles aux processus de longue durée, en mettant simplement à jour la barre de progression à intervalles réguliers grâce à la sous-routine UpdateProgressBar
.