Excel · VBA · A3iformations

Les boucles en VBA : For Next, Step, Do While, Do Until, While Wend et For Each

Une boucle répète un bloc d’instructions : parcourir les lignes d’un tableau, additionner une colonne jusqu’à la première cellule vide, traiter chaque feuille du classeur. VBA propose trois familles. For … Next tourne un nombre de fois connu à l’avance, grâce à un compteur. Do … Loop (et l’ancien While … Wend) tourne tant qu’une condition est vraie, ou jusqu’à ce qu’elle le devienne. For Each … Next parcourt chaque élément d’une collection. Chaque simulateur s’exécute pas à pas (F8) : suivez la ligne jaune, les variables et la feuille. Voir aussi les conditions et les sélections.

For i = 1 To 10Compter
Do While / UntilTant que
For Each c In …Pour chaque
Exit For, ÉchapSortir
1

For … Next

For i = début To fin donne à la variable compteur i la valeur de début, exécute le bloc, puis Next i ajoute 1 et recommence tant que i ne dépasse pas la fin. Le nombre de tours est connu d’avance : fin − début + 1. Le compteur sert directement de numéro de ligne dans Cells(i, colonne). Déclarez-le en Long (ou Integer) et ne le modifiez jamais dans le bloc.

Simulateur : numéroter les lignes du tableau
Jusqu’à la dernière ligneFor i = 2 To Cells(Rows.Count, 1).End(xlUp).Row : la fin est calculée une seule fois, au démarrage de la boucle, quelle que soit la taille du tableau.
i après la boucleÀ la sortie, le compteur vaut fin + 1 (8 pour For i = 2 To 7). N’utilisez pas sa valeur après Next sans en tenir compte.
2

Step : changer le pas

Par défaut le compteur augmente de 1. Step fixe un autre pas : Step 2 une ligne sur deux, Step 0.5 des demi-valeurs, Step -1 un compte à rebours. Avec un pas négatif, le début doit être supérieur à la fin. Le parcours à l’envers est indispensable pour supprimer des lignes : chaque suppression fait remonter les lignes du dessous, qu’une boucle descendante sauterait.

Simulateur 1 : essayez différents pas
Simulateur 2 : supprimer les lignes vides
Step 0Un pas nul ne fait jamais avancer le compteur : la boucle ne s’arrête pas. Même risque si le code modifie le compteur dans le bloc.
Pas décimalAvec Step 0.1, les erreurs d’arrondi peuvent faire manquer la dernière valeur. Préférez un compteur entier et une division : x = i / 10.
3

Do While … Loop

Quand on ne sait pas combien de tours faire, on répète tant qu’une condition est vraie : Do While condition … Loop. La condition est testée avant chaque tour ; si elle est fausse dès le départ, le bloc ne s’exécute jamais. C’est à vous de faire évoluer la condition dans le bloc (ici i = i + 1), sinon la boucle ne s’arrête pas.

Simulateur : additionner les montants jusqu’à la première ligne vide
Les trous dans les données« Jusqu’à la première cellule vide » s’arrête au premier trou. Si le tableau peut en contenir, préférez une boucle For jusqu’à End(xlUp).Row.
Exit DoComme Exit For, Exit Do sort immédiatement d’une boucle Do, quelle que soit la condition.
4

Do … Loop : tester au début ou à la fin

La condition peut se placer après Do ou après Loop. Do … Loop While condition exécute le bloc au moins une fois, puis teste. C’est utile pour redemander une saisie tant qu’elle n’est pas valide : la question doit être posée avant d’être vérifiée. Sans aucune condition, Do … Loop tourne indéfiniment et ne se quitte que par Exit Do.

Simulateur : même calcul, test placé différemment
Saisie contrôléeDo / s = InputBox("Nombre de stagiaires ?") / Loop Until IsNumeric(s) : la boîte réapparaît tant que la saisie n’est pas un nombre.
Quatre combinaisonsDo While … Loop, Do Until … Loop, Do … Loop While, Do … Loop Until : While ou Until, au début ou à la fin.
5

Do Until : jusqu’à ce que

Do Until condition est l’inverse de Do While : la boucle tourne tant que la condition est fausse et s’arrête dès qu’elle devient vraie. Do Until Cells(i, 1).Value = "" équivaut à Do While Cells(i, 1).Value <> "" : choisissez la forme qui se lit le plus naturellement. Prévoyez toujours une condition de sortie de secours.

Simulateur : combien de formations pour atteindre un objectif ?
Objectif inaccessibleSi la condition ne peut jamais devenir vraie, la boucle est infinie. Combinez-la avec un garde-fou : fin des données, nombre de tours maximum.
While ou Until ?Choisissez celle qui évite une négation : Do Until trouve se lit mieux que Do While Not trouve.
6

While … Wend

While condition … Wend est l’ancienne syntaxe, conservée pour la compatibilité. Elle fonctionne comme Do While … Loop, avec deux limites : pas de test en fin de boucle et pas d’instruction pour en sortir (il n’existe pas de Exit While). Vous la rencontrerez dans du code ancien ; pour du code neuf, utilisez Do … Loop.

Simulateur : compte à rebours
7

For Each … Next

For Each élément In collection parcourt tous les éléments d’une collection d’objets, sans compteur : chaque cellule d’une plage (For Each c In Range("B2:B7")), chaque feuille (For Each ws In Worksheets), chaque classeur ouvert. La variable se déclare avec le type de l’objet (Range, Worksheet). C’est la boucle la plus simple quand on veut traiter tout le monde.

Simulateur : parcourir une plage ou les feuilles
Plage de taille variableFor Each c In Range("A1").CurrentRegion.Columns(2).Cells : la plage suit la taille réelle du tableau.
Pas de suppression dans For EachSupprimer des lignes pendant un For Each sur ces lignes fait sauter des éléments. Utilisez un For avec Step -1, ou accumulez les cellules dans une Union et supprimez à la fin.
8

Quitter une boucle et sortir des boucles infinies

Exit For (dans une boucle For ou For Each) et Exit Do (dans une boucle Do) quittent immédiatement la boucle : l’exécution reprend après Next ou Loop. C’est le cas typique d’une recherche : inutile de continuer une fois la valeur trouvée. Quand une boucle ne s’arrête plus (condition jamais atteinte, compteur oublié), Excel ne répond plus : appuyez sur Échap ou Ctrl + Pause pour interrompre la macro.

Simulateur 1 : chercher une formation avec ou sans Exit For
Simulateur 2 : une boucle infinie et comment l’interrompre

      
Microsoft Excel
Tours de boucle : 0total : 0

Garder la mainDans une longue boucle, DoEvents laisse Excel traiter les clics et l’affichage ; Application.StatusBar = "Ligne " & i montre la progression.
Enregistrer avant de testerUne boucle infinie peut bloquer Excel au point de devoir le fermer. Enregistrez le classeur avant de lancer une macro qui contient une nouvelle boucle.
Exercice : parcourir, totaliser, nettoyer et chercher

Classeur d’exercice (Énoncé et Corrigé)

  1. Enregistrez le classeur en .xlsm et collez le code de la feuille « Code VBA » dans un module standard.
  2. Exécutez Numeroter (For … Next) puis Totaliser (Do While) sur la feuille Ventes.
  3. Exécutez Surligner (For Each) et Chercher (Exit For).
  4. Exécutez SupprimerVides sur la feuille Import (Step -1), puis ListerFeuilles.
  5. Répondez aux questions de la feuille Contrôle.
A3iformations · Organisme certifié Qualiopi · Centre de passage TOSA Interface Excel Microsoft 365 en français