Utilisation de boucles Do

Vous pouvez utiliser des instructions Do...Loop pour exécuter un bloc d'instructions un nombre indéfini de fois. Les instructions sont répétées tant qu'une condition est True ou jusqu'à ce qu'une condition devienne True.

Répétition d'instructions tant qu'une condition est True

Utilisez le mot-clé While pour vérifier une condition dans une instruction Do...Loop. Vous pouvez vérifier la condition avant d'entrer dans la boucle (comme indiqué dans l'exemple suivant avec ChkFirstWhile) ou la vérifier une fois que la boucle a été exécutée au moins une fois (comme indiqué dans l'exemple avec ChkLastWhile). Dans la procédure ChkFirstWhile, si myNum est défini sur 9 au lieu de 20, les instructions indiquées dans la boucle ne seront jamais exécutées. Dans la procédure ChkLastWhile, les instructions indiquées dans la boucle ne seront exécutées qu'une seule fois car la condition est déjà False.

Les exemples suivants illustrent l'utilisation de While :

Exemple 1 :

Sub ChkFirstWhile()
        Dim counter, myNum
        counter = 0
         myNum = 20
        Do While myNum > 10
           myNum = myNum - 1
           counter = counter + 1
        Loop
        'This loop made 10 repetitions."
End Sub

Exemple 2 :

Sub ChkFirstWhile()
    Dim counter, myNum
    counter = 0
    myNum = 9
    Do While myNum > 10
        myNum = myNum - 1
        counter = counter + 1
    Loop
    'This loop made 0 repetitions.
End Sub

Exemple 3 :

Sub ChkLastWhile()
        Dim counter, myNum
        counter = 0
        myNum = 9
        Do
                myNum = myNum - 1
                counter = counter + 1
        Loop While myNum > 10
        'This loop made 1 repetition.
End Sub

Exemple 4 :

Sub ExampleWithDoWhile()
        Dim counter, myNum
        counter = 0
        myNum = 15
        Do While myNum > 10
                        myNum = myNum - 2
                        counter = counter + 1
        Loop
' This loop reduced myNum to 9 and made 3 repetitions
End Sub

Exemple 5 :

Sub ExampleWithDoLoopWhile()
         Dim counter, myNum
        counter = 0
        myNum = 5
        Do
                        myNum = myNum + 1
                        counter = counter + 1
        Loop While myNum < 10
' This loop increased myNum to 10 and made 5 repetitions.
End Sub

Exemple 6 :

Sub ChkLastWhile()
   Dim counter, myNum
   counter = 0
   myNum = 9
   Do
      myNum = myNum - 1
      counter = counter + 1
   Loop While myNum > 10
   'This loop made 1 repetition.
End Sub

Répétition d'instructions jusqu'à ce qu'une condition devienne True

Vous pouvez utiliser le mot-clé Until de deux façons pour vérifier une condition dans une instruction Do...Loop. Vous pouvez vérifier la condition avant d'entrer dans la boucle (comme indiqué dans l'exemple suivant avec ChkFirstUntil) ou la vérifier une fois que la boucle a été exécutée au moins une fois (comme indiqué dans l'exemple avec ChkLastUntil). Tant que la condition est False, la boucle est exécutée.

Les exemples suivants illustrent l'utilisation de Until :

Exemple 1 :

Sub ChkFirstUntil()
   Dim counter, myNum
   counter = 0
   myNum = 20
   Do Until myNum = 10
      myNum = myNum - 1
      counter = counter + 1
   Loop
   'This loop made 10 repetitions.
End Sub

Exemple 2 :

Sub ChkLastUntil()
   Dim counter, myNum
   counter = 0
   myNum = 1
   Do
      myNum = myNum + 1
      counter = counter + 1
   Loop Until myNum = 10
'This loop made 9 repetitions.
End Sub

Exemple 3 :

Sub ExampleWithDoUntil()
        Dim counter, myNum
        counter = 0
        myNum = 20
        Do Until myNum < 15
                        myNum = myNum - 2
                        counter = counter + 1
        Loop
'This loop reduced myNum to 14 and made 3 repetitions.
End Sub

Exemple 4 :

Sub ExampleWithDoLoopUntil()
    Dim counter, myNum
    counter = 0
    myNum = 5
    Do
        myNum = myNum + 2
        counter = counter + 1
    Loop Until myNum >= 15
    'This loop increased myNum to 15 and made 5 repetitions.
End Sub

Sortie d'une instruction Do...Loop à partir de la boucle

Vous pouvez sortir d'une instruction Do...Loop à l'aide de l'instruction Exit Do. Etant donné que vous voulez généralement sortir d'une boucle dans certaines situations uniquement, par exemple pour éviter une boucle sans fin, vous devez utiliser l'instruction Exit Do dans le bloc d'instructions True d'une instruction If...Then...Else. Si la condition est False, la boucle est exécutée normalement.

Dans les exemples suivants, une valeur qui crée une boucle sans fin est affectée à myNum. L'instruction If...Then...Else vérifie cette condition, ce qui empêche la répétition sans fin.

Les exemples suivants illustrent l'utilisation de l'instruction Do...Loop :

Exemple 1 :

Sub ExitExample()
   Dim counter, myNum
      counter = 0
      myNum = 9
      Do Until myNum = 10
         myNum = myNum - 1
         counter = counter + 1
         If myNum < 10 Then Exit Do
      Loop
      'This loop made 1 repetition.
End Sub

Exemple 2 :

Sub PreventEndlessLoop()
        Dim counter, myNum
        counter = 1
        myNum = 0
        Do
                        myNum = myNum + 1
                        counter = counter + 1
                        If counter > 10 Then 
                                Exit Do   ' Avoids endless loop by exiting after 10 iterations.
                        End If
        Loop
        'This loop made 11 repetitions.
End Sub

Exemple 3 :

Sub ExampleWithDoWhile()
    Dim counter, myNum
    counter = 0
    myNum = 20
    Do While myNum > 10
        myNum = myNum - 2
        counter = counter + 1
        If myNum < 15 Then Exit Do   ' Exit the loop early if myNum is less than 15.
    Loop
    'This loop reduced myNum to 14 and made 3 repetitions.
End Sub

Exemple 4 :

Sub NestedLoopsExample()
    Dim i, j
    For i = 1 To 3
        j = 0
        Do
            j = j + 1
            If j > 2 Then Exit Do   ' Exit inner loop after 2 iterations.
        Loop
    Next
End Sub