Lu76Fer
XLDnaute Occasionnel
Anomalie dans l'évènement BeforeClose
En écrivant une procédure de sortie dans une application je me suis rendu compte que l'évènement ne se déclenche pas dans un cas particulier ce qui entraîne une erreur à la réouverture de mon application.
Voici un petit bout de code à placer dans le module ThisWorkbook si vous souhaitez constater l'anomalie :
Il faut avoir ce seul classeur ouvert au préalable.
Modifiez la grille sans sauvegarder et fermez le classeur.
Le message 'Event BeforeClose' s'affiche et ensuite la question "Voulez-vous enregistrez ...", choisissez 'Cancel' pour annuler.
Fermez à nouveau le classeur et là le message 'Event BeforeClose' ne s'affiche plus.
Je travaille sur la version XLS2016 et je ne sais pas si cette anomalie a lieu sur toutes les versions. J'ai aussi testé sur la version XLS2003 et il n'y avait pas cette anomalie.
Je pense que c'est une sécurité qui a été ajoutée afin de ne pas pouvoir écrire un code qui empêche la fermeture d'Excel.
Voici comment on pouvait le faire sous Excel2003 :
Après tests, je n'ai pas réussi à trouver de solution en utilisant cet évènement pour contourner l'anomalie et m'assurer que ma procédure de sortie soit toujours exécutée. Après tests l'évènement 'BeforeSave' même s'il ne réagit pas sur le même évènement est une bonne alternative car ce qui compte c'est l'état enregistré au moment de la sortie de l'application.
De plus il existe aussi l'évènement 'AfterSave' si on veut rétablir le contexte en cas de sauvegarde sans sortir de l'application. Noté que toute modification effectuée par AfterSave n'est pas sauvé au moment de la fermeture de l'appli.
Dites-moi si vous aviez constaté cette spécificité et sur quelle version vous travaillez.
En écrivant une procédure de sortie dans une application je me suis rendu compte que l'évènement ne se déclenche pas dans un cas particulier ce qui entraîne une erreur à la réouverture de mon application.
Voici un petit bout de code à placer dans le module ThisWorkbook si vous souhaitez constater l'anomalie :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
MsgBox "Event BeforeClose"
End Sub
Modifiez la grille sans sauvegarder et fermez le classeur.
Le message 'Event BeforeClose' s'affiche et ensuite la question "Voulez-vous enregistrez ...", choisissez 'Cancel' pour annuler.
Fermez à nouveau le classeur et là le message 'Event BeforeClose' ne s'affiche plus.
Je travaille sur la version XLS2016 et je ne sais pas si cette anomalie a lieu sur toutes les versions. J'ai aussi testé sur la version XLS2003 et il n'y avait pas cette anomalie.
Je pense que c'est une sécurité qui a été ajoutée afin de ne pas pouvoir écrire un code qui empêche la fermeture d'Excel.
Voici comment on pouvait le faire sous Excel2003 :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Cancel = True
End Sub
Après tests, je n'ai pas réussi à trouver de solution en utilisant cet évènement pour contourner l'anomalie et m'assurer que ma procédure de sortie soit toujours exécutée. Après tests l'évènement 'BeforeSave' même s'il ne réagit pas sur le même évènement est une bonne alternative car ce qui compte c'est l'état enregistré au moment de la sortie de l'application.
De plus il existe aussi l'évènement 'AfterSave' si on veut rétablir le contexte en cas de sauvegarde sans sortir de l'application. Noté que toute modification effectuée par AfterSave n'est pas sauvé au moment de la fermeture de l'appli.
Dites-moi si vous aviez constaté cette spécificité et sur quelle version vous travaillez.