[VBA] déclencher une macro à la fermeture DEFINITIVE du classeur

  • Initiateur de la discussion Initiateur de la discussion F22Raptor
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

F22Raptor

XLDnaute Impliqué
Hello
Je voudrais effectuer une série d'actions à la fermeture du classeur.

Problème : si l'utilisateur fait "fichier -> fermer", ça exécute ces actions (valeurs dans des cellules), puis la boîte "voulez-vous enregistrer les modifs" apparaît. S'il répond ANNULER, le classeur ne se ferme pas, mais mes actions ont été effectuées !

Je voudrais qu'elles ne s'exécutent que si le classeur se ferme réellement.
Dans la liste Les évènements du module objet ThisWorkbook, dans Excel je ne trouve pas mon bonheur ... Une idée ?
 
Re : [VBA] déclencher une macro à la fermeture DEFINITIVE du classeur

bonjour,

dans beforeclose, tu effectues tes actions, tu sauvegarde automatiquement et tu fermes ton classeur
et puis voilà

arfff, salut Pierrot, comme souvent sur la même longueur d'onde
 
Re : [VBA] déclencher une macro à la fermeture DEFINITIVE du classeur

Bonjour à tous,

en effet, Mutzik, la soluce pourrait être de gérer moi-même la validation de la fermeture ! 🙂

C'est même la seule solution, il ne faut pas laisser Excel afficher le message pour l'enregistrement, c'est à la macro d'éditer l'invite et de décider de l'action en fonction de la réponse.

A+
 
Re : [VBA] déclencher une macro à la fermeture DEFINITIVE du classeur

Bonjour.

Une tentative dans cet esprit :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Rép As VbMsgBoxResult
If Not Me.Saved Then Rép = MsgBox("Voulez vous enregistrer les modifications ?", _
   vbYesNoCancel + vbQuestion, Me.Name) Else Rép = vbNo
Select Case Rép
   Case vbCancel: Cancel = True: Exit Sub
   Case vbNo: Me.Saved = True: Exit Sub
   End Select
LesActions
Cancel = True
Application.EnableEvents = False
Me.Close SaveChanges:=True
Application.EnableEvents = True
End Sub
À tester.
 
Re : [VBA] déclencher une macro à la fermeture DEFINITIVE du classeur

Re,

bonjour Bernard,

petite remarque Bernard, il me semble que l'instruction "Application.EnableEvents = True" ne va pas être exécutée dans ton code intervenant après la fermeture du classeur...

bon après midi
@+
"
 
Re : [VBA] déclencher une macro à la fermeture DEFINITIVE du classeur

C'est à tester. Je ne suis pas sûr que ce soit le cas, ni du contraire.
Si EnableEvent reste à False il faut faire autrement :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Static DéjàEngagé As Boolean
Dim Rép As VbMsgBoxResult
If DéjàEngagé Then Exit Sub
DéjàEngagé = True
If Not Me.Saved Then Rép = MsgBox("Voulez vous enregistrer les modifications ?", _
   vbYesNoCancel + vbQuestion, Me.Name) Else Rép = vbNo
Select Case Rép
   Case vbCancel: Cancel = True: Exit Sub
   Case vbNo: Me.Saved = True: Exit Sub
   End Select
LesActions
Cancel = True
Me.Close SaveChanges:=True
End Sub
Ou peut être même que c'est inutile d'éviter l'auto réexécution
Ou bien faire un Save à la place. Mon exemple de code avait surtout pour but de montrer les propriété Saved et le paramètre SaveChanges de la méthode Close qui peuvent aider à écrire ce genre de choses. Mais ça a toujours été le bordel, surtout si on veut aussi traiter l'évènement Workbook_BeforeSave, pour arriver à quelque chose qui tienne la route sans se mordre la queue.
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour