Cours VBA : les boucles

While

Les boucles permettent de répéter des instructions un certain nombre de fois, ce qui peut être un gain de temps considérable.

Le code suivant numérote les cellules de la colonne A (de la ligne 1 à 12) :


Sub boucle_while()

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

Maintenant, imaginez qu'il faille numéroter plusieurs centaines de lignes ... Vous comprenez donc l'intérêt de créer des boucles.

Voici la boucle While :

Sub boucle_while()

    While [condition]
        'Instructions
    Wend

End Sub

Tant que la condition est vraie, les instructions sont exécutées en boucle (attention à ne pas créer une boucle infinie).

Voici la macro répétitive ci-dessus avec la boucle While :

Sub boucle_while()

    Dim numero As Integer
    numero = 1 'Numéro de départ (correspond ici au n° de ligne et au n° de numérotation)

    While numero <= 12 'TANT QUE la variable numero est <= 12, la boucle est répétée
       Cells(numero, 1) = numero 'Numérotation
       numero = numero + 1 'Le numéro est augmenté de 1 à chaque boucle
    Wend
       
End Sub

Avec cette boucle, si nous voulons numéroter 500 lignes, il suffit alors de remplacer 12 par 500 ...

Do Loop

Cette boucle fonctionne de la même manière que While Wend (tant que la condition est vraie, la boucle est exécutée) :

Sub boucle_do_while()

    Do While [condition]
        'Instructions
    Loop

End Sub

La condition peut également être placée en fin de boucle Do Loop, ce qui implique que les instructions sont exécutées au moins une fois :

Sub boucle_do_while()

    Do
        'Instructions
    Loop While [condition]

End Sub

Plutôt que de répéter la boucle tant que la condition est vraie, il est possible de quitter la boucle lorsque la condition est vraie en remplaçant While par Until :

Sub boucle_do_while()

    Do Until [condition]
        'Instructions
    Loop

End Sub

For

Sub boucle_for()

    For i = 1 To 5
        'Instructions
    Next

End Sub

La boucle For est répétée ici 5 fois.

A chaque répétition de la boucle, la variable i est automatiquement augmentée de 1 :

Sub boucle_for()

    For i = 1 To 5
        MsgBox i
    Next

End Sub

Quitter une boucle prématurément

Il est possible de quitter une boucle For prématurément grâce à l'instruction suivante :

Exit For 'Quitter une boucle For

En voici un exemple :

Sub boucle_for()
    Dim max_boucles As Integer
    max_boucles = Range("A1") 'En A1 : une limite de répétitions de la boucle est définie

    For i = 1 To 7 'Boucles prévues : 7
       If i > max_boucles Then 'Si A1 est vide ou contient un nombre < 7, diminution du nb de boucles
           Exit For 'Si condition vraie, on quitte la boucle For
       End If
   
       MsgBox i
    Next

End Sub

Les autres instructions Exit :

Exit Do 'Quitter une boucle Do Loop
Exit Sub 'Quitter une procédure
Exit Function 'Quitter une fonction
Télécharger ce cours au format PDF