Vidéo: [VBA Excel] Boucle répéter jusqu'à 2024
VBA supporte encore un autre type de bouclage dans Excel 2016: boucler chaque objet dans une collection d'objets. Une collection, comme vous le savez peut-être, consiste en un certain nombre d'objets du même type. Par exemple, Excel possède une collection de tous les classeurs ouverts (la collection Workbooks) et chaque classeur contient une collection de feuilles de calcul (la collection Worksheets).
Lorsque vous devez parcourir chaque objet dans une collection, utilisez la structure For Each-Next. L'exemple suivant parcourt chaque feuille de calcul dans le classeur actif et supprime la feuille de calcul si elle est vide:
Sub DeleteEmptySheets () Dim WkSht comme application de feuille de calcul. DisplayAlerts = False pour chaque WkSht dans ActiveWorkbook. Worksheets Si WorksheetFunction. CountA (WkSht.Cells) = 0 Alors WkSht. Supprimer la fin si la prochaine application WkSht. DisplayAlerts = True End Sub
Dans cet exemple, la variable WkSht est une variable d'objet qui représente chaque feuille de calcul dans le classeur. Rien n'est spécial à propos du nom de variable WkSht; vous pouvez utiliser n'importe quel nom de variable que vous aimez.
Le code parcourt chaque feuille de calcul et détermine une feuille vide en comptant les cellules non vides. Si ce nombre est zéro, la feuille est vide et elle est supprimée. Notez que le paramètre DisplayAlerts est désactivé pendant que la boucle fait son truc. Sans cette déclaration, Excel affiche un avertissement chaque fois qu'une feuille est sur le point d'être supprimée.
Si toutes les feuilles de calcul du classeur sont vides, vous obtenez une erreur lorsque Excel tente de supprimer la seule feuille. Normalement, vous écrivez du code pour gérer cette situation.
Voici un autre exemple For Each-Next. Cette procédure utilise une boucle pour masquer toutes les feuilles de calcul dans le classeur actif à l'exception de la feuille active.
Sub HideSheets () Dim Sht Comme feuille de calcul pour chaque sht Dans ActiveWorkbook. Feuilles de travail Si Sht. Nom ActiveSheet. Nom Puis Sht. Visible = xlSheetHidden End Si Next Sht End Sub
La procédure HideSheets vérifie le nom de la feuille. Si ce n'est pas le même que le nom de la feuille active, la feuille est cachée. Notez que la propriété Visible n'est pas booléenne. Cette propriété peut réellement prendre l'une des valeurs trois et Excel fournit trois constantes intégrées. Si vous êtes curieux de connaître la troisième possibilité (xlVeryHidden), vérifiez le système d'aide.
Ce qui est caché doit éventuellement être masqué, voici donc une macro qui affiche toutes les feuilles de calcul du classeur actif:
Sub UnhideSheets () Dim Sht Comme feuille de calcul pour chaque sht Dans ActiveWorkbook. Feuilles de travail Sht.Visible = xlSheetVisible Next Sht End Sub
Sans surprise, vous pouvez créer des boucles For Each-Next imbriquées. La procédure CountBold parcourt chaque cellule dans la plage utilisée sur chaque feuille de calcul dans chaque classeur ouvert et affiche le nombre de cellules formatées en gras:
Sub CountBold () Dim WBook en tant que classeur Dim Waltheet en tant que feuille de travail Dim Cellule Comme Range Dim Cnt As Long pour chaque WBook dans les classeurs pour chaque feuille de calcul dans WBook. Feuilles de travail pour chaque cellule dans WSheet. UsedRange If Cell. Police de caractère. Gras = Vrai Alors Cnt = Cnt + 1 Cellule suivante Feuille suivante WBook MsgBox Cnt & "cellules en gras trouvées" Fin Sub