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 SubMerci 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 SubA+
C'est génial ! Cela correspond parfaitement à ma demande ! Merci beaucoup !