Fermeture d'un Excel -> "Annuler" / Conserver l'execution du

Bonjour,

J'ai crée un fichier excel destiné à être rempli par des centaines de personnes sur un réseau. J'y ai mis du VBA programmé à l'ouverture du fichier et à sa fermeture, destiné à optimiser la mise en page, et à restreindre les manipulations des utilisateurs. Toutes ces options s'annulent à la fermeture du fichier, car sinon elles persistent à l'ouverture des autres fichiers excel de l'utilisateur.

Le problème survient quand un utilisateur clique sur la croix de fermeture excel en haut à droite. Une boite de dialogue classique s'ouvre pour lui demander s'il souhaite enregistrer ses modifications, et il a alors trois options : enregistrer, ne pas enregistrer ou annuler.

Dans tous les cas, ma macro d'annulation de la mise en page s’exécute AVANT qu'il ait renseigné sa réponse. Donc s'il répond enregistrer, ou ne pas enregistrer, tout vas bien puisque le fichier se ferme à l'issue. Par contre, s'il répond "annuler", il se retrouve sur mon fichier sans le paramétrage de mise en page...

Je cherche une solution pour corriger ce défaut :

- Supprimer l'option "annuler" ? Est-ce seulement possible ?

- Réexecuter ma mise en page s'il clique sur "annuler" ?

Je vous joins mon code placé dans ThisWorkbook. A part ce défaut, il convient parfaitement. Je précise que je débute en VBA. Je bricole. Il y a deux macros : celle qui s’exécute à l'ouverture du fichier, et celle pour la fermeture.

Private Sub Workbook_Open()

    Application.DisplayFullScreen = True
    Application.DisplayFormulaBar = False
    ActiveWindow.DisplayHeadings = False
    ActiveWindow.DisplayGridlines = False
    ActiveWindow.DisplayWorkbookTabs = False

    Worksheets("ACCUEIL").Protect AllowFiltering:=True
    Worksheets("CS.2023").Protect AllowFiltering:=True
    Worksheets("CSCIB.2023").Protect AllowFiltering:=True
    Worksheets("CSHEN.2023").Protect AllowFiltering:=True
    Worksheets("ESUP.2023").Protect AllowFiltering:=True
    Worksheets("JDC.2023").Protect AllowFiltering:=True
    Worksheets("SNU.2023").Protect AllowFiltering:=True
    Worksheets("PART.2023").Protect AllowFiltering:=True
    Worksheets("SNU.2023").Protect AllowFiltering:=True
    Worksheets("CONSIGNES").Protect AllowFiltering:=True

    Worksheets("ACCUEIL").Activate

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    Application.DisplayFullScreen = False
    Application.DisplayFormulaBar = True
    ActiveWindow.DisplayHeadings = True
    ActiveWindow.DisplayGridlines = True
    ActiveWindow.DisplayWorkbookTabs = True

End Sub

Merci d'avance à ceux qui prendront le temps de m'aider !

Bonjour,

Une solution peut-être est de poser la question via VBA

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  ' Question avant fermeture
  If MsgBox("Voulez-vous enregistrer ce classeur à la fermeture ?", vbYesNo, "Confirmation...") = vbNo Then
    Application.EnableEvents = False
    If Application.Workbooks.Count > 1 Then
      ThisWorkbook.Close
    Else
      Application.Quit
    End If
  Else
    Application.DisplayFullScreen = False
    Application.DisplayFormulaBar = True
    ActiveWindow.DisplayHeadings = True
    ActiveWindow.DisplayGridlines = True
    ActiveWindow.DisplayWorkbookTabs = True
    ThisWorkbook.Save
  End If
End Sub

A+

C'est génial ! Cela correspond parfaitement à ma demande ! Merci beaucoup !

Re,

A+

Rechercher des sujets similaires à "fermeture annuler conserver execution"