Boucles et boucles de sortie dans VBA
-
Boucle
For
de VBA -
Boucle
Do Until
VBA -
Boucle
Do While
VBA -
Utilisation de la commande
Exit
pour forcer l’arrêt de la boucle 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.
- Boucle
For
- Boucle dans des limites prédéfinies ou fixes - Boucle
Do While
- Boucle tant que la condition estTrue
. - Boucle
Do Until
- Boucle jusqu’à ce que la condition soitTrue
.
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.