Comment utiliser la boucle For Each dans Excel VBA

Comment utiliser la boucle For Each dans Excel VBA
Des lecteurs comme vous aident à soutenir MUO. Lorsque vous effectuez un achat en utilisant des liens sur notre site, nous pouvons gagner une commission d'affiliation. En savoir plus.

Les boucles et VBA vont de pair, et pour une bonne raison aussi. Lorsque vous traitez avec des objets Microsoft Office tels que des classeurs, des feuilles de calcul et des plages, les boucles peuvent vous aider à basculer entre chacun d'eux avec une relative facilité.





Alors que plus ou moins toutes les boucles VBA fonctionnent bien avec les objets, la boucle 'pour chaque' est l'une des meilleures options pour travailler avec les collections d'objets. Si vous débutez avec Excel VBA et que vous cherchez à maîtriser la boucle pour chaque, vous pouvez apprendre rapidement de certains de ces exemples. Voici tout ce que vous devez savoir sur cette boucle par excellence.





UTILISEZ LA VIDÉO DU JOUR FAITES DÉFILER POUR CONTINUER AVEC LE CONTENU

Pour la syntaxe de chaque boucle

La syntaxe de chaque boucle est assez similaire à la boucle for habituelle dans Excel VBA. Voici la syntaxe :





 For each variable_name in object_collection 

[statement]

[statement]

[statement]

Next variable_name

La boucle commence par le mot-clé « pour chaque » ; vous pouvez utiliser n'importe quel nom de variable, suivi de la collection d'objets. L'objet dans la boucle pour chaque peut être des cellules, des plages, des feuilles et même des classeurs. Telle est la beauté de cette boucle ; il vous donne la possibilité de travailler avec différentes collections Excel.

La boucle parcourt chaque valeur de collection et stocke la référence dans le nom de variable défini. Après l'exécution, VBA exécute les instructions stockées dans la boucle et passe à l'objet suivant de la collection (le suivant mot-clé est utile ici). Comprenons la structure du code avec un exemple de base.



Comment utiliser la boucle For Each dans Excel VBA

Supposons que vous souhaitiez imprimer un nombre dans les cellules A1 à A10. La meilleure approche consiste à utiliser la boucle for each avec la fonction range et à laisser le code faire le nécessaire. Voici comment vous pouvez effectuer cette tâche simple :

  1. Ouvrez l'éditeur de code VBA en appuyant sur Tout + F11 .
  2. Insérez un module en cliquant sur le Module option au sein de la Insérer languette.   Feuille Excel avec sortie en colonne's code editor
  3. Créez une sous-routine à l'aide de la commande sub() dans la fenêtre du module de l'éditeur de code. Assurez-vous d'attribuer un nom significatif à la sous-routine. Pour cet exemple, vous pouvez utiliser le nom for_each_loop .

Maintenant que les bases sont éliminées, il est temps de commencer à écrire le code. Dans la sous-routine, tapez les commandes suivantes :





 Dim cell as range 

For each cell in Sheets("Sheet1").Range("A1:A10")

cell.value = 10

Next cell

Lorsque le code s'exécute, le c variable stockera la valeur de A1. Ensuite, lorsqu'il passe à l'instruction dans la boucle, il évalue la commande et entre une valeur de 10 dans la cellule définie, c'est-à-dire la cellule A1.

comment utiliser la dictée sur mac

Enfin, lorsqu'il passe au mot-clé Next, il passe à la valeur suivante, c'est-à-dire la cellule A2. La boucle s'exécute jusqu'à ce qu'elle atteigne la cellule A10. Voici la sortie finale :





  Extrait de code VBA dans l'éditeur et sortie Excel

Utilisation de la boucle avec des objets : cellules, feuilles et classeurs

Excel a trois principaux types d'objets avec lesquels vous travaillez régulièrement. Ce sont des cellules, des feuilles et des classeurs. Voici comment vous pouvez utiliser la boucle avec les trois types d'objets.

Travailler avec des cellules et des boucles ensemble

Supposons que vous souhaitiez ajouter une valeur et certaines conditions de mise en forme à une plage de cellules dans Sheet1. Dans un premier temps, vous devez définir les conditions dans la boucle, suivies des commandes de formatage.

Tapez le code suivant dans une sous-routine.

 Sub for_each_loop() 



Dim c As Range



For Each c In Sheets("Sheet1").Range("A1:A10")



With c

.Value = 10

.Font.Color = vbRed

.Font.Bold = True

.Font.Strikethrough = True



End With



Next c



End Sub
  Extrait de code VBA dans l'éditeur de codage

Le avec La fonction est utile lors de l'exécution de plusieurs fonctions avec un objet spécifique. Puisque vous souhaitez effectuer une série de tâches avec la variable c, vous pouvez toutes les combiner à l'aide d'une fonction with..end with .

La boucle assimile la valeur de c à chaque valeur de cellule et entre la valeur 10. De plus, elle change la couleur de la cellule en rouge, met la valeur en gras et la barre. Une fois qu'il a terminé toutes les étapes, il passe à la valeur définie suivante dans la plage.

Utilisation de la boucle pour contrôler les feuilles

Comme dans l'exemple ci-dessus, vous pouvez utiliser la boucle for each pour contrôler les feuilles. Que diriez-vous de changer le nom de Sheet1 en Sheet3 à l'aide de VBA ?

Vous pouvez utiliser le code suivant pour renommer une feuille de calcul existante dans Excel à l'aide de VBA :

 Sub for_each_loop_sheets() 



For Each sht In ThisWorkbook.Sheets



If sht.Name = "Sheet1" Then



sht.Name = "Sheet3"



End If



Next sht



End Sub
  Extrait de code VBA dans l'éditeur

Le code parcourt chaque feuille du classeur et vérifie le nom de chaque feuille. S'il rencontre le nom Sheet1, il le remplace par Sheet3. Il progresse à travers les feuilles restantes, le cas échéant, dans le classeur. Une fois que l'exécution du code atteint la dernière feuille, elle sort de la boucle et de la sous-routine.

Parmi d'autres utilisations courantes, vous pouvez fusionner plusieurs feuilles de calcul à l'aide de VBA et mettre à jour le contenu d'une seule feuille à l'aide de boucles.

Basculer dans les classeurs avec la boucle

Enfin, vous pouvez utiliser la boucle for each pour parcourir différents classeurs et effectuer des tâches spécifiques. Démontrons cette fonction avec un exemple.

Vous pouvez utiliser les commandes VBA pour ajouter trois nouveaux classeurs et fermer tous ceux qui sont ouverts ensemble. Voici comment procéder :

 Sub loop_wrkbook() 



Dim wrkbook as workbook



Workbooks.Add

Workbooks.Add

Workbooks.Add



For Each wrkbook In Workbooks



wrkbook.



Next wrkbook



End Sub