Macro pour masquer toutes les feuilles à la fermeture du classeur

Bonjour le forum

Mes vœux les meilleurs à tous les membres de ce forum.

Je souhaite réaliser une macro qui masque les feuilles de mon classeur à sa fermeture excepté la feuille "FIN".

J'ai essayé de rédiger le code ci-dessous mais rien se produit (lorsque je ferme le classeur et que je l'ouvre toutes les feuilles s'affichent).

Private Sub workbook_beforclose(Cancel As Boolean)

Dim sh As Worksheet

    For Each sh In Worksheets

    If sh.Name <> Sheets("FIN") Then

        sh.Visible = xlSheetVeryHidden

    Next sh

End Sub

Sachant que j'ai une autre macro à l'ouverture qui permet d'afficher les feuilles par profil utilisateur (qui fonctionne bien).

106masque-feuil.xlsm (13.68 Ko)

Bonjour,

Et si tu mettais un e à Befor?

Cdlt.

Bonjour jean-eric

Merci pour votre constat.

Je vien de corriger et j'ai aussi ajouté le end if mais rien ne se masque.

Merci

Bonjour, Salut Jean-Eric !

Pour être efficace, outre le e , il serait peut-être mieux de t'intéresser à BeforeSave... car on peut toujours fermer un classeur sans enregistrer, et à ce moment là ton opération est perdue corps et bien ! Si le classeur est toujours enregistré en masquant les feuilles, cela garantit qu'elle seront masquées à la réouverture suivante.

Cordialement.

Bonjour

A mettre dans THisworkbook

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ScreenUpdating = False
Dim Sh As Object
   For Each Sh In ThisWorkbook.Sheets
      If Sh.Name <> "FIN" Then Sh.Visible = False
   Next Sh
Me.Save
End Sub

A+

Re,

Bonjour MFerrand,

Une proposition avec 'BeforeClose'.

Cdlt.

256zombe.xlsm (25.38 Ko)

Re,

Une fois rectifiée, il n'y a pas de raison que la proc. ne s'exécute pas : une collection Worksheets n'appartient qu'à un seul classeur... Sauf si elle n'est pas reconnue comme évènementielle, ce qui est à vérifier en resélectionnant l'évènement dans la liste déroulante...

Mais en tout état de cause, BeforeClose peut se contourner, en sauvegardant puis en fermant sans enregistrer (et en désactivant les macros à l'ouverture...). La seule garantie que les feuilles soient masquées à l'ouverture est BeforeSave.

Cordialement.

Bonjour jean-eric , mferrand

Jean-eric, ton travail ressemble étrangement au mien !!!!

Bonne soirée à tous

Bye

RE,

En effet, désolé.

Je n'avais pas vu ta réponse.

Cdlt.

Pas de souci Jean-Eric

Bonne continuation à tous

Je pars et ne reviens que lundi ou mardi.

Bon courage

Bonjour MFerrand et le forum

Merci a tous pour vos contributions.

MFerrand pouvez vous réaliser votre proposition afin que je puisse mieux apprecier?

Jean-eric:je teste votre solution et vous reviens.

Cordialement

Bonsoir,

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim sh As Worksheet
    For Each sh In Worksheets
        If sh.Name <> "FIN" Then sh.Visible = xlSheetVeryHidden
    Next sh
End Sub

C'est la même, mais transférée sur l'évènement BeforeSave, ce qui est plus sûr car le classeur s'ouvre tel qu'il a été enregistré...

Les autres détails sont secondaires, l'utilisation de ThisWorkbook n'est pas requise ici, tu es dans son module et si tu es en train de l'enregistrer ou le fermer c'est le classeur actif, et le cas échéant étant dans le module dédié au classeur, tu peux mettre Me.Worksheets qui sera plus court !

Par contre, ce que je viens de voir qui n'avait pas été signalé, c'est que tu mettais Sheets("FIN") dans ta procédure initiale, alors que le nom c'est "FIN"...

Ceci dit, même ainsi on peut encore contourner, mais ça exige d'être un peu aguerri en VBA, et d'avoir l'intention de le faire... Laissons de côté le cas de gens mal intentionnés, là on évite les incidents d'inattention...

Cordialement.

Bonsoir MFerrand et le forum

Je viens de tester le beforesave mais je constate que lorsque tu clic sur enregistrer, toutes les feuilles se masque sauf "FIN" alors que tu n'as pas finis ton travail.

Je vais opter pour le before close avec me.save a la fin du code.

Merci a tous pour vos riche contributions.

Mferrand merci pour vos explications.

Bonne option effectivement...

Rechercher des sujets similaires à "macro masquer toutes feuilles fermeture classeur"