Rebonjour,

J'ai un soucis pour fermer mon classeur. J'ai trouvé un code et j'essaye en vain depuis 5 jours de le mettre en marche.

J'ai des pistes pour résoudre mais je n'y arrive pas.

Mon code me permet de fermer mon classeur excel par le biais d'un bouton.
On doit avant de fermer le fichier, cacher en xlveryhidden toutes les feuilles sauf la feuille "starting notice" et ensuite enregistrer.

Problème c'est que rien ne s'enregistre et mes feuilles restent affichées.
J'ai une macro hidesheets ('permet de gerer l'etat visible des feuilles'), qui se trouvent après "ThisWorkbook.Close".

Lorsque je mets "hidesheets" avant "ThisWorkbook.Close" ça marche.
Lorsque je mets "hidesheets" après "ThisWorkbook.Close" ça marche pas.

Alors je suspect le "ThisWorkbook.Close".

code qui permet de gérer le bouton pour sortir du fichier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Sub Rectangle1_QuandClic()
    ClosingThisFile
End Sub
code qui fermer le classeur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
Sub ClosingThisFile()
    MyFileIsOpen = False
    ThisWorkbook.Close
End Sub
code sur l'evenement 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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Private Sub Workbook_BeforeClose(Cancel As Boolean)
        'une partie de ce qui suit ne sert qu'a gerer le passage IsAddin = True de ce fichier si
        'l'utilisateur veut sauver avant de fermer
        'Pour cela on vas substituer au message d'excel notre propre message ce qui
        'permet de gerer le cas du bouton cancel
 
 
        If MyFileIsOpen = True Then Exit Sub
        Dim Reponse As VbMsgBoxResult
        If ThisWorkbook.Saved = True Then
            'retour a la normale
            Defaut
            'on vide la classe
            Call XlAppli.EmptyClass
        Else
            Cancel = True
            'ici notre message perso:
            On Error Resume Next
            Reponse = MsgBox("Voulez-vous sauver les modifications effectuées dans '" & ActiveWorkbook.Name & "' ? ", vbExclamation + vbYesNoCancel)
            Select Case Reponse
                Case vbYes 'l'utilisateur veut sauver avant de fermer le fichier
                    HideSheets
                    Application.EnableEvents = False 'pour eviter de passer par l'evenement Workbook_BeforeSave
                    ThisWorkbook.IsAddin = True
                    ThisWorkbook.Save
                    ThisWorkbook.Saved = True
                    Application.EnableEvents = True
                    Application.DisplayAlerts = True
                    Application.ScreenUpdating = True
                    Cancel = False
                Case vbNo 'l'utilisateur ne veut pas sauver. Pour cela:
                    'retour a la normale
                    Defaut
                    'on vide la classe
                    Call XlAppli.EmptyClass
                    'on laisse croire excel que le fichier a été sauvé
                    ThisWorkbook.Saved = True
                    'on autorise la fermeture
                    Cancel = False
            End Select
        ' si cancel rien ne ce passe
        End If
End Sub

Code pour masquer feuilles
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub HideSheets()
    'Cache toute les feuilles a l'exception de la feuille starting notice
    'j'ai laissé cette option qui fonctionne si ce fichier n'est pas enregistré avec
    'l'option IsAddin a vrai. Dans le cas contraire cela ne sert a rien
    Dim MySheet As Worksheet
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    If Sheets("starting notice").Visible = xlVeryHidden Then Sheets("starting notice").Visible = True
    For Each MySheet In ThisWorkbook.Worksheets
        If Not MySheet.Name = "starting notice" Then
            MySheet.Visible = xlVeryHidden
        End If
    Next
End SubEnd Sub
Merci d'avance