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