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