Bonjour,
Bonjour bruno,
Dans la macro de ton fichier, il y a au début:
Option Explicit
Dim Sht As Worksheet
Cela sert à quelque chose?
A mon avis, Option Explicit devrait être employé systématiquement :
Dans le VBE / Outils / Options :
Par contre, pour Dim Sht As Worksheet
1) Je ne cautionne pas, dans ce cas, le fait de déclarer une variable de portée module.
Je préconise de toujours limiter la portée des variables au strict minimum nécessaire.
Dans ce cas, il n'y a aucune raison valable pour laisser vivre la variable dans tout le module quand la procédure est terminée.
J'aurais donc déclaré cette variable dans chaque procédure où elle est utilisée.
2) Le typage n'est pas cohérent avec le code des procédures
En effet, une feuille ("sheet") doit être déclarée As Object car la collection des feuilles (Sheets) ne contient pas que des feuilles de calculs (Worksheet), mais aussi les graphiques (Chart).
J'aurais donc écrit :
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Sht As Object
' Afficher la feuille d'Accueil
With Sheets("Accueil")
.Visible = xlSheetVisible
.Activate
End With
' Masquer les feuilles
For Each Sht In ThisWorkbook.Sheets
If Sht.Name <> "Accueil" Then Sht.Visible = xlSheetVeryHidden
Next Sht
End Sub
Private Sub Workbook_Open()
Dim Sht As Object
' Afficher les feuilles
For Each Sht In ThisWorkbook.Sheets
If Sht.Name <> "Accueil" Then Sht.Visible = xlSheetVisible
Next Sht
' Afficher la feuille d'Accueil
With Sheets("Accueil")
.Visible = xlSheetVeryHidden
.Activate
End With
End Sub