[VBA] Before Close

F22Raptor

XLDnaute Impliqué
Hello,
Dans un fichier principal, j'ai un Workbook / Before Close qui a pour mission de fermer un autre fichier.
Ca marche parfaitement : il me ferme l'autre fichier, et m'affiche "Voulez-vous enregistrer les chgts" du principal.
Je clique sur ENREGISTRER ou NE PAS ENREGISTRER, et tout est fermé.

MAIS :
Si je change d'avis et que je clique sur ANNULER, c'est trop tard ! L'autre fichier est déjà fermé !

Y a-t-il moyen de ne lancer cette procédure de Before Close, uniquement une fois qu'on ne peut plus arrêter la fermeture du fichier principal ?

Merci ! :)
 

F22Raptor

XLDnaute Impliqué
Re : [VBA] Before Close

Hello,
J'ai un peu avancé là-dessus : sur le fichier joint, quand on le ferme, je pilote une MsgBox.
Ca marche quand on confirme en enregistrant les changements, on quand on confirme SANS enregistrer.
Par contre, je n'arrive pas à gérer le ANNULER, pour finalement arrêter la fermeture : la boîte Excel de fermeture arrive toujours à l'écran.
Une idée pour mettre fin à la procédure de fermeture (=ANNULER) sans voir apparaître la boîte Excel ?


VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    
    
    Dim Answr As Byte
    
    Answr = MsgBox("Voulez-vous enregistrer les chgts ?", vbYesNoCancel)
    
    
    Select Case Answr
        
        Case vbYes
            ThisWorkbook.Save
            
        Case vbNo
            ThisWorkbook.Saved = True
            
        Case Else
            'Ne rien faire et arrêter la procédure de fermeture

    End Select


End Sub
 

Pièces jointes

  • Test Fermeture2.xls
    33.5 KB · Affichages: 47
Dernière édition:

F22Raptor

XLDnaute Impliqué
Re : [VBA] Before Close

Argh ! Ca fonctionne sur mon PC perso sur Excel 2003, mais quand je transfère le fichier sur mon PC bureau sous Excel 2010, le message "Voulez-vous enregistrer les modifs ..." revient quand on clique sur ANNULER :(

Cancel=True est bien compatible avec 2010 ?
 

job75

XLDnaute Barbatruc
Re : [VBA] Before Close

Bonjour F22Raptor, Bernard,

Puisque vous devez fermer un "autre fichier" :

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Not Me.Saved Then
  Dim Answr As Byte
  Answr = MsgBox("Voulez-vous enregistrer les modifications de '" & Me.Name & "' ?", vbYesNoCancel)
  Select Case Answr
    Case vbYes: Me.Save
    Case vbNo: Me.Saved = True
    Case Else: Cancel = True: Exit Sub
  End Select
End If
On Error Resume Next 'si l'autre fichier n'a pas été ouvert
With Workbooks("toto.xls") 'nom à adapter
  If Not .Saved Then .Save 'enregistrement
  .Close 'fermeture
End With
End Sub
A+
 

F22Raptor

XLDnaute Impliqué
Re : [VBA] Before Close

Hello Job,
Mon problème se transforme en un Cancel=True qui ne fonctionne pas sous mon Excel 2010 du bureau.

J'ai créé un fichier hyper simple, avec simplement :
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)

    MsgBox "toto"
    Cancel = True

End Sub

Quand j'essaye de le fermer sur 2003, il affiche la box, et ne se ferme pas.
C'est le comportement attendu

Sur 2010 : il affiche la box, et se ferme !!!!!! Autrement dit, la procédure ne tient pas compte du Cancel=True !
:confused:
 

F22Raptor

XLDnaute Impliqué
Re : [VBA] Before Close

En attendant, je m'en tire plus ou moins en remplaçant le Cancel=True par un SendKeys "{ESC}" qui supprime la boîte d'enregistrement.

Ca marche dans deux cas sur trois ... :(

Bizarre tout de même ce Cancel=True qui marche sur 2003 et pas 2010 ...
Je suis en connexion à distance par Citrix à mon bureau. Je testerai lundi à mon retour en situation "normale"
 

Discussions similaires

Statistiques des forums

Discussions
312 679
Messages
2 090 846
Membres
104 677
dernier inscrit
soufiane12