Comment utiliser la boucle For en VBA et en sortir avec Exit For
Tu connais probablement ce moment pénible. La clôture approche, ton reporting Excel doit partir aujourd’hui, et tu passes encore ton temps à recopier la même formule, décaler des dates, vérifier des cellules une par une et corriger des imports sales venus d’un SIRH ou d’un ERP.
Le vrai problème, ce n’est pas Excel. C’est le travail répétitif que tu continues à faire à la main alors qu’une macro pourrait l’exécuter à ta place. Si tu maîtrises la vba boucle for, tu commences à automatiser pour de vrai. Pas dans six mois. Aujourd’hui.
Pour garder sous la main des boucles prêtes à l’emploi, comme celle qui supprime les lignes vides en remontant le tableau, télécharge notre guide des codes VBA Excel au format PDF. Chaque code y est classé par usage et prêt à coller dans un module.
Codes VBA Excel prêts à l’emploi (PDF)
Les 47 codes du guide, classés par usage, à coller dans ton Excel. Gratuit.
Marre des tâches répétitives sur Excel ? L'automatisation est la clé
Fin de mois. Un contrôleur de gestion récupère un export de plusieurs centaines de lignes, doit recalculer des échéances, harmoniser des libellés et préparer un tableau de bord propre avant midi. Une RH reçoit un fichier candidats avec des espaces en trop, des numéros mélangés dans les commentaires et des doublons à repérer. Un consultant doit consolider des onglets clients avant envoi.
Le point commun est simple. Ces tâches sont répétitives, pénibles et faciles à rater quand la fatigue monte.

La boucle For en VBA sert précisément à ça. Tu lui donnes une action, tu définis combien de fois elle doit se répéter, et Excel exécute sans se plaindre. La version For Next, introduite avec Excel 5.0 en 1993, reste une base de l’automatisation. Les boucles For évitent de recopier la même action ligne après ligne sur une extraction de plusieurs centaines de lignes, là où un traitement manuel prend un temps qui grimpe vite.
Règle terrain: si tu répètes la même action sur plusieurs lignes, tu ne dois plus la faire manuellement.
Ce que la boucle For change dans ton quotidien
La vba boucle for n’est pas un concept académique. C’est ce qui te permet de :
- Parcourir une liste de factures pour ajouter une échéance à J+30
- Nettoyer des données RH ligne après ligne sans cliquer partout
- Mettre à jour un catalogue tarifaire sans reprendre chaque cellule
- Préparer une synthèse mensuelle sans oublier un onglet
Un exemple concret parle mieux que dix définitions. Si tu dois traiter chaque ligne d’un export, la boucle peut dire à Excel : prends la ligne 2, puis 3, puis 4, jusqu’à la dernière, et applique la même logique à chaque passage.
Pourquoi tu dois t’y mettre maintenant
Beaucoup de pros repoussent VBA parce qu’ils pensent que c’est “du code”. Mauvais réflexe. Une boucle For bien écrite est souvent plus simple qu’une formule imbriquée indigeste.
Si tu débutes, commence par un cadre clair avec notre leçon sur les macros VBA. Tu gagneras surtout en méthode. Et la méthode, c’est ce qui évite les macros bricolées qui cassent au premier changement de fichier.
La Boucle Classique For Next, ta Première Arme d'Automatisation
La boucle For...Next est la plus directe. Tu sais combien de fois tu veux répéter une action ? Tu prends For...Next. Point.

Sa logique tient en une ligne :
For i = 2 To 100
' action à répéter
Next i
Ici, i est ton compteur. Il prend la valeur 2, puis 3, puis 4, jusqu’à 100. C’est le bon choix quand tu parcours des lignes numérotées, des colonnes connues ou une plage définie.
La syntaxe à comprendre une bonne fois
Voici le squelette :
For compteur = début To fin
instructions
Next compteur
Et une version un peu plus réaliste :
For i = 2 To 10
Cells(i, 3).Value = Cells(i, 2).Value + 30
Next i
La logique est simple :
i = 2signifie qu’on commence à la ligne 2To 10signifie qu’on s’arrête à la ligne 10Cells(i, 3)cible la cellule de la colonne C sur la ligne en coursCells(i, 2)lit la colonne B sur cette même ligne
Si tu travailles souvent sur des reportings, retiens ça : une boucle For Next bien placée fait le sale boulot sans fatigue. C’est aussi pour ça qu’elle reste centrale dans Excel.
Tutoriel simple avec des échéances de factures
Supposons ce fichier :
- Colonne A = Numéro de facture
- Colonne B = Date de facture
- Colonne C = Date d’échéance à calculer
Tu veux mettre toutes les échéances à J+30.
Étape 1
Ouvre l’éditeur VBA avec Alt + F11, puis insère un module.
Étape 2
Colle cette macro :
Sub CalculerEcheances()
Dim i As Long
Dim derniereLigne As Long
derniereLigne = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To derniereLigne
Cells(i, 3).Value = Cells(i, 2).Value + 30
Next i
End Sub
Étape 3
Lance la macro. Chaque ligne reçoit sa date d’échéance en colonne C.
Étape 4
Ajoute un format si besoin :
Columns(3).NumberFormat = "dd/mm/yyyy"
Si ta macro touche plusieurs centaines de lignes, commence toujours par identifier la dernière ligne automatiquement. Écrire
For i = 2 To 500en dur, c’est une mauvaise habitude.
Un bon complément pour démarrer proprement est d’utiliser un outil pas à pas pour créer une macro VBA, puis de remplacer l’enregistreur automatique par du vrai code structuré.
Les erreurs les plus fréquentes
Commencer à la mauvaise ligne
Si ta ligne 1 contient les en-têtes, démarre à 2.Confondre ligne et colonne
Cells(i, 3)veut dire lignei, colonne 3. Pas l’inverse.Écrire en dur un nombre de lignes
UtilisederniereLigne. Sinon ta macro casse dès que le fichier grossit.
Maîtriser la Boucle For Each pour Parcourir des Collections
For Each est souvent plus élégante que For...Next. Quand tu ne veux pas compter, mais parcourir chaque élément d’un groupe, c’est elle qu’il faut choisir.

Pense à une collection comme à une boîte d’objets Excel. Ça peut être un ensemble de cellules, les feuilles du classeur, des graphiques, des tableaux. Avec For Each, tu dis juste à VBA : fais l’action pour chaque élément. Ici, la boucle réaffiche toutes les feuilles du classeur.
For Each ws In ThisWorkbook.Worksheets
ws.Visible = xlSheetVisible
Next ws
Quand For Each est meilleur
Sur des collections d’objets, For Each est souvent plus lisible. Et ce n’est pas juste une impression : en évitant de gérer un compteur et un index à la main, elle réduit le risque d’erreur de ciblage sur les feuilles, cellules ou objets que tu parcours.
Comparaison rapide entre les deux boucles
| Critère | For…Next | For Each…Next |
|---|---|---|
| Logique | Répète un nombre précis de fois | Parcourt chaque élément d’une collection |
| Idéal pour | Lignes, colonnes, index | Feuilles, cellules, objets |
| Lisibilité | Bonne si tu as un compteur clair | Excellente sur des collections |
| Contrôle de l’ordre | Très précis | Moins orienté index |
| Cas pro typique | Traiter un export ligne par ligne | Boucler sur tous les onglets d’un classeur |
Si tu manipules souvent les cellules en VBA, garde aussi sous la main ce guide sur l’objet Cells en VBA et sa logique de repérage. Ça évite beaucoup d’erreurs de ciblage.
Exemple concret avec les feuilles d’un classeur
Tu veux envoyer un fichier à un manager. Tu gardes visible la feuille Synthese et tu masques tout le reste.
Sub MasquerOnglets()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "Synthese" Then
ws.Visible = xlSheetHidden
End If
Next ws
End Sub
Ce code est propre. Il lit le nom de chaque feuille et masque celles qui ne correspondent pas à la feuille de sortie.
Réflexe utile: quand le nombre d’éléments peut changer, choisis
For Each. Tu écris moins de code et tu crées moins d’erreurs.
Où For Each te fait gagner du temps
Dans la vraie vie, elle sert surtout à :
- Parcourir des cellules sélectionnées et corriger un format
- Passer sur chaque feuille pour protéger, masquer, renommer
- Balayer des objets Excel sans gérer d’index à la main
Si tu essaies de forcer For...Next partout, tu compliques ton code. Tu peux le faire, bien sûr. Mais ce n’est pas malin.
Personnaliser tes Boucles avec Step et Exit For
Une boucle de base, c’est utile. Une boucle bien pilotée, c’est là que tu commences à coder comme quelqu’un d’efficace. Les deux leviers que tu dois maîtriser sont Step et Exit For.

Utiliser Step pour contrôler le rythme
Par défaut, une boucle avance de 1 en 1.
For i = 1 To 10
Avec Step, tu changes ce pas :
For i = 1 To 10 Step 2
Ici, la boucle passe sur 1, 3, 5, 7, 9.
Cas pro classique. Tu analyses des données financières mensuelles, mais tu ne veux traiter que les périodes annuelles. Avec Step 12, tu sautes directement d’une année à l’autre, sans parcourir chaque mois pour le filtrer ensuite. Ta boucle exécute moins d’itérations, donc elle va plus vite.
Pourquoi supprimer des lignes à l’endroit est une erreur
C’est l’erreur classique du débutant. Tu parcours de haut en bas, tu supprimes une ligne, et la ligne suivante remonte. Résultat, ta boucle saute un élément.
La bonne méthode consiste à boucler à l’envers :
Sub SupprimerLignesVides()
Dim i As Long
Dim derniereLigne As Long
derniereLigne = Cells(Rows.Count, 1).End(xlUp).Row
For i = derniereLigne To 2 Step -1
If Cells(i, 1).Value = "" Then
Rows(i).Delete
End If
Next i
End Sub
Tu pars du bas, donc chaque suppression n’impacte pas les lignes qu’il te reste à vérifier. Si tu préfères une version prête à copier, notre macro pour supprimer les lignes vides d’un tableau fait ce travail.
Ne supprime jamais des lignes de haut en bas dans une boucle. Boucle en sens inverse, systématiquement.
Sortir plus tôt avec Exit For
Autre bonne habitude. Si tu cherches une valeur unique, inutile de parcourir tout le fichier après l’avoir trouvée.
Sub TrouverEmploye()
Dim i As Long
For i = 2 To 1000
If Cells(i, 1).Value = "Martin" Then
MsgBox "Trouvé ligne " & i
Exit For
End If
Next i
End Sub
Exit For coupe la boucle dès que ta condition est remplie. Ton code devient plus rapide et plus logique.
Astuce bonus à garder à vie
Si ton code modifie ce qu’il est en train de parcourir, arrête-toi et pose-toi une question simple : est-ce que l’ordre de parcours reste sûr ?
Pour une suppression, la réponse est souvent non. Donc Step -1. Ce réflexe t’évitera une quantité absurde de bugs.
Patterns Concrets et Astuces de Performance Avancées
Les exemples d’école, c’est bien pour comprendre. Au bureau, tu veux des modèles réutilisables. Voilà ceux qui reviennent sans arrêt.
Pattern 1 avec nettoyage de données RH
Tu reçois un export avec des espaces inutiles, des noms en majuscules incohérentes et des champs mal propres. La boucle For sert à normaliser.
Sub NettoyerDonneesRH()
Dim i As Long
Dim derniereLigne As Long
derniereLigne = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To derniereLigne
Cells(i, 1).Value = Trim(Cells(i, 1).Value)
Cells(i, 2).Value = UCase(Cells(i, 2).Value)
Next i
End Sub
Tu peux enrichir ce modèle pour nettoyer des identifiants, corriger des codes service ou préparer des données avant TCD. Pour les espaces insécables et les caractères invisibles que Trim laisse passer, passe par la macro qui nettoie les espaces et les caractères invisibles.
Pattern 2 avec mise à jour d’un catalogue tarifaire
Tu as une colonne de prix et un taux à appliquer. Même logique.
Sub ReviserTarifs()
Dim i As Long
Dim derniereLigne As Long
Dim taux As Double
taux = Range("F1").Value
derniereLigne = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To derniereLigne
Cells(i, 3).Value = Cells(i, 2).Value * taux
Next i
End Sub
Ça paraît basique. Pourtant, c’est exactement le genre de macro qui évite les erreurs de recopie sur des fichiers sensibles.
Pattern 3 avec consolidation d’onglets
Tu peux aussi parcourir les feuilles d’un classeur et rapatrier des valeurs clés dans une synthèse. Là, For Each devient le plus naturel.
Pour manipuler correctement les zones de travail, garde en référence ce guide sur l’objet Range en VBA et ses usages concrets.
Le vrai saut de performance avec les tableaux en mémoire
Si tu boucles cellule par cellule sur une grosse plage, Excel devient lent. La bonne pratique consiste à charger la plage dans un tableau VBA, traiter en mémoire, puis réécrire le résultat.
C’est particulièrement fort avec des données issues de Power Query. Une boucle For sur un tableau en mémoire évite les allers-retours constants avec la feuille de calcul, ce qui la rend nettement plus rapide qu’une boucle qui lit et écrit cellule par cellule sur une grosse plage.
Voici le modèle :
Sub TraiterArray()
Dim arr
Dim i As Long
Dim derniereLigne As Long
derniereLigne = Cells(Rows.Count, 1).End(xlUp).Row
arr = Range("A2:C" & derniereLigne).Value
For i = LBound(arr, 1) To UBound(arr, 1)
arr(i, 1) = Trim(arr(i, 1))
arr(i, 2) = UCase(arr(i, 2))
Next i
Range("A2:C" & derniereLigne).Value = arr
End Sub
Ce pattern est excellent quand Power Query t’a déjà livré une table propre mais volumineuse, et que tu veux un dernier traitement VBA avant envoi.
Si ta macro ralentit fortement, le problème n’est pas toujours la boucle. C’est souvent le fait d’écrire dans la feuille à chaque itération au lieu de travailler en mémoire.
Pour l’écrire toi-même sur un fichier réel, l’exercice Parcourir une plage avec une boucle For répète une action sur chaque ligne d’une plage.
En Résumé, Erreurs Courantes et Questions Fréquentes
Tu n’as pas besoin de connaître tout VBA pour devenir efficace. Tu as surtout besoin des bons réflexes.
En résumé
- Utilise
For...Nextquand tu connais le nombre d’itérations - Choisis
For Each...Nextquand tu parcours une collection d’objets - Ajoute
Steppour sauter des éléments ou boucler à l’envers - Utilise
Exit Fordès que tu peux arrêter la recherche - Travaille sur des tableaux en mémoire quand le volume de données devient lourd
Les erreurs courantes à éviter
| Erreur | Ce qu’il faut faire |
|---|---|
| Boucler sur des lignes fixes écrites en dur | Détecter la dernière ligne automatiquement |
| Supprimer des lignes de haut en bas | Boucler du bas vers le haut avec Step -1 |
| Modifier la feuille à chaque tour sur gros volume | Charger les données dans un array |
Choisir For...Next pour une collection d’onglets |
Utiliser For Each |
| Oublier une condition d’arrêt logique | Ajouter Exit For si nécessaire |
FAQ sur les boucles For
| Question | Réponse Courte |
|---|---|
| Peut-on mettre une boucle dans une autre ? | Oui. C’est fréquent pour parcourir lignes et colonnes. Il faut juste rester lisible. |
Quelle différence avec Do While ? |
For est parfait quand le cadre est clair. Do While sert mieux quand on répète tant qu’une condition reste vraie. |
| Comment gérer une erreur au milieu d’une boucle ? | Commence simple. Teste sur une copie du fichier, ajoute des contrôles avant d’écrire, puis mets une gestion d’erreur adaptée quand la logique est stable. |
Pour progresser sérieusement, appuie-toi sur notre leçon Macros VBA. Et si tu veux un support papier utile quand tu bloques sur une formule, une macro ou une logique de modèle, garde J'excelle en Excel à portée de main.
La vba boucle for n’a rien de magique. C’est juste un levier. Mais bien utilisé, c’est un levier énorme. Tu récupères du temps, tu fiabilises tes fichiers, et tu passes de “je subis Excel” à “je pilote Excel”.