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

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 ?
 

mutzik

XLDnaute Barbatruc
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
 

job75

XLDnaute Barbatruc
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+
 

Dranreb

XLDnaute Barbatruc
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.
 

Pierrot93

XLDnaute Barbatruc
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
@+
"
 

Dranreb

XLDnaute Barbatruc
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:

Discussions similaires

Statistiques des forums

Discussions
312 161
Messages
2 085 853
Membres
103 005
dernier inscrit
gilles.hery