XL 2016 Evénement BeforeSave plutôt que BeforeClose

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 :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    MsgBox "Event BeforeClose"
End Sub
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 :
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.
 

Lu76Fer

XLDnaute Occasionnel
Ce qui est encore plus bizarre, et qui me semble bien montrer que c'est un bug, c'est que si tu passes par les menus au lieu de cliquer sur la croix, la MsgBox s'affiche à tous les coups.
Bonjour TooFatBoy,
Perso je penchais plus sur une sécurité car il est étonnant qu'un bug apparaisse suite à la montée de version sur une partie de l'algorithme qui ne demandais pas d'évolution.
Sur la version 2003 si tu utilises ce code cela t'empêche de fermer Excel :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Cancel = True
End Sub
Je suppose personnellement qu'ils ont voulus laisser une façon simple (la croix) de fermer Excel dans ce cas. Sinon c'est galère pour un utilisateur qui ne connait pas le code.
Mais du coup, pour ma part, je pense que cela rend cette fonction événement obsolète et présente uniquement par soucis de compatibilité. Dommage que cela ne soit pas documenté sur le site officiel.
 

Lu76Fer

XLDnaute Occasionnel
Hello,
Bonjour les amis TooFatBoy, patricktoulon, @Dranreb , Lu76Fer,
J'espère que papa Noël vous a apporté de beaux 🎁.
Excel 365 64 bits => le message à tous les coups ; croix ou menu c'est pareil, comme aurait chanté Nicoletta ;).
Bonne journée à tous.
Bonjour Gégé-45550 !
Merci pour l'info, oui papa Noël est passé 🎅. J'aurai la même remarque que j'ai faite à @Dranreb, il faut que le test soit fait avec un seul classeur ouvert sinon cela fonctionne normalement.
Est ce le cas ?
 

patricktoulon

XLDnaute Barbatruc
re
au regard des réponses
seul 2016 semble avoir ce problème
ce n'est donc plus un soucis de securité mais un bel et bien un bug sur 2016

après il m'est revenu en mémoire des bibes de discussion passé sur l'autre monde Excel il y a quelque années
et que dans certaine circonstance le jeu avec before close et before save demandait que le saveUI soit à false ou true je sais plus

a observer ;)
 

Discussions similaires

Statistiques des forums

Discussions
312 209
Messages
2 086 267
Membres
103 168
dernier inscrit
isidore33