🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA Hide Sheet dans Excel — masquée, très masquée, et pourquoi aucune des deux n'est un verrou

|

VBA Hide Sheet dans Excel — masquée, très masquée, et pourquoi aucune des deux n'est un verrou

TL;DR — ws.Visible = xlSheetHidden masque une feuille ; xlSheetVisible l'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 faire Select sur 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 Visible et 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!B2 continue de fonctionner quand Lookups est masquée.
  • Worksheets.Count la compte toujours, et Worksheets(2) peut très bien être une feuille masquée.
  • Une boucle For Each sur Worksheets la 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