Ce didacticiel vous montrera des exemples d'utilisation de la boucle For Each en VBA. Cliquez ici pour en savoir plus sur les boucles en général.
Pour chaque boucle
La boucle For Each vous permet de parcourir chaque objet dans une collection :
- Toutes les cellules d'une plage
- Toutes les feuilles de calcul dans un classeur
- Tous les classeurs ouverts
- Toutes les formes dans une feuille de calcul
- Tous les éléments d'un tableau
- et plus!
Pour chacun : exemples de base
Ces exemples montreront comment configurer des boucles For Each pour parcourir différents types d'objets.
Boucle à travers les cellules
Cette procédure va parcourir chaque cellule de la plage A1:A10, en définissant la cellule à sa juste valeur égale à elle-même.
12345678 | Sous ForEachCell()Dim Cell As RangePour chaque cellule dans les feuilles("Feuille1").Plage("A1:A10")Cell.Offset(0, 1).value = Cell.valueCellule suivanteFin du sous-marin |
Feuilles en boucle
Cette procédure parcourra chaque feuille d'un classeur, affichant chaque feuille.
12345678 | Sous ForEachSheets()Dim ws As Feuille de calculPour chaque ws dans les feuillesws.Visible = VraiFeuille suivanteFin du sous-marin |
Boucler les classeurs
Cette procédure parcourra chaque classeur, en fermant chacun d'eux.
12345678 | Sous ForEachWorkbooks()Dim wb comme classeurPour chaque wb dans les classeurswb.FermerWb suivantFin du sous-marin |
Boucle à travers les formes
Cette procédure bouclera sur chaque forme de la feuille Sheet1, en supprimant chacune d'elles.
12345678 | Sous pour chaque forme()Dim Shp comme formePour chaque Shp In Sheets("Sheet1").FormesShp.DeleteExpédition suivanteFin du sous-marin |
Graphiques en boucle
Cette procédure parcourra chaque graphique de la feuille Sheet1, en supprimant chacun d'eux.
12345678 | Sous ForEachCharts()Dim cht As ChartObjectPour chaque cht dans les feuilles ("Sheet1").ChartObjectscht.SupprimerSuivantFin du sous-marin |
Boucle dans les tableaux croisés dynamiques
Cette procédure parcourra chaque tableau croisé dynamique de Sheet1, en les effaçant.
12345678 | Sous ForEachPivotTables()Dim pvt en tant que tableau croisé dynamiquePour chaque pvt dans les feuilles ("Sheet1"). Tableaux croisés dynamiquespvt.ClearTablepvt suivantFin du sous-marin |
Boucler les tableaux
Cette procédure parcourra chaque tableau de la feuille Sheet1, en supprimant chacun d'eux.
12345678 | Sous ForEachTables()Dim tbl As ListObjectPour chaque tbl dans les feuilles ("Sheet1").ListObjectstbl.SupprimerTableau suivantFin du sous-marin |
Boucler les éléments dans le tableau
Cette procédure parcourra chaque élément d'un tableau, affichera chaque valeur dans une boîte de message,
12345678910 | Sub ForEachItemInArray()Dim arrValue comme varianteDim Item en tant que variantetabValeur = Array("Élément 1", "Élément 2", "Élément 3")Pour chaque élément dans arrValueÉlément MsgBoxProchain pointFin du sous-marin |
Boucler les nombres
Cette procédure parcourra chaque nombre d'un tableau, affichera chaque valeur dans une boîte de message,
12345678910111213 | Sub ForEachNumberInNumbers()Dim arrNumber (1 à 3) en tant qu'entierDim num comme variantearrNombre(1) = 10arrNombre(2) = 20arrNombre(3) = 30Pour chaque num dans arrNumberNuméro de boîte de messageNuméro suivantFin du sous-marin |
Pour chaque générateur de boucle
Les exemples de cet article ont été construits avec le Générateur de boucles dans notre Complément VBA : AutoMacro.
Les Générateur de boucles rend très facile la génération de code pour parcourir les objets. Macro automatique contient également de nombreux autres Générateurs de code, Un vaste Bibliothèque de codes, et puissant Outils de codage.
Pour chaque - Si
Vous pouvez également utiliser les instructions If dans les boucles pour tester si les objets répondent à certains critères, en effectuant uniquement des actions sur les objets qui répondent aux critères. Voici un exemple de boucle dans chaque cellule d'une plage :
Pour chaque cellule de la plage - Si
1234567891011121314 | Sous-If_Loop()Dim Cell comme plagePour chaque cellule de la plage ("A2:A6")Si Cell.Value > 0 AlorsCell.Offset(0, 1).Value = "Positive"ElseIf Cell.Value < 0 ThenCell.Offset(0, 1).Valeur = "Négatif"AutreCell.Offset(0, 1).Valeur = "Zéro"Fin siCellule suivanteFin du sous-marin |
Pour chaque exemples courants
Fermer tous les classeurs
Cette procédure fermera tous les classeurs ouverts, en enregistrant les modifications.
123456789 | Sous FermerTous les classeurs()Dim wb comme classeurPour chaque wb dans les classeurswb.Close SaveChanges:=TrueWb suivantFin du sous-marin |
Masquer toutes les feuilles
Cette procédure masquera toutes les feuilles de calcul.
12345678 | Sous HideAllSheets()Dim ws As Feuille de calculPour chaque ws dans les feuillesws.Visible = xlSheetHiddenWS suivantFin du sous-marin |
Afficher toutes les feuilles
Cette procédure affichera toutes les feuilles de calcul.
12345678 | Sub UnhideAllSheets()Dim ws As Feuille de calculPour chaque ws dans les feuillesws.Visible = xlFeuilleVisibleWS suivantFin du sous-marin |
Protéger toutes les feuilles
Cette procédure protégera toutes les feuilles de calcul.
12345678 | Sous ProtectAllSheets()Dim ws As Feuille de calculPour chaque ws dans les feuillesMot de passe ws.Protect :="… "WS suivantFin du sous-marin |
Déprotéger toutes les feuilles
Cette procédure déprotégera toutes les feuilles de calcul.
12345678 | Sous UnprotectAllSheets()Dim ws As Feuille de calculPour chaque ws dans les feuillesws.Unprotect Password:="… "WS suivantFin du sous-marin |
Supprimer toutes les formes sur toutes les feuilles de calcul
Cette procédure supprimera toutes les formes d'un classeur.
123456789101112 | Sub DeleteAllShapesOnAllWorksheets()Feuille de cote en tant que feuille de calculDim Shp comme formePour chaque ws dans les feuillesPour chaque shp dans ws.ShapesShp.DeleteExpédition suivanteWS suivantFin du sous-marin |
Actualiser tous les tableaux croisés dynamiques
Cette procédure actualisera tous les tableaux croisés dynamiques d'une feuille.
12345678 | Sub RefreshAllPivotTables()Dim pvt en tant que tableau croisé dynamiquePour chaque pvt dans les feuilles ("Sheet1"). Tableaux croisés dynamiquespvt.RefreshTablepvt suivantFin du sous-marin |
Utilisation de For Each dans Access VBA
La boucle For Each fonctionne de la même manière dans Access VBA que dans Excel VBA. L'exemple suivant supprimera toutes les tables de la base de données actuelle.
123456789 | Sous RemoveAllTables()Dim tdf As TableDefDim dbs en tant que base de donnéesDéfinir dbs = CurrentDbPour chaque tdf dans dbs.TableDefsDoCmd.DeleteObject tdf.NameBoucleDéfinir dbs = RienFin du sous-marin |