Bonjour à tous,
Aujourd’hui nous allons voir les différents types de boucle en VBA afin d’apprendre à les maîtriser. En effet, suivant ce que vos programmes auront à réaliser, vous n’utiliserez pas la même instruction. Nous explorerons au travers de cet article comment fonctionnent les boucles « FOR« , « WHILE » et l’instruction « IF« .

L’instruction IF en VBA
La boucle IF en VBA permet de gérer une instruction conditionnelle. Si la condition est remplie, le programme rentrera dans le bloc pour exécuter le code à l’intérieur. Dans le cas contraire, le programme continuera son chemin sans rentrer dans le bloc. Voici la syntaxe générale de l’instruction IF en VBA :
x = 4
If x > 3 Then
Msgbox x
End If
VBSi la valeur de X est supérieure à 3, sa valeur sera afficher dans une boite de dialogue. Au lieu d’avoir un instruction à évaluer, une variable booléenne peut être directement utilisée :
x = 4
check = True
If check Then
Msgbox x
End If
VBCe deuxième exemple produit le même résultat mais le code est arrangé différemment. Ensuite, si la condition primaire n’est pas remplie, on voudra très certainement réaliser une seconde action dans la cas où elle n’est pas remplie. Nous utiliserons alors le mot clé « ELSE ».
Le mot clé Else
Le mot clé « ELSE » permet de définir une action à réaliser dans le cas où la condition primaire n’est pas remplie. Reprenons l’exemple précédent en rajoutant ce mot clé.
x = 2
If x > 3 Then
Msgbox x
Else
Msgbox "X est inférieur ou égal à 3"
End If
VB
Nous avons vu ici comment utiliser la fonction IF avec le mot clé ELSE afin de gérer deux cas de figures. Il se peut que vous ayez plus de cas à gérer. Pour gérer ces cas multiples, vous pourrez utiliser le mot clé ELSIF.
Le mot clé Elseif
Le mot clé « ELSEIF » permet d’enchainer les blocs « IF » avec des conditions supplémentaires. Dans l’exemple suivant, si X est inférieur à 3, on viendra vérifier en plus si le nombre est négatif ou non.
x = -1
If x > 3 Then
MsgBox x
ElseIf x < 0 Then
MsgBox "X est inférieur à 0"
Else
MsgBox "X compris entre 0 et 3 inclus"
End If
VB
Nous avons vu que l’instruction « ELSEIF » permet d’enchainer les blocs conditionnels. Si le nombre de ces conditions est conséquent, le code peut vite devenir illisible. Pour améliorer ce point, vous pourrez utiliser l’instruction « SELECT CASE ».
L’instruction SELECT CASE
L’instruction « SELECT CASE » permet d’écrire un enchainement de bloc conditionnel de manière plus lisible. Voyons plutôt un exemple :
X = 5
Select Case X
Case Is > 3
MsgBox "X est strictement supérieur à 3."
Case Is < 0
MsgBox "X est négatif."
Case Is = 2
MsgBox "X = 2."
Case Is = 5
MsgBox "Ce cas ne sera jamais atteint !"
Case Else
MsgBox "X est compris entre 0 et 3 inclus et n'est pas égal à 2."
End Select
VBIl est important d’avoir en tête que les conditions seront évaluer les unes après les autres dans l’ordre d’apparition. Une fois qu’une condition est respectée, le programme sortira du bloc. C’est le cas de la ligne « Is = 5 » qui ne sera jamais activée car la première expression filtrera la valeur. Il faudra donc faire attention aux conditions que vous mettez en place pour être sûr de rencontrer les cas décrits dans le bloc.
Enfin, la dernière ligne utilise le mot clé « ELSE » ce qui permet d’exécuter l’action de ce bloc si toutes les autres n’ont pas été respectées. Si vous ne mettez pas ce mot clé et que vous êtes dans un cas qui ne rentre pas dans ceux décrits, le programme passera alors son chemin sans rien faire. Cela étant dit, il est possible que c’est ce que vous cherchez à faire.
La boucle for en VBA
La boucle « FOR » permet de boucler un nombre déterminé de fois sur un compteur de nombre entier. Vous pourrez utiliser ce compteur pour accéder aux éléments d’un tableau par exemple. Pour l’utilisation des tableaux, un article est disponible ici. Voyons un exemple de boucle « FOR :
For i = 1 To 4
MsgBox i
Next i
VBCette boucle va itérer sur la variable i, en commençant par 1 puis en incrémentant de 1 en 1 jusqu’à la valeur de 4 inclus. les bornes 1 et 4 peuvent être des variables. De plus, l’incrément peut être modifié avec le mot clé « STEP ».
debut = 2
fin = 8
s = 2
For i = debut To fin Step s
MsgBox i
Next i
VBL’exemple précédent va boucler sur la variable i, en commençant par la valeur de 2 jusqu’à 8 par pas de 2. Le programme affichera donc les valeurs suivantes : 2 puis 4 puis 6 et enfin 8.
Le programme aura pu fonctionner de façon descendante. également, avec un pas négatif.
debut = 8
fin = 2
s = -2
For i = debut To fin Step s
MsgBox i
Next i
VBEnfin, pour fermer une boucle « FOR », il ne faut pas oublier le mot « NEXT ». VBA vous renverra une erreur si vous l’oubliez. De plus, vous pouvez rajouter le nom de la variable après le mot clé. Ce n’est pas obligatoire mais cela aide à la lisibilité.
La boucle Do While en VBA
La boucle « DO WHILE » va répéter une action tant que l’instruction donnée après le mot clé WHILE est vraie. Ou autrement dit, la boucle s’arrêtera dès que la condition sera fausse. Souvent, vous savez que vous devez réaliser plusieurs fois une opération mais pas quand celle-ci s’arrête. Ce type de boucle se prête parfaitement à ce genre de problème. Voici un exemple :
i = 1
Do While i < 3
MsgBox "La valeur de i est : " & i
i = i + 1
Loop
VBPour créer une boucle « DO WHILE », vous aurez à renseigner les mots clés « DO WHILE » au début du bloc et « LOOP » pour fermer le bloc. L’exemple précédent affichera la valeur de i tant que sa valeur est strictement inférieure à 3. Nous verrons donc les valeurs 1 et 2.
Ce premier exemple montre un cas où la condition est évaluée dès l’entrée de la boucle. Le bloc peut également être écrit de sorte que la condition soit évaluée en fin de boucle.
i = 1
Do
MsgBox "La valeur de i est : " & i
i = i + 1
Loop While i < 3
VBLe fonctionnement est ici identique. Cependant, en mettant la condition en sortie de boucle, cela implique que le bloc de la boucle sera exécuté au moins une fois. Par exemple, si la valeur de i vaut 4 à la base, la boucle sera tout de même réalisée une fois avant de sortir lors de l’évaluation de la condition. Je vous laisse le soin d’essayer de votre côté en modifiant le code précédent.
La boucle While en VBA
La boucle While est équivalente à une boucle « Do While ». Dans une boucle While, la condition est toujours évaluée en entrée de boucle. Avec une boucle « DO WHILE », nous venons de voir que la condition peut être évaluée en entrée ou en sortie de boucle. Voici un exemple de boucle « While ». Vous verrez que la structure est très simple.
i = 1
While i < 3
MsgBox "La valeur de i est : " & i
i = i + 1
Wend
VBL’instruction « WHILE » commence donc par le mot clé « WHILE » suivant par la condition à évaluer et se termine par le mot clé « WEND ».
La boucle Do Until en VBA
La boucle « DO UNTIL » fonctionne quasiment de la même manière que la boucle « DO WHILE ». La différence réside dans la façon d’écrire le problème. La boucle « DO WHILE » s’arrête quand l’évaluation de la condition renvoie Faux alors que la boucle « DO UNTIL » s’arrêtera quand l’évaluation de la condition renverra vraie.
l’instruction « UNTIL » est à considérer comme un objectif à atteindre. Cette façon d’écrire la boucle est plus déterministe que la précédente. Avec « WHILE », on ne sait pas vraiment quand on sortira de la boucle tandis qu’avec « UNTIL » la sortie est bien déterminée.
i = 1
Do Until i = 3
MsgBox "La valeur de i est : " & i
i = i + 1
Loop
VBi = 1
Do
MsgBox "La valeur de i est : " & i
i = i + 1
Loop Until i = 3
VBCes deux exemples donnent le même résultat mais je voulais vous montrer que la condition peut être également mise en début ou en sortie de boucle. Si vous souhaitez exécuter au moins une fois le code à l’intérieur du bloc, il faudra alors mettre votre condition à la fin.
Pour résumer
Nous avons vu dans cet article comment piloter votre programme via des blocs conditionnels et des boucles de contrôle afin de répéter des actions. Concernant les blocs conditionnels, pour plus de détails, voici le lien vers la documentation Microsoft.
La boucle FOR permet de répéter un bloc d’instruction un nombre de fois déterminé. Cette structure est très utilisée car les cas sont nombreux où vous savez le nombre de fois que vous allez devoir répéter une action. L’incrément utilisé dans la boucle peut être utilisé dans l’ordre croissant ou décroissant via le paramètre STEP.
La boucle DO WHILE permet de répéter un bloc d’instruction tant que la condition de sortie est vraie. On ne sait pas exactement quand la boucle se terminera mais un contrôle est effectué dans le bloc afin d’évaluer la condition de sortie à chaque répétition. La boucle DO WHILE peut également être écrite avec les mots clés WHILE et WEND.
La boucle DO UNTIL quant à elle répète les instructions jusqu’à ce que la condition de contrôle soit vraie. De base, la condition est fause et la boucle s’arrête quand cette condition est validée. Le fonctionnement est légèrement différent de la boucle DO WHILE.
Deux choses à ne pas oublier lors de la construction de vos boucles :
- Le mot clé de fermeture de votre boucle : End If, Loop, Next, Wend. Sans cela VBA vous renverra une erreur car il ne saura pas où le bloc d’instruction à l’intérieur de la boucle s’arrête.
- Surtout n’oubliez pas d’incrémenter votre variable de contrôle pour le boucle DO WHILE / UNTIL, sinon vous rentrerez dans une boucle infinie.
Plus plus de détails sur les boucles « DO WHILE / UNTIL », voici le lien vers la documentation officielle.
Merci d’avoir lu,
N’hésitez pas à laisser un commentaire, j’y répondrai avec plaisir.
Benjamin