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.