Boucle For VBA

Excel VBA : les Boucles For… Next

Les boucles For...Next constituent un pilier de la programmation en VBA, offrant la capacité de répéter un bloc de code un nombre défini de fois.

5
(15)

Les boucles For...Next constituent un pilier de la programmation en VBA, offrant la capacité de répéter un bloc de code un nombre défini de fois.

Cette structure de contrôle est particulièrement adaptée pour parcourir des collections d'objets ou des tableaux, mais elle est également incontournable pour exécuter une suite d'opérations de manière itérative, en fonction d'une condition prédéfinie.

Typiquement, le nombre d'itérations dans une boucle For est déterminé par la propriété Count d'une collection, ce qui permet une grande flexibilité et précision dans la gestion des données et des processus automatisés.

REMARQUE : Pour les débutants en VBA, la boucle For Next à décrémentation est souvent une fonctionnalité peu connue, mais incroyablement utile. En particulier, elle brille lorsque vous avez besoin de supprimer des lignes spécifiques d'un tableau.

La syntaxe de base d'une boucle For...Next en VBA est structurée de la manière suivante :

Dans cette structure :

  • Compteur est la variable de contrôle de la boucle, qui est typiquement un nombre entier. Cette variable est aussi appelée l'incrément de boucle, et le nom i est fréquemment utilisé pour sa simplicité et sa concision.
  • start correspond à la valeur initiale assignée à Compteur.
  • end définit la valeur finale que Compteur atteindra. La boucle s'exécutera jusqu'à ce que Compteur soit égal à end.

Cette syntaxe précise permet de contrôler le nombre exact de fois qu’un bloc de code sera exécuté, ce qui est essentiel pour la manipulation de données et la réalisation de tâches répétitives de manière efficace.

Exemple Simple : Boucle For VBA

Ce script simple illustre l'utilisation de la boucle For...Next en VBA. La variable i est initialisée à 1 et incrémente à chaque itération jusqu'à atteindre la valeur de 5. À chaque passage dans la boucle, le numéro de l'itération est affiché dans la fenêtre Immediate de l'éditeur VBA, grâce à l'instruction Debug.Print.

L'exécution pas à pas de ce code via la touche F8 permet de suivre en détail chaque étape de la procédure. Cela aide non seulement à comprendre le flux de la boucle For, mais également à visualiser comment les valeurs de la variable i évoluent de 1 à 5. Chaque pression sur F8 exécute une itération du bloc de code, rendant visibles les résultats intermédiaires dans la fenêtre Immediate, où les numéros de 1 à 5 seront affichés séquentiellement, démontrant ainsi le comptage par la boucle.

Utilisation de Step dans For…Next (Boucle à incrémentation)

Le mot-clé Step joue un rôle crucial dans la personnalisation du comportement d'incrément de la variable de boucle dans les structures For...Next en VBA.

Par défaut, l'incrément est fixé à 1, ce qui signifie que la variable de boucle augmente de 1 à chaque itération. Cependant, en utilisant Step, vous pouvez modifier cette valeur d'incrément pour adapter la boucle à des besoins spécifiques.

Syntaxe avec Step
(Boucle à incrémentation)

La syntaxe complète pour une boucle For...Next avec un incrément spécifié est la suivante :

Dans cette structure :

  • Compteur est la variable de contrôle de la boucle.
  • start définit la valeur initiale de Compteur.
  • end est la valeur finale que Compteur doit atteindre ou dépasser pour que la boucle se termine.
  • increment spécifie de combien Compteur sera augmenté (ou diminué, si l'incrément est négatif) après chaque itération. Cela permet de contrôler le pas de l'itération, offrant ainsi une grande flexibilité dans le traitement des données.

Cette capacité à ajuster l'incrément permet des itérations plus complexes, telles que sauter certains éléments dans une séquence, ou itérer à travers des valeurs en ordre décroissant, en ajustant simplement la valeur de l'incrément.

Exemple avec Step
(Boucle à incrémentation)

Ce script montre comment utiliser Step pour incrémenter la variable i de la boucle par 5 à chaque itération, comptant ainsi de 0 à 60. Cela démontre l'efficacité de Step pour ajuster l'incrément à des intervalles spécifiques, facilitant le parcours d'une gamme de valeurs à pas réguliers.

Exemple de boucle à décrémentation

L’utilisation de Step – n,  initiera une boucle à décrémentation ou boucle à rebours

Ce code implémente une boucle à décrémentation, où i commence à 24 et diminue jusqu'à 0. L'utilisation de Step -1 permet de réduire la variable de boucle d'une unité à chaque itération, idéal pour créer un effet de compte à rebours.

Pourquoi utiliser la boucle à décrémentation ?

La boucle For...Next avec Step -1 est extrêmement utile pour parcourir des éléments dans l'ordre inverse. Cela est particulièrement pertinent lorsqu'on manipule des collections ou des tableaux où l'ordre des opérations peut influencer le résultat final.

Scénario d'Utilisation

Supposons que vous ayez un tableau de 50 lignes, et que vous souhaitiez supprimer les lignes impaires :

Lorsque nous souhaitons supprimer des lignes d'un tableau, en effectuant dans une boucle un test sur une cellule de chaque ligne, nous utiliserons une boucle à décrémentation.

Cela garantit que les numéros de ligne ne seront pas altérés lors de l'itération à travers le tableau. En effet, lorsque l’on supprime une ligne d’un tableau, toutes les lignes se situant sous la ligne supprimée changeront d’indice.

Quel est mon niveau sur VBA Excel ?

En quelques minutes seulement, ce test vous permet d’évaluer votre niveau et de savoir exactement quoi travailler pour progresser rapidement.

Optimiser les temps d’exécution d’une boucle For…Next

Le développeur utilisera très souvent la boucle For Next pour rechercher une valeur dans un tableau de valeur. Une fois la valeur trouvée, il sera possible de sortir de la boucle pour optimiser le temps d’exécution d’une boucle.

Exemple de sortie de boucle :

Explication :

Dans cet exemple, nous déclarons une variable MyVar de type Variant. Nous lui attribuons une chaîne de caractères contenant des mots séparés par des virgules (que nous appellerons le "séparateur de texte"). La fonction Split divise cette chaîne en un tableau mémoire unidimensionnel, plaçant chaque mot dans une cellule du tableau.

Nous démarrons ensuite une boucle For qui parcourt tous les index de notre nouveau tableau mémoire MyVar. Le plus petit index d'un tableau mémoire unidimensionnel est LBound(Tableau) (Limite Inférieure : Borne Inférieure), et dans un tableau mémoire unidimensionnel de type Variant, le plus petit index est 0. Le plus grand index est UBound(Tableau) (Limite Supérieure : Borne Supérieure).

Pendant la boucle, si l'élément en scrutation du tableau correspond à "Cerise", nous affichons dans une boîte de dialogue le numéro de l'index où se trouve le mot "Cerise". Après avoir trouvé ce que nous recherchions, nous sortons de la boucle pour optimiser son temps d'exécution en utilisant la commande Exit For. Nous retrouverons ensuite End if la fin de condition puis la commande Next i pour incrémenter notre boucle.

End Sub pour clôturer notre procédure.

Pour information dans une base de données faisant appel à un tableau bidimensionnel que l’on pourrait appeler MyArray, avec pour ordonnées des enregistrements et pour origine des champs de données le plus grand indice des ordonnées sera égale à Ubound(MyArray, 1) et le plus grand indice de champ sera égale à Ubound(MyArray, 2)

🎁 Apprenez les bases de VBA avec une formation gratuite

Les boucles imbriquées

Les boucles imbriquées ou Nested Loop sont définies avec une boucle que l’on appelle externe à l’interieur de laquelle peut être initiée une ou plusieurs boucles internes. Bien que le nombre de boucles imbriquées ne soit pas limité, en pratique, il est rare d'avoir besoin de plus de quelques niveaux d'imbrication de boucles.

Dans l’exemple suivant, nous avons deux boucles imbriquées pour réaliser un planning hebdomadaire dont l’unité est 1 heure :

Les boucles imbriquées Excel VBA exemple

Pour aller plus loin

Les boucles For...Next ; For...Next Step et For...Next Step -1 sont des outils de programmation puissants en VBA qui offrent une flexibilité considérable pour itérer à travers des ensembles de données dans différents ordres.

En maîtrisant ces structures, les développeurs peuvent écrire des codes plus efficaces et adaptés à une gamme plus large de situations.

Une formation reconnue pour progresser sur Excel VBA

Rejoignez les professionnels qui ont choisi Morpheus Formation pour automatiser leurs fichiers et gagner en efficacité. Une formation basée sur :

  • Des cas concrets et des exercices sur mesure
  • Un accompagnement personnalisé par un formateur VBA expert
  • Une pédagogie orientée résultats
  • Une certification TOSA reconnue
  • Le tout, finançable via le CPF

Déjà plus de 850 apprenants accompagnés, avec une note moyenne de 9,7/10 et plus de 14 000 heures de formation réalisées.

FAQ : Boucle For...Next en VBA

Cette FAQ fournit une base solide pour comprendre et exploiter efficacement les boucles For...Next en VBA, vous aidant à gérer des scénarios de programmation variés et complexes.

Si cet article vous a plu, partagez-le avec votre équipe ou laissez-nous un commentaire ! 💚

Clique sur l'étoile pour l'évaluer !

Note moyenne 5 / 5. Nombre de votes : 15

Aucun vote jusqu'à présent ! Tu peux être le premier à évaluer cet article.

Gilles CHARRAULT

Gilles CHARRAULT

Fort d'une expérience de cadre dans l'industrie, reconverti en expert Excel VBA, je propose une
Formation Excel VBA
personnalisée et des solutions de développement sur mesure en programmation VBA. Créateur de l'outil XLOneClick, je suis spécialisé dans l'automatisation de processus et la gestion de données via Excel pour optimiser la productivité des entreprises.

Articles: 12

2 commentaires

  1. Bonjour,
    j'ai plusieurs boucles For indépendantes dans ma macro.
    puis-je utiliser pour toutes "For i= " ou dois-je changer de lettre "i" à chaque boucles ?

    Dim i As Integer
    For i = 1 To plageSourcePres.Rows.Count
    If plageSourcePres.Cells(i, 1).Value 0 Then
    plageCiblePres.Cells(i, 1).Value = "O"
    End If
    Next i

    Dim l As Integer
    For l = 1 To plageSourcePres2.Rows.Count
    If plageSourcePres2.Cells(l, 1).Value 0 Then
    plageCiblePres2.Cells(l, 1).Value = "O"
    End If
    Next l

    Dim m As Integer
    For m = 1 To plageSourcePres3.Rows.Count
    If plageSourcePres3.Cells(m, 1).Value 0 Then
    plageCiblePres3.Cells(m, 1).Value = "O"
    End If
    Next m

    Dim n As Integer
    For n = 1 To plageSourcePres4.Rows.Count
    If plageSourcePres4.Cells(n, 1).Value 0 Then
    plageCiblePres4.Cells(n, 1).Value = "O"
    End If
    Next n
    ...
    puis plusieurs séries comme ceci :

    For i = 0 To 5
    Sheets("RECAP MENSUEL").Range("S" & (19 + i)).Value = ws2.Range("P" & (13 + i))
    Next i

    For i = 0 To 5
    Sheets("RECAP MENSUEL").Range("S" & (26 + i)).Value = ws3.Range("P" & (13 + i))
    Next i

    • Bonjour,

      Voici la réponse de notre formateur Excel VBA Gilles CHARRAULT :

      Lorsque les boucles for ne sont pas imbriquées comme dans cet exemple, un argument de boucle (i) peut être utilisé dans plusieurs boucles, et il n’est pas nécessaire de le définir à chaque boucle.

      La commande For i = 1 ( Valeur numérique entière) Initialise la variable i ou incrément de boucle à cette valeur numérique.

      Il arrive parfois pour faciliter la lecture des macros d’utiliser une lettre spécifique comme (m) pour mois par exemple, mais ceci n’est lié qu’a une meilleure compréhension du code.

      Correction de votre exemple :

      Sub BoucleFor

      Dim i As Integer

      For i = 1 To plageSourcePres.Rows.Count
      If plageSourcePres.Cells(i, 1).Value 0 Then
      plageCiblePres.Cells(i, 1).Value = "O"
      End If
      Next i

      For i = 1 To plageSourcePres2.Rows.Count
      If plageSourcePres2.Cells(i, 1).Value 0 Then
      plageCiblePres2.Cells(i, 1).Value = "O"
      End If
      Next i

      For i = 1 To plageSourcePres3.Rows.Count
      If plageSourcePres3.Cells(i, 1).Value 0 Then
      plageCiblePres3.Cells(i, 1).Value = "O"
      End If
      Next i

      For i = 1 To plageSourcePres4.Rows.Count
      If plageSourcePres4.Cells(i, 1).Value 0 Then
      plageCiblePres4.Cells(i, 1).Value = "O"
      End If
      Next i

      End Sub

      Dans le deuxième exemple:

      Utiliser des variables objet rend le code plus robuste.

      Sub BoucleFor2()

      Dim ws(3) As Worksheet 'Définir une variable objet multiple Worksheet

      Dim i As Integer

      'Attribuer à chaque indice de la variable objet multiple le nom des feuilles de travail

      Set ws(1) = Worksheets("Feuil1")

      Set ws(2) = Worksheets("Feuil2")

      Set ws(3) = Worksheets("Feuil3")

      'Utiliser une seule boucle

      For i = 0 To 5

      ws(1).Cells(19, 19 + i) = ws(2).Cells(16, 13 + i)

      ws(1).Cells(19, 26 + i) = ws(3).Cells(16, 13 + i)

      Next i

      ' Libérer la mémoire des objets utilisés

      Set ws(1) = Nothing: Set ws(2) = Nothing: Set ws(3) = Nothing

      End Sub

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

🎁 Félicitations ! Votre ebook Excel offert !
EXERCICES | FICHES | EXEMPLES
Votre ebook Excel offert !
Félicitations !
Vous souhaitez progresser rapidement et exploiter le plein potentiel d'Excel ?
Choisissez votre
formation Excel !
Quel est votre niveau sur Excel ?
Seulement 7 % des 8 000 personnes ont atteint un niveau avancé.
Testez vos connaissances sur Excel pour vous situer par rapport aux autres utilisateurs et découvrez nos ressources exclusives adaptées à votre niveau.
*et recevez votre certificat à la fin !
Sky Rocket Your Agency Income
Get Our Free Guide to
299 vidéos Excel rien que pour vous 😁
Tout ce qu’il faut pour progresser gratuitement sur Excel !
  • Une publication par semaine (minimum !)
  • Vos commentaires ? On les lit tous (promis)
  • Nos vidéos partent des vrais problèmes rencontrés 
C’est gratuit. C’est utile. C’est pour vous.
Excel vous fait perdre du temps ? Demandez un AUDIT gratuit
  • Identifier ce qui vous ralentit dans vos fichiers
  • Voir ce qui peut être automatisé ou fiabilisé
  • Comprendre comment faire évoluer votre façon de travailler
  • Découvrir le format de formation le plus efficace pour vous
  • Repartir avec une vision claire (même sans formation)
100 % gratuit • Sans engagement • 15 minutes Réservé aux professionnels basés en France
NICOLAS PARENT - Formateur Excel -
Expliquez-nous comment vous travaillez sur Excel. On vous montre quoi améliorer. En 15 minutes avec un expert, vous allez pouvoir :
LES 25 FONCTIONS EXCEL LES PLUS UTILISÉES !
E-book Excel offert