COMMENT LANCER UNE MACRO VBA PLUSIEURS FOIS DE SUITE SUR EXCEL
Dans le cadre de la formation sur l’apprentissage du langage VBA d’excelformation, nous avons déjà vu comment procéder pour lancer une macro commande VBA directement depuis une feuille de calcul (par exemple en créant un bouton lié à ladite macro). Seulement vous avez été plusieurs à me demander comment lancer une macro non pas une seule fois, mais plusieurs fois de suite une même macro. Et c’est justement ce que nous allons voir dans ce mini-tutoriel.
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 fait l’astuce que nous allons utiliser ici va être de créer une procédure VBA intermédiaire qui va nous permettre d’appeler directement la macro principale que nous souhaitons lancer plusieurs fois.
Et c’est bien évidemment cette macro intermédiaire que nous allons lancer (par bouton, ou tout autre solution).
Pour l’exemple, nous allons commencer par créer une macro commande très simple :
- Depuis l’éditeur de code VBA (que nous lançons par exemple en sélectionnant le menu Développeur > Visual Basic, voir ce chapitre de la formation VBA),
- Puis nous insérons un nouveau module (Insertion > Module)
- Enfin, nous saisissons une macro très simple qui permet ici d’ajouter une unité à la valeur de la cellule sélectionnée :
Sub ajouterUneUnite()
If IsNumeric(ActiveCell) Then ActiveCell = ActiveCell + 1
End Sub
Cette procédure ajouterUneUnite() se contente de vérifier si la cellule active (retournée par ActiveCell) est effectivement numérique. Lorsque tel est le cas, alors nous ajoutons une unité (+1) à sa valeur.
En revanche, aucune action n’est prévue lorsque la cellule active n’est pas de type numérique.
Cette procédure est volontairement très simple, afin de pouvoir voir immédiatement le résultat dans la feuille de calcul !
Ensuite, revenons dans la feuille de calcul afin d’insérer un bouton :
- En cellule A6, nous saisissons la valeur 1 :
- Puis nous ajoutons un simple rectangle (Insertion > Formes > Rectangle) :
- Que nous dessinons à l’endroit et à la taille voulue :
- Puis nous effectuons un clic-droit sur ce rectangle > Modifier le texte :
- Au besoin, nous pouvons modifier le style du bouton (menu Mise en forme du ruban, qui n’apparaît que lorsque la forme est sélectionnée > Styles de forme) :
- Lorsque le texte et le style du bouton sont correctement définis, nous pouvons relier la macro ajouterUneUnite() à ce dernier en effectuant un nouveau clic-droit sur celui-ci > Affecter une macro) :
- Et enfin, dans la fenêtre qui s’affiche nous pouvons double-cliquer sur le nom de la macro :
À présent, pour tester la macro, il suffit de sélectionner la cellule A6 que nous préalablement remplie d’une valeur numérique (1), et nous cliquons sur le bouton :
Comme vous pouvez alors le constater, la valeur de la cellule passe effectivement de 1 à 2, une unité a effectivement été ajouté !
2. Répéter une macro 10 fois de suite
Nous pouvons maintenant en arriver au sujet qui nous intéresse : comment faire pour répéter 10 fois la procédure, afin d’ajouter autant d’unités à la valeur de la cellule A6 ?
Comme nous l’avons vu juste au-dessus, nous allons simplement ajouter une nouvelle procédure, que nous allons appeler ajouterDixUnites() et qui va se contenter d’appeler 10 fois de suite la procédure ajouterUneUnite() :
Sub ajouterDixUnites()
ajouterUneUnite
ajouterUneUnite
ajouterUneUnite
ajouterUneUnite
ajouterUneUnite
ajouterUneUnite
ajouterUneUnite
ajouterUneUnite
ajouterUneUnite
ajouterUneUnite
End Sub
Ici, nous avons choisi la solution de facilité en répétant simplement 10 fois de suite l’appel à la procédure ajouterUneUnite().
Évidemment, cette solution n’est pas optimale : non seulement celle-ci nécessite de recopier un grand nombre de fois une même ligne de code (heureusement le copier-coller nous facilite la tâche, mais imaginons que nous souhaitions répéter mille, ou un million de fois cette tâche…), mais en plus elle complique fortement la lecture de ce code.
La solution idéale consiste bien entendu à introduire une boucle For… Next :
Sub ajouterDixUnites()
Dim i As Integer
For i = 1 To 10
ajouterUneUnite
Next
End Sub
Encore une fois, vous trouverez toutes les informations sur l’utilisation des boucles dans la formation VBA.
Maintenant, nous pouvons créer un nouveau bouton pour appeler cette macro intermédiaire :
3. Répéter une macro X fois de suite
Maintenant que nous savons comment répéter une instruction VBA un nombre de fois défini, nous pouvons également laisser à l’utilisateur le choix de définir ce nombre.
Pour cela, il suffit d’utiliser une InputBox, qui permet d’afficher une boîte de dialogue dans laquelle nous pouvons saisir une information :
Sub ajouterXUnites()
Dim i As Integer
For i = 1 To InputBox("Combien d'unités voulez-vous ajotuer ?")
ajouterUneUnite
Next
End Sub
Comme précédemment, nous insérerons un nouveau bouton correspondant :