En fait les boutons Excel "Save" et "Close" et les méthodes VBA correspondantes ThisWorkbook.Save et ThisWorkbook.Close ne se comportent pas de la même façon, c'est à dire que les méthodes bloque le changement de visibilité désiré.
En fait:
Je voulais faire la même chose que adrienoob dans cette discussion. C'est à dire que je voulais mettre toutes les feuilles (sauf une) à Sh.Visible = xlSheetVeryHidden avant une sauvegarde ou une sortie et de les mettre à Sh.Visible = xlSheetVisible lors de l'ouverture. J'ai créer donc le "Sub" suivant:et j'ai mis des appels à HideAllSheets dans Workbook_Open, Workbook_BeforeSave et Workbook_BeforeClose:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Public Sub HideAllSheets(kVisible As Integer) ' Variables utilisées: "PasswordClasseur", "MafeuilleDAccueil" ' Utilisation: HideAllSheets xlSheetVisible ou HideAllSheets xlSheetVeryHidden ' But: cache ou rend visibles toutes les feuilles sauf une, d'en sorte qu'on ne puisse ' rendre les feuilles visibles sans VBA Dim Sh Application.ScreenUpdating = False ' A utiliser si le classeur est protégé en structure: ActiveWorkbook.Protect Password:="PasswordClasseur", Structure:=False, Windows:=False For Each Sh In Sheets nom = Sh.Name 'pour debug If Not Sh.Name = "MafeuilleDAccueil" Then Sh.Visible = kVisible End If Next Sh ActiveWorkbook.Protect Password:="PasswordClasseur", Structure:=True, Windows:=False Application.ScreenUpdating = True 'MsgBox kVisible End Subet ça marche très bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Private Sub Workbook_Open() HideAllSheets xlSheetVisible End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) HideAllSheets xlSheetVeryHidden End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) HideAllSheets xlSheetVeryHidden End Sub
Par contre, tout se gâte si j'utilise une des méthodes ThisWorkbook.Save ou ThisWorkbook.Close. Les feuilles ne sont pas cachées, alors qu'on passe bien dans le code. Il faut faire l'appel à HideAllSheets avant d'appeler ces méthodes !





Répondre avec citation

Partager