Boucles et boucles de sortie dans VBA

Glen Alfaro 30 janvier 2023
  1. Boucle For de VBA
  2. Boucle Do Until VBA
  3. Boucle Do While VBA
  4. Utilisation de la commande Exit pour forcer l’arrêt de la boucle dans VBA
Boucles et boucles de sortie dans VBA

Les boucles dans la programmation informatique sont très importantes. Ils permettent d’exécuter des tâches répétitives avec un minimum de lignes de code. Le besoin de boucles dans les ordinateurs se fait sentir pour plusieurs raisons selon les tâches à effectuer.

Même s’ils sont si puissants, ils sont pourtant simples dans leur contexte et leur syntaxe.

Dans VBA, trois boucles peuvent être utilisées.

  1. Boucle For - Boucle dans des limites prédéfinies ou fixes
  2. Boucle Do While - Boucle tant que la condition est True.
  3. Boucle Do Until - Boucle jusqu’à ce que la condition soit True.

Boucle For de VBA

Syntaxe:

For [ counter ] = [start] To [end]  Step [ step ]
    [ statements ]
    [ Exit For ]
Next [ counter ]

Paramètres:

[ counter ] Obligatoire. Typiquement un entier ou une variable longue qui contient la valeur actuelle du compteur
[ start ] Obligatoire. La valeur de départ du compteur
[end] Obligatoire. La valeur finale du compteur
[ statements ] Le bloc de code à exécuter à l’intérieur de la boucle
[ Exit For ] Optionnel. Forcer la boucle à s’arrêter et quitter le bloc de code de la boucle
[ step ] Optionnel. L’incrément du compteur à chaque itération. S’il n’est pas déclaré, la valeur est 1.

L’exemple de boucle For :

Ce bloc de code acceptera une valeur entière comme numéro de départ, puis diminuera le nombre jusqu’à zéro en utilisant une boucle For. Il imprimera le résultat de chaque itération.

Sub ReduceToZero(numStart As Integer)

Dim i As Integer

For i = numStart To 0 Step -1


    Debug.Print "The number is now " & i
    If i = 0 Then

        Debug.Print ("Done!")

    End If

Next i

End Sub

Sub testSub()

Call ReduceToZero(10)

End Sub

Production :

The number is now 10
The number is now 9
The number is now 8
The number is now 7
The number is now 6
The number is now 5
The number is now 4
The number is now 3
The number is now 2
The number is now 1
The number is now 0
Done!

Boucle Do Until VBA

Syntaxe:

Do Until [condition]
    [statements]
    [Exit Do]
Loop

Paramètres:

[condition] Obligatoire. La condition qui, une fois vraie, quittera le bloc de code
[statements] Obligatoire. Le bloc de code à exécuter
[Exit Do] Optionnel. Forcer la boucle à s’arrêter et quitter le bloc de code

Exemple de boucle Do Until :

Ce bloc de code acceptera une valeur entière comme numéro de départ, puis augmentera le nombre jusqu’à dix en utilisant une boucle Do Until. Il imprimera le résultat de chaque itération.

Sub IncrementToTen(numStart As Integer)

Dim i As Integer

i = numStart

Do Until i = 10 + 1

    Debug.Print "The number is now " & i
    i = i + 1
Loop

End Sub

Sub testSub()

Call IncrementToTen(-5)

End Sub

Sortie testSub :

The number is now -5
The number is now -4
The number is now -3
The number is now -2
The number is now -1
The number is now 0
The number is now 1
The number is now 2
The number is now 3
The number is now 4
The number is now 5
The number is now 6
The number is now 7
The number is now 8
The number is now 9
The number is now 10
Done!

Boucle Do While VBA

Syntaxe:

Do while [condition]
    [statements]
    [Exit Do]
Loop

Paramètres:

[condition] Obligatoire. La condition qui doit être vraie pour exécuter le bloc de code.
[statements] Obligatoire. Le bloc de code à exécuter
[Exit Do] Optionnel. Forcer la boucle à s’arrêter et quitter le bloc de code

L’exemple de boucle Do While :

Ce bloc de code acceptera une valeur entière comme numéro de départ, puis augmentera le nombre jusqu’à dix en utilisant une boucle Do While. Il imprimera le résultat de chaque itération.

Sub IncrementToTen(numStart As Integer)

Dim i As Integer
i = numStart
Do While i < 10 + 1

Debug.Print "The number is now " & i
i = i + 1
Loop
Debug.Print "Done!"
End Sub

Sub testSub()

Call IncrementToTen(-9)

End Sub

Sortie testSub :

The number is now -9
The number is now -8
The number is now -7
The number is now -6
The number is now -5
The number is now -4
The number is now -3
The number is now -2
The number is now -1
The number is now 0
The number is now 1
The number is now 2
The number is now 3
The number is now 4
The number is now 5
The number is now 6
The number is now 7
The number is now 8
The number is now 9
The number is now 10
Done!

Utilisation de la commande Exit pour forcer l’arrêt de la boucle dans VBA

Lorsqu’il s’agit de boucles, elles sont liées à des conditions que la boucle continuera à exécuter une fois remplies. Cependant, un scénario courant est que nous devons sortir de la boucle, même si les conditions sont toujours remplies. Une application typique pour cela est lorsqu’il s’agit de méthodes de gestion des erreurs, la technique Arrêter-lorsque-la-recherche. Une sortie immédiate de la boucle est nécessaire pour éviter d’autres erreurs ou gagner du temps d’exécution.

Les blocs de code ci-dessous démontrent l’utilisation de la commande Exit pour forcer l’arrêt de la boucle dans une boucle Do.

Ce bloc de code vise à arrêter la boucle lorsque le quotient de deux nombres est égal à un. Ces deux nombres sont générés aléatoirement entre les valeurs entières upperbound et lowerbound, paramètres du sous-programme. Si le diviseur généré (divis) est zéro, alors une erreur se produira puisque la division par zéro n’est pas autorisée. Pour éviter l’occurrence, nous utiliserons la commande Exit pour terminer la boucle.

Sub StopWhenQuotientIsOne(upperbound As Integer, lowerbound As Integer)

Dim divid As Integer
Dim divis As Integer
Dim isOne As Boolean

divid = Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
divis = Int((upperbound - lowerbound + 1) * Rnd + lowerbound)

Do Until isOne = True

    If divis = 0 Then
        Debug.Print "Illegal divisor. Exiting the Loop"
        Exit Do
    End If

Debug.Print divid / divis

If divid / divis = 1 Then

    isOne = True
    Debug.Print "Done! One is achieved."

End If

divid = Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
divis = Int((upperbound - lowerbound + 1) * Rnd + lowerbound)

Loop


End Sub

Sub testSub()

Call StopWhenQuotientIsOne(4, -4)

End Sub

Sortie testSub (1er essai) :

-4 
-0 
-0.666666666666667 
Illegal divisor. Exiting the Loop

Sortie testSub (4e essai) :

-2 
 0 
-3 
 1 
Done! One is achieved.

Le bloc de code ci-dessous démontre l’utilisation de la commande Exit pour forcer l’arrêt de la boucle dans une boucle For.

Dans cet exemple, la sous-routine StopWhenNegative requiert deux paramètres. Le premier est le startNum puis le EndNum. La boucle va itérer de startNum jusqu’à EndNum. Si le compteur devient négatif, la boucle sera terminée par la commande Exit.

Sub StopWhenNegative(startNum As Integer, EndNum As Integer)

Dim i As Integer
 
For i = startNum To EndNum Step -1
 
    If i < 0 Then
        Debug.Print "Opps, negative values detected. Exiting loop."
        Exit For
    End If
Debug.Print "The current number is :" & i
Next i

End Sub

Sub testSub()

Call StopWhenNegative(10, -5)

End Sub

Sortie testSub :

The current number is :10
The current number is :9
The current number is :8
The current number is :7
The current number is :6
The current number is :5
The current number is :4
The current number is :3
The current number is :2
The current number is :1
The current number is :0
Opps, negative values detected. Exiting loop.