TL;DR —
ws.Visible = xlSheetHiddenmasque une feuille ;xlSheetVisiblel'affiche de nouveau. Il existe un troisième état,xlSheetVeryHidden, qui retire la feuille de la boîte de dialogue Afficher : seul le code ou l'éditeur VBA peut alors la faire revenir. Les trois changent ce que voit l'utilisateur, pas ce qu'est la feuille : une feuille masquée continue de calculer, alimente toujours chaque formule qui pointe vers elle, et reste entièrement lisible et modifiable depuis le code. Excel refuse de masquer la dernière feuille visible (erreur 1004), et vous ne pouvez pas faireSelectsur une feuille masquée — vous n'en avez jamais besoin. Masquez des feuilles pour ranger un classeur ; si le contenu doit rester secret, il n'a rien à faire dans le fichier.
Sub HideHelperSheets()
With ThisWorkbook
.Worksheets("Lookups").Visible = xlSheetHidden ' l'utilisateur peut l'afficher via clic droit
.Worksheets("Config").Visible = xlSheetVeryHidden ' absente de la boite de dialogue Afficher
End With
End Sub
Voici le deuxième volet d'une série de trois sur l'identité d'une feuille. Le nom d'onglet est une étiquette
qui appartient à l'utilisateur. Renommer change cette étiquette, masquer,
traité ici, retire l'onglet de l'écran sans mettre la feuille hors de portée, et
vérifier si une feuille existe demande si une étiquette est déjà prise.
Le fil conducteur des trois : la barre d'onglets est une vue de la collection Sheets. Masquer modifie la
vue ; la collection, elle, ne change pas.
Ce que vous allez apprendre
- Le modèle mental : masquer modifie la vue, pas le classeur
- Les trois états de
Visibleet ce que chacun permet - Les deux erreurs : la dernière feuille visible, et la sélection d'une feuille masquée
- Travailler avec des feuilles masquées sans jamais les afficher
- Afficher toutes les feuilles en une boucle, et tout masquer sauf une
- Pourquoi ni masquée ni très masquée ne relève de la sécurité, et que faire à la place
Le modèle mental : masquer modifie la vue
Les feuilles d'un classeur vivent dans la collection Sheets. La rangée d'onglets en bas de l'écran est une
vue de cette collection, et masquer retire un onglet de la vue — rien d'autre. La feuille garde sa place
dans la collection, son index, son nom, ses formules et ses données. Par conséquent :
- Une formule comme
=Lookups!B2continue de fonctionner quandLookupsest masquée. Worksheets.Countla compte toujours, etWorksheets(2)peut très bien être une feuille masquée.- Une boucle For Each sur
Worksheetsla parcourt. - Le code peut lire et écrire ses cellules exactement comme avant.
C'est pourquoi masquer est le bon outil pour les feuilles auxiliaires — tables de correspondance, configuration, données intermédiaires — et le mauvais outil pour tout ce que vous devez protéger. C'est la version à l'échelle de la feuille du masquage de colonnes : aucun affichage, présence totale.
Les trois états de Visible
Visible prend l'une des trois constantes XlSheetVisibility :
| Constante | Valeur | Onglet affiché | Dans la boîte Afficher | Qui peut l'afficher de nouveau |
|---|---|---|---|---|
xlSheetVisible |
-1 | oui | — | — |
xlSheetHidden |
0 | non | oui | n'importe qui, par clic droit > Afficher |
xlSheetVeryHidden |
2 | non | non | le code, ou la fenêtre Propriétés de l'éditeur VBA |
ws.Visible = False fonctionne aussi et signifie xlSheetHidden, mais écrivez les constantes : True et
False ne peuvent pas exprimer le troisième état, et vos lecteurs ne devraient pas avoir à se souvenir que
False vaut 0.
L'état très masqué est le plus utile pour les outils que vous construisez. L'utilisateur ne voit jamais la feuille dans la liste : il n'affiche donc pas votre configuration par curiosité pour la modifier par accident. Pour le définir sans code, sélectionnez la feuille dans l'Explorateur de projets de l'éditeur VBA et modifiez Visible dans la fenêtre Propriétés.
Les deux erreurs que vous rencontrerez
Masquer la dernière feuille visible. Un classeur doit toujours afficher au moins une feuille. Masquer la seule feuille visible déclenche l'erreur d'exécution 1004, Unable to set the Visible property of the Worksheet class. Les feuilles masquées et très masquées ne comptent pas : un classeur avec une feuille visible et dix feuilles masquées refuse quand même. Quand vous masquez des feuilles dans une boucle, assurez-vous que la feuille qui doit rester visible l'est avant le début de la boucle.
Sélectionner une feuille masquée. Worksheets("Lookups").Select sur une feuille masquée déclenche
l'erreur 1004. Il en va de même pour la sélection d'une plage sur cette feuille. La solution n'est pas de
l'afficher d'abord — c'est de ne rien sélectionner du tout :
' Faux : selectionner une feuille masquee pour y ecrire
' Worksheets("Lookups").Select
' Range("A1").Value = "Updated"
' Juste : ecrire via une reference ; la feuille reste masquee
ThisWorkbook.Worksheets("Lookups").Range("A1").Value = "Updated"
Le guide Select et Activate explique pourquoi c'est aussi la meilleure
habitude sur les feuilles visibles. Il existe une troisième erreur, plus rare : si la structure du
classeur est protégée, modifier la propriété Visible de n'importe quelle feuille échoue tant que vous
n'avez pas appelé Unprotect sur le classeur.
Afficher toutes les feuilles, ou tout masquer sauf une
La boîte de dialogue Afficher ne peut montrer que les feuilles en xlSheetHidden. Pour tout faire
revenir, feuilles très masquées comprises, parcourez la collection Sheets — Sheets, pas Worksheets,
pour que les feuilles graphiques reviennent aussi :
Sub UnhideAllSheets()
Dim sh As Object
For Each sh In ThisWorkbook.Sheets
sh.Visible = xlSheetVisible
Next sh
End Sub
L'inverse — afficher un tableau de bord et masquer tout le reste — doit respecter la règle de la dernière feuille visible : l'ordre compte donc. Affichez d'abord la feuille à garder, puis masquez les autres :
Sub ShowOnly(keep As Worksheet)
Dim sh As Object
keep.Visible = xlSheetVisible ' en premier, pour qu'il reste toujours une feuille visible
For Each sh In keep.Parent.Sheets
If Not sh Is keep Then sh.Visible = xlSheetVeryHidden
Next sh
keep.Activate
End Sub
keep.Parent est le classeur auquel appartient la feuille : la routine fonctionne donc sur n'importe quel
classeur ouvert, pas seulement sur celui qui contient le code.
Le jugement : masquer relève de la présentation, pas de la sécurité
Il est tentant de considérer l'état très masqué comme un verrou. Ce n'en est pas un. N'importe qui peut
ouvrir l'éditeur VBA avec Alt+F11, voir la feuille très masquée dans l'Explorateur de projets et la
repasser en visible. Verrouiller le projet VBA par un mot de passe ferme cette porte aux utilisateurs
occasionnels, et protéger la structure du classeur bloque le clic droit > Afficher — mais les données
restent dans le fichier. Tout outil qui lit directement les fichiers .xlsx, de Power Query à un script
Python, lit toutes les feuilles quelle que soit leur propriété Visible, et les feuilles masquées voyagent
avec chaque copie du classeur que vous envoyez.
Ma règle : masquez pour désencombrer et éviter les accidents ; supprimez pour garder un secret. Utilisez l'état très masqué pour la configuration sur laquelle l'utilisateur ne doit pas tomber, ajoutez Protéger la structure du classeur si vous voulez que le menu Afficher soit grisé, et ne livrez jamais de grilles de salaires, de prix de revient ou d'identifiants dans une feuille masquée. Si un destinataire ne doit pas la voir, supprimez-la de la copie que vous envoyez — le guide Delete Sheet montre comment le faire sans la demande de confirmation.
Comment ExcelMaster vous aide
Les bugs de visibilité sont discrets : une macro qui s'arrête sur l'erreur 1004 uniquement quand l'utilisateur a déjà masqué les autres feuilles, un rapport qui sélectionne une feuille masquée et échoue sur une seule machine, une feuille de tarifs « secrète » partie chez un client à l'intérieur du classeur.
ExcelMaster vous laisse décrire ce que vous voulez — « n'affiche que la feuille Dashboard, rends les feuilles de paramétrage très masquées et protège la structure » — et écrit le code de visibilité dans l'ordre qui ne se heurte jamais à la règle de la dernière feuille visible, en travaillant sur les feuilles masquées par des références au lieu de les sélectionner.
Questions fréquentes
Comment masquer une feuille avec VBA ?
Définissez sa propriété Visible : Worksheets("Data").Visible = xlSheetHidden. L'utilisateur peut
l'afficher de nouveau par clic droit > Afficher. Utilisez xlSheetVeryHidden si la feuille ne doit pas du
tout apparaître dans la boîte de dialogue Afficher, et xlSheetVisible pour l'afficher de nouveau.
Quelle est la différence entre masquée et très masquée ?
Une feuille masquée apparaît dans la boîte de dialogue Afficher : n'importe quel utilisateur peut donc la faire revenir. Une feuille très masquée n'y apparaît pas ; seul le code ou la fenêtre Propriétés de l'éditeur VBA peut la rendre de nouveau visible. Les deux continuent de calculer et les deux sont entièrement accessibles depuis le code.
Comment afficher toutes les feuilles en VBA ?
Parcourez la collection Sheets avec For Each et définissez sh.Visible = xlSheetVisible sur chaque
feuille. Cela restaure aussi les feuilles très masquées et les feuilles graphiques, que la boîte de dialogue
Afficher ne peut pas faire revenir.
Pourquoi ai-je l'erreur 1004 en masquant une feuille ?
Le plus souvent parce que c'est la dernière feuille visible, et qu'un classeur doit toujours en afficher au moins une. Rendez d'abord une autre feuille visible. L'autre cause est une structure de classeur protégée, qui bloque toute modification de la visibilité des feuilles tant que le classeur n'est pas déprotégé.
VBA peut-il lire et écrire dans une feuille masquée ?
Oui. Masquer ne fait que retirer l'onglet de la vue : Worksheets("Data").Range("A1").Value fonctionne donc
de la même façon sur une feuille masquée. Ce qui échoue, c'est Select ou Activate, dont vous n'avez pas
besoin : écrivez via une référence et la feuille reste masquée.
Testé dans
Testé dans : Excel 365 (Windows 11), VBA 7.1 — dernière vérification le 30/09/2026.
Guides associés : VBA Rename Sheet · VBA Check If Sheet Exists · VBA Hide Columns · VBA Worksheets · VBA Delete Sheet · VBA Protect Sheet · VBA Select and Activate · VBA For Each
