Gestion de la fermeture excel ... sans la demande d'enregistrement

Signaler
Messages postés
47
Date d'inscription
mardi 3 juillet 2007
Statut
Membre
Dernière intervention
26 décembre 2013
-
Messages postés
47
Date d'inscription
mardi 3 juillet 2007
Statut
Membre
Dernière intervention
26 décembre 2013
-
Bonjour à tous,

J'ai écrit la procédure suivante :

Private Sub workbook_BeforeClose(Cancel As Boolean)
Application.DisplayAlerts = False
 Dim msg, msg2, rep, rep2 As String
 
 
 msg = "Avez vous penser à enregistrer avant de quitter l'application ?"
 rep = MsgBox(msg, vbYesNo)
 
 If rep = vbYes Then
    Cancel = False
    ActiveWorkbook.Close False
 End If

 If rep = vbNo Then
    Cancel = True
    msg2 = "Si vous fermer sans enregistrer, tout votre travail sera perdu !"
    msg2 = msg2 & vbCrLf
    msg2 = msg2 & "Ok pour continuer."
    msg2 = msg2 & vbCrLf
    msg2 = msg2 & "Annuler pour retourner à la feuille et enregistrer via les boutons de XXXX."
    
    rep2 = MsgBox(msg2, vbOKCancel)
 
        If rep2 = vbYes Then
            ActiveWorkbook.Close False
        End If

        If rep2 = vbCancel Then
            Exit Sub
        End If
  Cancel = False
 End If
Application.DisplayAlerts = True
End Sub




Cette procédure a pour but , lorsque l'utilisateur tente de fermer (via la croix par exemple), d'éviter d'avoir les messages d'invitation d'enregistrement (et pour cause, je souhaite que les utilisateurs utilisent les boutons créés spécifiquement pour cela).
La précédure semble se dérouler correctement à ceci près qu'elle me propose 2 fois le premier message (Avez vous penser ...) et là je vois pas pourquoi ni comment résoudre cela.

Je recherche donc des solutions auprès de vous !

Merci pour votre aide .... et Bonne Année 2011!

A+

4 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
En plus simple et sans énormité grammaticale pour l'utilisateur:

"Vous êtes vous souvenIR d'enregistrer..."

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  If Me.Saved Then Exit Sub
  If vbYes = MsgBox("Fermer SANS enregistrer", vbYesNo) Then
    Me.Saved = True
    Exit Sub
  End If
  Cancel = True
End Sub


ciao...
BruNews, MVP VC++
Messages postés
47
Date d'inscription
mardi 3 juillet 2007
Statut
Membre
Dernière intervention
26 décembre 2013

effectivement ton code est bcp plus simple ... ici j'apprends tous les jours.

Une chose me soucie tout de même, la fin de ton code (Me.saved = true) fait que le fichier est enregistré.
Or moi je souhaite que les utilisateurs se servent expressement des boutons pour enregistrer.

Dans ce cas comment contourner ce probleme ?

Merci pour ton aide.

A+
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
NON, tu n'as meme pas testé.
me.saved est un flag, si != 0 alors Excel considere qu'il n'y a rien a enregistrer.
On le berne donc ainsi.

ciao...
BruNews, MVP VC++
Messages postés
47
Date d'inscription
mardi 3 juillet 2007
Statut
Membre
Dernière intervention
26 décembre 2013

ok ...
oui je n'ai pas testé car j'ai pris connaissance de ton message à l'instant ... En revanche, je tentais de comprendre le contenu... pour ne pas appliquer bêtement. Le coup du "flag" je ne connais pas ... faut que je me rencarde là dessus pour apprendre davantage.

je testerais donc ton code demain au boulot.
En tout cas, merci pour avoir pris de ton temps pour me répondre.
A+