Les feuilles en VBA : Worksheet, Set, Add, Move, Delete, propriétés et événements
Un classeur contient une collection de feuilles : Worksheets. Chaque feuille est un objet Worksheet, que l’on désigne par son nom, son numéro ou son nom de code, que l’on range dans une variable avec Set, que l’on ajoute, déplace, copie ou supprime, dont on modifie les propriétés (nom, visibilité, couleur d’onglet), et qui réagit à des événements : activation, désactivation, double-clic. Chaque simulateur reproduit un classeur avec ses onglets et l’explorateur de projets de l’éditeur VBA. Voir aussi manipuler les cellules et les sélections.
Worksheet : désigner une feuille
On désigne une feuille de trois façons. Par son nom, celui de l’onglet : Worksheets("Sessions"). Par son numéro d’ordre (Index), de gauche à droite : Worksheets(1). Par son nom de code (CodeName), visible dans l’explorateur de projets : Feuil1. ActiveSheet désigne la feuille affichée. La collection Sheets contient en plus les feuilles graphiques ; pour des feuilles de calcul, Worksheets suffit. Préciser la feuille devant Range permet de lire ou d’écrire sans l’activer.
Range("A1") seul agit sur la feuille active : si l’utilisateur a changé d’onglet, la macro écrit au mauvais endroit. Précisez la feuille.Set : une variable de type Worksheet
Une feuille est un objet : pour la ranger dans une variable, on déclare Dim ws As Worksheet puis on l’affecte avec Set ws = Worksheets("Sessions"). Le mot-clé Set est obligatoire pour tout objet (feuille, plage, classeur) ; sans lui, VBA déclenche l’erreur 91. La variable rend le code plus court (ws.Range("A1")), plus rapide, et suit la feuille même si elle est renommée ou déplacée. Set ws = Nothing libère la variable.
With Worksheets("Sessions") … .Range("A1").Value = … … End With évite aussi de répéter le nom de la feuille.Is : If ws Is ActiveSheet Then, ou par leur nom : If ws.Name = "Archive" Then.Add, Move et Delete : ajouter, déplacer, supprimer
Worksheets.Add insère une nouvelle feuille, par défaut avant la feuille active ; les arguments Before:= ou After:= choisissent l’emplacement, Count:= le nombre de feuilles. La méthode renvoie la nouvelle feuille, que l’on peut renommer aussitôt. .Move déplace une feuille, .Copy la duplique avec son contenu, .Delete la supprime après une confirmation, que Application.DisplayAlerts = False permet de masquer.
For Each ws In Worksheets et comparez ws.Name.Principales propriétés d’une feuille
Les propriétés décrivent la feuille et se lisent ou se modifient comme des variables. Le tableau sous le simulateur affiche en permanence celles des feuilles du classeur, y compris les feuilles masquées.
| Propriété | Rôle | Exemple |
|---|---|---|
.Name | Nom de l’onglet (31 caractères, sans : \ / ? * [ ]) | ws.Name = "Bilan 2026" |
.Index | Position de l’onglet, de gauche à droite (lecture seule) | Debug.Print ws.Index |
.CodeName | Nom de code dans l’éditeur VBA (lecture seule en VBA) | Feuil1 |
.Visible | Visible, masquée ou très masquée | ws.Visible = xlSheetVeryHidden |
.Tab.Color | Couleur de l’onglet | ws.Tab.Color = RGB(0, 120, 212) |
Worksheets.Count | Nombre de feuilles de calcul | Worksheets(Worksheets.Count) : la dernière |
xlSheetVeryHidden est idéal pour une feuille de paramètres ou de listes : invisible pour l’utilisateur, toujours lisible par les macros..UsedRange (la zone utilisée), .Cells, .Protect / .Unprotect, .PageSetup pour l’impression.Les événements d’une feuille : Worksheet_Activate, Worksheet_Deactivate, Worksheet_BeforeDoubleClick
Une procédure événementielle s’exécute toute seule quand l’événement se produit. Elle s’écrit dans le module de la feuille (double-clic sur Feuil1 dans l’explorateur de projets, puis listes déroulantes Worksheet et Activate), pas dans un module standard. Worksheet_Activate se déclenche quand on arrive sur la feuille, Worksheet_Deactivate quand on la quitte, Worksheet_BeforeDoubleClick quand on double-clique sur une cellule : son argument Target désigne la cellule et Cancel = True annule l’action normale d’Excel (le mode Édition). Dans un module de feuille, Me désigne la feuille elle-même.
Application.EnableEvents = False … True pour éviter les cascades.Workbook_SheetActivate(ByVal Sh As Object) réagit à l’activation de toutes les feuilles avec une seule procédure.Worksheet_Change (une cellule modifiée), Worksheet_SelectionChange (une autre cellule sélectionnée), Worksheet_BeforeRightClick.Exercice : organiser le classeur des sessions
Classeur d’exercice (Énoncé et Corrigé)
- Enregistrez le classeur en .xlsm et collez le code de la feuille « Code VBA » dans un module standard, et les procédures événementielles dans les modules des feuilles indiquées.
- Exécutez
Inventaire(Worksheets, For Each), puisCreerBilan(Set, Add, Name, Tab.Color). - Exécutez
Organiser(Move, Copy, Visible) puisNettoyer(Delete, DisplayAlerts). - Testez les événements : changez d’onglet, double-cliquez sur la colonne Présent de Stagiaires.
- Répondez aux questions de la feuille Contrôle.