- Thème : feuilles (objets Worksheet) | Durée : 30 min | Niveau : intermédiaire.
- Classeur de départ :
VBA12_regions.xlsm (feuilles Modèle, Nord, Sud et Brouillon). - Contexte : le contrôle de gestion suit les objectifs par région, une feuille par région. Vous créez un sommaire, ajoutez une région à partir du modèle, colorez les onglets, supprimez le brouillon sans message de confirmation et écrivez la fonction EstFeuilleExiste.
- Ouvrir le classeur, puis l'éditeur Visual Basic (Alt+F11) et le module
Module1. - Ajouter une feuille Sommaire et lister les feuilles : macro
CreerSommaire. - Copier le modèle pour créer la région Est : macro
CreerRegionEst. - Colorer les onglets : macro
ColorerOnglets. - Supprimer la feuille Brouillon sans confirmation : macro
SupprimerBrouillon. - Ajouter la région Ouest une seule fois, grâce à la fonction
EstFeuilleExiste : macro AjouterOuest. - Répondre au questionnaire de fin de lab (5 questions, 80 % pour valider).
Ajouter une feuille Sommaire et lister les feuilles
Sub CreerSommaire()
Dim feuilleSommaire As Worksheet, feuille As Worksheet
Dim ligne As Long
Set feuilleSommaire = ThisWorkbook.Worksheets.Add(Before:=ThisWorkbook.Worksheets(1))
feuilleSommaire.Name = "Sommaire"
ligne = 1
For Each feuille In ThisWorkbook.Worksheets
If feuille.Name <> feuilleSommaire.Name Then
feuilleSommaire.Cells(ligne, 1).Value = feuille.Name
ligne = ligne + 1
End If
Next feuille
End Sub
- Worksheets.Add crée une feuille et la renvoie : on la range dans une variable pour la nommer et la remplir. For Each parcourt toutes les feuilles du classeur sans connaître leur nombre.
- Résultat attendu :
- La feuille Sommaire est la première du classeur
- Sommaire!A1:A4 liste Modèle, Nord, Sud et Brouillon
Copier le modèle pour créer la région Est
Sub CreerRegionEst()
Dim feuilleModele As Worksheet, feuilleRegion As Worksheet
Set feuilleModele = ThisWorkbook.Worksheets("Modèle")
feuilleModele.Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
Set feuilleRegion = ActiveSheet
feuilleRegion.Name = "Est"
feuilleRegion.Range("B1").Value = "Est"
End Sub
- Copy After:= place la copie après la feuille indiquée. La copie devient la feuille active : Set feuilleRegion = ActiveSheet la récupère aussitôt, avant toute autre manipulation.
- Résultat attendu :
- La feuille Est est la dernière du classeur, avec Est en B1
- La feuille Est reprend la structure du modèle (Mois, Objectif, Réalisé, Écart)
Sub ColorerOnglets()
Dim feuille As Worksheet
For Each feuille In ThisWorkbook.Worksheets
Select Case feuille.Name
Case "Nord", "Sud", "Est"
feuille.Tab.Color = RGB(0, 176, 80)
Case "Modèle"
feuille.Tab.Color = 255
End Select
Next feuille
End Sub
- Tab.Color fixe la couleur d'un onglet. RGB(rouge, vert, bleu) calcule le code d'une couleur ; 255 correspond au rouge pur. Select Case évite une série de If imbriqués.
- Résultat attendu :
- Les onglets Nord, Sud et Est sont verts
- L'onglet Modèle est rouge
Supprimer la feuille Brouillon sans confirmation
Sub SupprimerBrouillon()
Application.DisplayAlerts = False
ThisWorkbook.Worksheets("Brouillon").Delete
Application.DisplayAlerts = True
End Sub
- Delete affiche normalement un message de confirmation qui bloque la macro. Application.DisplayAlerts = False le supprime ; on remet True aussitôt après pour ne pas masquer d'autres alertes.
- Résultat attendu :
- La feuille Brouillon n'existe plus
- La macro a désactivé puis réactivé les alertes (DisplayAlerts)
Ajouter la région Ouest une seule fois
Function EstFeuilleExiste(sName As String) As Boolean
Dim x As Object
On Error Resume Next
Set x = ActiveWorkbook.Sheets(sName)
EstFeuilleExiste = (Err = 0)
End Function
Sub AjouterOuest()
Dim feuilleRegion As Worksheet
If EstFeuilleExiste("Ouest") Then
MsgBox "La feuille Ouest existe déjà.", vbInformation
Exit Sub
End If
ThisWorkbook.Worksheets("Modèle").Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
Set feuilleRegion = ActiveSheet
feuilleRegion.Name = "Ouest"
feuilleRegion.Range("B1").Value = "Ouest"
feuilleRegion.Tab.Color = RGB(0, 176, 80)
End Sub
- Renommer une feuille avec un nom déjà pris provoque une erreur. La fonction EstFeuilleExiste teste l'existence avant d'agir : la macro peut être relancée sans risque.
- Lancez AjouterOuest deux fois (F5 deux fois) : la seconde fois, un message indique que la feuille existe déjà.
- Résultat attendu :
- La feuille Ouest existe, avec Ouest en B1
- AjouterOuest a été lancée au moins deux fois sans erreur