Introduction
Que ne voit-on pas dans les forums ce type de questions
- Je cherche à savoir si dans une même macro, on peut travailler sur plusieurs feuille excel d’un même classeur.
- Je dois faire un récapitulatif des commandes de l’année qui se trouvent dans le même classeur mais dans des feuilles séparées (une par mois)
- Je dispose dans un même classeur, d’une feuille nommée [RECAP] dans laquelle je souhaite rapatrier les données se trouvant dans d’autres feuilles nommées Vente suivi de l’année (Exemple [Vente – 2017]
- etc.
Finalement, il s’agit de parcourir les feuilles d’un même classeur et d’effectuer une tâche répétitive.
Que faut-il faire ?
Pour parcourir l’ensemble des feuilles d’un classeur, il faut utiliser une structure répétitive (une boucle) soit For Each … In … Next ou For … To … Next
Si vous ne connaissez par les boucles, je vous invite à lire ce tutoriel La gestion des boucles dans Excel
Exemples de procédures répétitives
Dans les deux exemples qui suivent, nous affichons simplement le nom des feuilles du classeur
Exemple 1 : (For Each … In … Next)
Sub ListeFeuille() Dim sht As Worksheet For Each sht In ThisWorkbook.Worksheets MsgBox sht.Name Next End Sub
Exemple 2 : (For … To … Next)
Sub ListeFeuille() Dim s As Integer For s = 1 To ThisWorkbook.Worksheets.Count MsgBox Worksheets(s).Name Next End Sub
Même résultat avec des méthodes différentes.
Exemple avec une procédure décisionnelle
Si l’on souhaite faire un traitement sur certaines feuilles seulement, on utilisera une structure décisionnelle comme If ou Select Case que l’on imbriquera dans la structure répétitive.
Pour en savoir plus sur les structures décisionnelles, je vous invite à lire le chapitre 11. Les structures décisionnelles du tutoriel d’Olivier Lebeau titré Initiation au VBA Office.
Sub ListeFeuille() Dim sht As Worksheet For Each sht In ThisWorkbook.Worksheets Select Case LCase(Left(sht.Name, 5)) ' Vérifie les 5 premiers caractères en minuscule du nom de la feuille Case "vente" ' N'affiche le nom que si celui-ci commence par vente MsgBox sht.Name End Select Next End Sub
Commentaires récents