Testé sur : Excel 365 v2509 · Excel 2021 · Excel 2019 · dernière vérification le 05/06/2026
En bref — Une boucle While répète du code tant qu'une condition reste vraie. Utilisez-la quand vous ignorez le nombre de lignes à l'avance. Copiez et adaptez :
Sub BoucleJusquauVide()
Dim i As Long
i = 2 ' commencer à la ligne 2
Do While Cells(i, 1).Value <> "" ' tourne tant que la colonne A a des données
Cells(i, 2).Value = Cells(i, 1).Value * 1.1
i = i + 1 ' le pas qui termine la boucle
Loop
End Sub
Les histoires d'Excel figé remontent toutes à une ligne manquante. Comprenez le pourquoi et vous n'en écrirez plus jamais.
L'idée centrale : une boucle est une promesse qu'elle se terminera — et c'est vous qui la tenez
Une boucle For i = 1 To 100 se termine d'elle-même. L'instruction For possède le compteur ; elle ne peut pas tourner indéfiniment, même si vous ne faites rien.
Une boucle While confie cette responsabilité à vous. Elle tourne exactement tant que sa condition est True, et elle ignore comment faire basculer cette condition. Chaque boucle While est donc une promesse — « ceci finira par devenir False » — et c'est vous qui la tenez. Une boucle infinie n'est pas un accident bizarre ; c'est ce qui arrive à l'instant où vous rompez la promesse.
Ce recadrage vous dit quand recourir à une boucle While : pour un nombre inconnu — « jusqu'à la fin des données », « jusqu'à ce que le fichier s'ouvre ». Si vous pouvez chiffrer les passages à l'avance, vous voulez For — et vous supprimez d'emblée le risque de rompre la promesse.
La règle qui tient la promesse : initialisation, test, pas
Toute boucle While correcte a les mêmes trois parties. Nommez-les et la boucle infinie devient impossible à écrire par accident :
i = 2 ' 1. INIT — fixer la variable que le test lit
Do While Cells(i, 1).Value <> "" ' 2. TEST — la promesse : ceci deviendra False
' ... le travail ...
i = i + 1 ' 3. PAS — déplacer la variable VERS la sortie
Loop
Une boucle infinie est toujours une partie 3 cassée : le pas manque, ou il s'éloigne de la sortie (décrémenter quand le test veut que la valeur grandisse). « Pourquoi ma boucle ne s'arrête pas ? » n'a qu'une réponse — trouvez la variable du TEST et vérifiez que le PAS la pousse vers False.
Choisir le mot-clé — même promesse, intention plus claire
| Forme | Vérifie la promesse | Pour quoi |
|---|---|---|
Do While ... Loop |
avant chaque passage | Le choix moderne. Le corps peut tourner 0 fois. |
Do Until ... Loop |
avant (s'arrête si vrai) | Se lit « jusqu'à terminé » — souvent plus clair. |
Do ... Loop While |
après chaque passage | Quand le corps doit tourner au moins une fois. |
While ... Wend |
avant chaque passage | Hérité — pas de Exit, à éviter en code neuf. |
Do While condition et Do Until condition sont la même boucle dite de deux façons — prenez ce qui se lit le plus naturellement. La seule vraie recommandation : préférez Do à While...Wend, car seul Do permet de sortir tôt.
' Test à la fin — le corps tourne toujours une fois (ex. demander, puis valider)
Do
n = InputBox("Saisissez un nombre positif")
Loop While n <= 0
Tenir la promesse en conditions réelles
Sortez dès que c'est fait — Exit Do bat une variable témoin, et c'est la raison de préférer Do :
Do While Cells(i, 1).Value <> ""
If Cells(i, 1).Value < 0 Then
MsgBox "Premier négatif à la ligne " & i
Exit Do
End If
i = i + 1
Loop
Quand la sortie dépend du monde extérieur, ajoutez une seconde promesse : un plafond. Fichiers, réseaux et autres applications échouent par intermittence, donc une boucle de reprise dont la seule sortie est « ça a marché » peut tourner sans fin :
Dim tentatives As Long
Do
tentatives = tentatives + 1
On Error Resume Next
Workbooks.Open "C:\rapports\quotidien.xlsx"
On Error GoTo 0
If Not Workbooks Is Nothing Then Exit Do
Loop While tentatives < 5 ' le plafond, promesse de secours
La garde tentatives < 5 transforme « auto-réparateur » en « ne peut pas figer ». Toute boucle qui attend un état externe devrait en avoir une.
Quand la promesse se rompt : la boucle infinie
Si rien à l'intérieur ne peut rendre la condition False, Excel affiche « ne répond pas » et vous avez rompu la promesse. Trois vérifications l'évitent à chaque fois :
- Le PAS change-t-il la variable que le TEST lit ? (
i = i + 1,n = n - 1, lire l'enregistrement suivant…) - Le PAS va-t-il vers la sortie ? (croître quand le test veut
< 10, pas décroître) - Une boucle à état externe a-t-elle un plafond d'itérations ?
Coincé dans une boucle folle à l'instant ? Appuyez sur Échap ou Ctrl + Pause pour interrompre la macro, puis corrigez le PAS avant de relancer.
Quand vous ne devriez pas écrire la boucle du tout
Une boucle While est le bon outil pour « traiter jusqu'à la fin des données » — mais c'est aussi la façon la plus courante par laquelle une macro qui marche devient discrètement un classeur figé. ExcelMaster Agent vous laisse énoncer l'objectif à la place — « nettoie chaque ligne de la colonne A jusqu'à la fin des données et écris le résultat en colonne B » — et génère un code borné qui tient la promesse pour vous. Essayer gratuitement →
Guides associés
- Boucle For VBA dans Excel — quand le nombre est connu d'avance
- VBA If Then Else — la liste de contrôle pour brancher
- VBA Select Case — aiguiller une valeur vers plusieurs issues
FAQ
Pourquoi ma boucle While VBA ne s'arrête-t-elle jamais ? Le PAS manque ou va dans le mauvais sens. Trouvez la variable de la condition et assurez-vous que quelque chose à l'intérieur la pousse vers la valeur de sortie. Ajoutez un plafond comme filet de sécurité.
Quelle est la différence entre While et Do While ?
Fonctionnellement presque identiques en tête de boucle. La différence pratique : Do While accepte Exit Do et c'est la syntaxe moderne recommandée ; While...Wend est hérité et ne peut pas sortir tôt.
Comment boucler jusqu'à ce qu'une cellule soit vide ?
Do While Cells(i, 1).Value <> "" (ou Do Until Cells(i, 1).Value = "") en incrémentant i à chaque passage. Arrêt à la première cellule vide.
Do While ou Do Until ?
Selon ce qui se lit le plus clairement. Do While continue tant que c'est vrai ; Do Until continue jusqu'à ce que ce soit vrai. Elles sont interchangeables.
