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

Boucle While VBA dans Excel — While, Do While et Do Until (5 exemples)

|

Boucle While VBA dans Excel — While, Do While et Do Until (5 exemples)

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                           ' DOIT avancer, sinon la boucle ne finit jamais
    Loop
End Sub

La ligne i = i + 1 est toute l'astuce. Oubliez-la et Excel se fige. Ce guide montre chaque variante de While et comment ne plus jamais bloquer Excel.

Pourquoi une boucle While plutôt que For ?

Une boucle For i = 1 To 100 sert pour un nombre connu. Une boucle While sert pour un nombre inconnu — « continuer jusqu'à la fin des données », « réessayer jusqu'à ce que le fichier s'ouvre ». Si vous ne pouvez pas annoncer le nombre d'itérations à l'avance, c'est While.

Les trois mots-clés (et lequel choisir)

Forme Teste la condition Remarque
Do While ... Loop Avant chaque passage Le corps peut tourner 0 fois. Le choix moderne.
Do ... Loop While Après chaque passage Le corps tourne au moins une fois.
Do Until ... Loop Avant (s'arrête si vrai) Se lit naturellement : « jusqu'à terminé ».
While ... Wend Avant chaque passage Hérité. Fonctionne, mais Microsoft recommande Do.

Recommandation : utilisez Do While / Do Until. L'ancien While...Wend ne survit que par compatibilité — il ne gère pas Exit et est considéré comme un style dépassé.

Exemple 1 — Do While contre Do Until (même résultat, intention plus claire)

' Do While — « tant qu'il reste des données »
Do While Cells(i, 1).Value <> ""
    ' ... traiter la ligne i
    i = i + 1
Loop

' Do Until — « jusqu'à une cellule vide » (souvent plus lisible)
Do Until Cells(i, 1).Value = ""
    ' ... traiter la ligne i
    i = i + 1
Loop

Les deux s'arrêtent à la première cellule vide de la colonne A. Choisissez ce qui se lit le plus naturellement pour vous — la logique est identique.

Exemple 2 — Tester la condition à la fin

Parfois le corps doit s'exécuter au moins une fois — par exemple demander une saisie puis la valider :

Sub DemanderPositif()
    Dim n As Double
    Do
        n = InputBox("Saisissez un nombre positif")
    Loop While n <= 0          ' redemande tant que ce n'est pas conforme
End Sub

Comme le test est sur la ligne Loop While, l'InputBox s'affiche toujours une fois avant que la condition ne soit vérifiée.

Exemple 3 — While...Wend (hérité, pour le code que vous récupérez)

Sub SommeAncienne()
    Dim total As Double, i As Long
    i = 2
    While Cells(i, 1).Value <> ""
        total = total + Cells(i, 1).Value
        i = i + 1
    Wend
    MsgBox "Total : " & total
End Sub

Cela fonctionne sur toutes les versions d'Excel. Mais pour du code neuf, convertissez-le en Do While ... Loop afin de pouvoir utiliser Exit Do.

Exemple 4 — Sortir de la boucle plus tôt

Sub TrouverPremierNegatif()
    Dim i As Long
    i = 2
    Do While Cells(i, 1).Value <> ""
        If Cells(i, 1).Value < 0 Then
            MsgBox "Premier négatif à la ligne " & i
            Exit Do                 ' on sort immédiatement
        End If
        i = i + 1
    Loop
End Sub

Exit Do saute hors de la boucle dès que vous avez trouvé — sans variable témoin. (While...Wend en est incapable, raison principale de préférer Do.)

Exemple 5 — Réessayer avec un compteur de sécurité

L'automatisation réelle dialogue avec des fichiers, des réseaux et d'autres applications qui échouent par intermittence. Plafonnez toujours les tentatives pour qu'un échec permanent ne boucle pas à l'infini :

Sub OuvrirAvecReprise()
    Dim tentatives As Long
    tentatives = 0
    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       ' jamais plus de 5 essais
End Sub

La garde tentatives < 5 fait la différence entre « auto-réparateur » et « bloqué pour toujours ».

Le piège n° 1 : la boucle infinie

Une boucle While tourne jusqu'à ce que sa condition devienne fausse. Si rien à l'intérieur ne peut le provoquer, Excel se fige et vous voyez « Excel ne répond pas ».

Trois règles qui l'évitent à chaque fois :

  1. Modifiez toujours la variable de la condition dans la boucle (i = i + 1, n = n - 1…).
  2. Assurez-vous que le changement va vers la sortie — incrémenter quand la condition teste < 10, pas décrémenter.
  3. Ajoutez un compteur maximal pour toute boucle dont la fin dépend d'un état externe (fichiers, saisie, appels d'API).

Coincé dans une boucle folle en ce moment ? Appuyez sur Échap ou Ctrl + Pause pour interrompre la macro, puis corrigez la condition.

Arrêtez de surveiller les compteurs de boucle — décrivez l'objectif

Les boucles While sont l'endroit où les macros « ça marchait hier » se transforment discrètement en feuilles figées : une incrémentation manquante et tout le classeur se bloque. ExcelMaster Agent vous laisse énoncer le résultat en français courant — « 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 sûr et borné qui ne peut pas figer Excel. Essayer gratuitement →

Guides associés

FAQ

Quelle est la différence entre While et Do While en VBA ? Fonctionnellement, elles sont presque identiques quand le test est en haut. 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 prématurément.

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.

Pourquoi ma boucle While VBA ne s'arrête-t-elle jamais ? La variable de la condition ne change pas dans la boucle, ou s'éloigne de la valeur de sortie. Corrigez la ligne d'incrémentation et ajoutez un compteur maximal en filet de sécurité.

Do While ou Do Until ? Selon ce qui se lit le plus clairement. Do While condition continue tant que c'est vrai ; Do Until condition continue jusqu'à ce que ce soit vrai. Elles sont interchangeables.