La Boucle For Next en VBA : Guide Complet pour Excel

La boucle For est l’une des boucles les plus utilisées en VBA. Elle vous permet de répéter une série d’instructions un nombre précis de fois. L’intérêt de cette boucle réside dans sa simplicité d’utilisation et sa capacité à parcourir efficacement des séries de données ou d’instructions.

Maîtrisez les boucles ‘For Next’ et bien plus encore grâce à notre formation VBA en ligne, conçue pour vous rendre autonome en programmation Excel.

Structure de la boucle For Next

Syntaxe

Voici la syntaxe générale d’une boucle For Next en VBA :


Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
For compteur = debut To fin [Step valeur_du_pas]
‘ Code à exécuter
Next compteur
For compteur = debut To fin [Step valeur_du_pas] ‘ Code à exécuter
Next compteur
For compteur = debut To fin [Step valeur_du_pas]
    ' Code à exécuter
Next compteur
  • compteur : C’est une variable qui prend des valeurs successives de debut à fin. C’est souvent un entier, mais il peut aussi être de tout autre type numérique.
  • debut : La valeur initiale du compteurr.
  • fin : La valeur finale que le compteur doit atteindre.
  • valeur_du_pas : Indique l’incrément ou le décrément du compteur à chaque itération de la boucle. Par défaut, il est de 1.

Exemple de boucle For basique :


Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
For i = 1 To 5
Debug.Print « i vaut : «  & i
Next i
For i = 1 To 5
Debug.Print « i vaut :  » & i
Next i
For i = 1 To 5
    Debug.Print "i vaut : " & i
Next i

Dans cet exemple, la boucle s’exécute cinq fois, affichant la valeur de i à chaque itération.

Exemples pratiques

Exemple de base : Afficher les nombres de 1 à 10

Cet exemple montre une boucle simple qui affiche les nombres de 1 à 10 dans la fenêtre de débogage (ou console) d’Excel.


Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
For i = 1 To 10
Debug.Print i
Next i
For i = 1 To 10
Debug.Print i
Next i
For i = 1 To 10
    Debug.Print i
Next i

Exemple avec Step : compter par pas de 2

Vous pouvez modifier l’incrément de la boucle en utilisant l’option Step. Dans cet exemple, la boucle compte de 1 à 10 par pas de 2.


Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
For i = 1 To 10 Step 2
Debug.Print i
Next i
For i = 1 To 10 Step 2
Debug.Print i
Next i
For i = 1 To 10 Step 2
    Debug.Print i
Next i

Exemple inversé : compter à rebours

Il est également possible de faire une boucle qui décrémente le compteur, en utilisant un Step négatif.


Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
For i = 10 To 1 Step -1
Debug.Print i
Next i
For i = 10 To 1 Step -1
Debug.Print i
Next i
For i = 10 To 1 Step -1
    Debug.Print i
Next i

Résultat : La console affichera 10, 9, 8, …, 1.

Exemple avec une plage de cellules Excel : remplir une colonne

Un des cas d’utilisation les plus courants en VBA est de parcourir des cellules dans une feuille Excel. Cet exemple montre comment remplir les cellules de la colonne A avec des valeurs.


Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
For i = 1 To 10
Cells(i, 1).Value = « Ligne «  & i
Next i
For i = 1 To 10
Cells(i, 1).Value = « Ligne  » & i
Next i
For i = 1 To 10
    Cells(i, 1).Value = "Ligne " & i
Next i

Ici, chaque cellule de la colonne A, de la ligne 1 à la ligne 10, sera remplie avec « Ligne 1 », « Ligne 2 », etc.

Exemple avancé : parcourir un tableau (Array)

Les tableaux (arrays) sont souvent utilisés pour stocker des données en mémoire. Cet exemple montre comment parcourir un tableau de chaînes de caractères et afficher chaque élément.


Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Dim arr(1 To 5) As String
arr(1) = « A »
arr(2) = « B »
arr(3) = « C »
arr(4) = « D »
arr(5) = « E »
For i = LBound(arr) To UBound(arr)
Debug.Print arr(i)
Next i
Dim arr(1 To 5) As String
arr(1) = « A »
arr(2) = « B »
arr(3) = « C »
arr(4) = « D »
arr(5) = « E »For i = LBound(arr) To UBound(arr)
Debug.Print arr(i)
Next i
Dim arr(1 To 5) As String
arr(1) = "A"
arr(2) = "B"
arr(3) = "C"
arr(4) = "D"
arr(5) = "E"

For i = LBound(arr) To UBound(arr)
    Debug.Print arr(i)
Next i

LBound et UBound sont des fonctions qui retournent respectivement les limites inférieure et supérieure du tableau.

Plusieurs boucles For Next imbriquées

Supposons que nous souhaitons remplir une matrice 5×5 dans une feuille Excel, où chaque cellule contient la multiplication de son numéro de ligne par son numéro de colonne.

Sub RemplirMatrice()
    Dim i As Integer
    Dim j As Integer

    ' Première boucle pour parcourir les lignes
    For i = 1 To 5
        ' Deuxième boucle pour parcourir les colonnes
        For j = 1 To 5
            ' Remplir la cellule avec le produit de i et j
            Cells(i, j).Value = i * j
        Next j
    Next i
End Sub

Explication :

  1. Boucle Extérieure (For i = 1 To 5) :
    • Cette boucle contrôle les lignes de la matrice. La variable i représente le numéro de ligne, allant de 1 à 5.
  2. Boucle Intérieure (For j = 1 To 5) :
    • Cette boucle contrôle les colonnes de la matrice. La variable j représente le numéro de colonne, allant de 1 à 5.
    • La boucle intérieure est exécutée entièrement pour chaque itération de la boucle extérieure.
  3. Action (Cells(i, j).Value = i * j) :
    • Chaque cellule de la matrice est remplie avec le produit du numéro de ligne (i) et du numéro de colonne (j).

Cas pratique : Automatiser une tâche Excel

Imaginons un scénario où vous devez copier les données d’une feuille Excel à une autre, mais seulement si une certaine condition est remplie. Par exemple, copier toutes les lignes d’une feuille où la valeur dans la colonne B est supérieure à 100.

Ce code vérifie chaque cellule de la colonne B, et si la condition est remplie, il copie la ligne entière dans une autre feuille (Feuil2).


Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Dim derniereligne As Long
derniereligne = Cells(Rows.Count, 2).End(xlUp).Row
For i = 1 To derniereligne
If Cells(i, 2).Value > 100 Then
‘ Copier la ligne dans une autre feuille
Sheets(« Feuil2 »).Rows(i).Value = Rows(i).Value
End If
Next i
Dim derniereligne As Long
derniereligne = Cells(Rows.Count, 2).End(xlUp).RowFor i = 1 To derniereligne
If Cells(i, 2).Value > 100 Then
‘ Copier la ligne dans une autre feuille
Sheets(« Feuil2 »).Rows(i).Value = Rows(i).Value
End If
Next i
Dim derniereligne As Long
derniereligne = Cells(Rows.Count, 2).End(xlUp).Row

For i = 1 To derniereligne
    If Cells(i, 2).Value > 100 Then
        ' Copier la ligne dans une autre feuille
        Sheets("Feuil2").Rows(i).Value = Rows(i).Value
    End If
Next i

Bonnes pratiques

  • Indentation : Indenter correctement le code à l’intérieur des boucles permet une meilleure lisibilité et facilite la maintenance du code. Par exemple :

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
For i = 1 To 10
‘ Indentation pour améliorer la lisibilité
Cells(i, 1).Value = i
Next i
For i = 1 To 10
‘ Indentation pour améliorer la lisibilité
Cells(i, 1).Value = i
Next i
For i = 1 To 10
    ' Indentation pour améliorer la lisibilité
    Cells(i, 1).Value = i
Next i
  • Noms de variables significatifs : Utiliser des noms de variables clairs et significatifs pour le compteur de la boucle. Par exemple, si la boucle parcourt des lignes, utilisez row au lieu de i.
  • Limiter la longueur des boucles : Une boucle ne devrait idéalement pas contenir trop de lignes de code. Si une boucle devient trop longue, il peut être utile de diviser son contenu en sous-routines pour clarifier l’intention.
  • Éviter les boucles infinies : S’assurer que les conditions de la boucle ne créent pas une boucle infinie. Par exemple, en vérifiant que le Step n’est pas nul et que les conditions de début et de fin sont correctement définies.
  • Répéter la variable après Next : la fin d’une boucle For peut très bien se terminer uniquement par Next, il est d’usage de préciser après Next la variable concernée => Next i. Cela simplifie la lecture du code lorsque plusieurs boucles Next se croisent.

Erreurs courantes et débogage

Même si la boucle For est simple à utiliser, certaines erreurs peuvent survenir :

  • Oublier Next : Si vous omettez Next à la fin de la boucle, le code ne fonctionnera pas correctement. VBA pourrait générer une erreur de syntaxe ou un comportement inattendu.
  • Mauvais incrément (Step) : Si le Step est 0, la boucle ne progressera jamais, causant une boucle infinie.
  • Conditions de boucle invalides : Par exemple, essayer de parcourir une plage où la valeur de départ est supérieure à la valeur de fin sans utiliser un Step négatif.

Déboguer avec VBA :

  • Utiliser des points d’arrêt pour suspendre l’exécution du code à des endroits stratégiques et examiner les variables en cours d’exécution
  • Le mode pas-à-pas permet de parcourir chaque ligne de code pour observer le comportement de la boucle et identifier où une erreur se produit.

Si les boucles ‘For Next’ vous posent des difficultés, un freelance Excel VBA peut vous aider à développer des macros efficaces et bien structurées.

Alternatives à la boucle For Next en VBA :

Il est possible d’utiliser d’autres solutions pour réaliser des boucles dans un module VBA :