Les boucles répètent les instructions plusieurs fois et peuvent faire gagner beaucoup de temps.
Les types de boucles suivants existent dans Excel VBA :
Le code suivant insère une séquence de nombres dans chaque cellule de la colonne A (de 1 à 12) :
Sub while_loop() Cells(1, 1) = 1 Cells(2, 1) = 2 Cells(3, 1) = 3 Cells(4, 1) = 4 Cells(5, 1) = 5 Cells(6, 1) = 6 Cells(7, 1) = 7 Cells(8, 1) = 8 Cells(9, 1) = 9 Cells(10, 1) = 10 Cells(11, 1) = 11 Cells(12, 1) = 12 End Sub
Ce code est très répétitif...
Imaginez si nous devions insérer des nombres consécutifs dans des centaines de cellules au lieu de seulement 12... Vous comprenez maintenant pourquoi les boucles sont très utiles.
Donnons un exemple de cycle vide While :
Sub while_loop() While [condition] 'Instructions Wend End Sub
Tant que la condition est vraie, les instructions de la boucle continueront à s'exécuter (mais attention à ne pas créer une boucle infinie).
Vous trouverez ci-dessous la macro de boucle évoquée précédemment, transformée en boucle While :
Sub while_loop() Dim num As Integer num = 1 'Le numéro de départ (dans ce cas, c'est le numéro de ligne et la valeur définie) While num <= 12 'Tant que la variable num est inférieure ou égale à 12, les instructions seront exécutées Cells(num, 1) = num 'Numérotage num = num + 1 'Le nombre est incrémenté de 1 à chaque passage de la boucle Wend End Sub
En utilisant cette boucle dans une macro, tout ce que nous aurions à faire si nous avions besoin de 400 bandes au lieu de 12 serait de remplacer 12 par 400.
Il existe une autre façon d'écrire une boucle qui fonctionne de la même manière que While Wend (s'exécutant tant qu'une certaine condition contenue dans la commande While est vraie) :
Sub do_while_loop() Do While [condition] 'Instructions Loop End Sub
La version suivante montre que la condition peut être écrite à la fin de la boucle Do Loop, ce qui signifie que les instructions seront exécutées exactement au moins une fois :
Sub do_while_loop() Do 'Instructions Loop While [condition] End Sub
Au lieu de boucler pendant que la condition est remplie, nous pouvons également quitter la boucle par condition si nous remplaçons While par Until :
Sub do_while_loop() Do Until [condition] 'Instructions Loop End Sub
Sub for_loop() For i = 1 To 5 'Instructions Next End Sub
La boucle For se répétera ici 5 fois.
A chaque fois que ce cycle est répété, la variable i est automatiquement augmentée de 1 :
Sub for_loop() For i = 1 To 5 MsgBox i Next End Sub
Il est possible de sortir prématurément de la boucle For en utilisant l'instruction suivante :
Exit For 'Quitter la boucle For
Prenons un exemple qui montrera clairement ceci :
Sub for_loop() Dim max_loops As Integer max_loops = Range("A1") 'Dans la cellule A1, nous avons précisé la limite du nombre de répétitions For i = 1 To 7 'Nombre de cycles attendu : 7 If i > max_loops Then 'Si la cellule A1 est vide ou contient un nombre inférieur à 7, réduisez le nombre de répétitions Exit For 'Si la condition précédente est TRUE, alors la sortie de la boucle For...loop End If MsgBox i Next End Sub
Autres opérateurs Exit :
Exit Do 'Sortie de boucle Do Loop
Exit Sub 'Sortie de la procédure
Exit Function 'Fonction de sortie