🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

Boucle While VBA dans Excel — boucler sans figer Excel

|

Boucle While VBA dans Excel — boucler sans figer Excel

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 faitExit 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 :

  1. Le PAS change-t-il la variable que le TEST lit ? (i = i + 1, n = n - 1, lire l'enregistrement suivant…)
  2. Le PAS va-t-il vers la sortie ? (croître quand le test veut < 10, pas décroître)
  3. 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

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.