Avertissement avant de quitter Excel

Bonjour,

J'ai la condition suivante qui s'exécute avant d'enregistrer

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

 If Worksheets("Validation").Range("A1").Value > 0 Then
   MsgBox "Vous n'avez pas complété tous les champs requis. Vous devez catégoriser chacun des titres d'emplois en veille ou requis et compléter la section d'identification."
   Cancel = True
   Else
   Cancel = False
  End If
  End Sub

Par contre, si l'utilisateur clique sur le "x" pour quitter Excel, on lui demande d'enregistrer, s'il dit "Oui" même si ce message apparait, Excel se ferme et il perd ses données!

Est-ce que vous avez une solution à ce problème frustrant ?

Merci!

Bonjour Catherine,

Tu peux créer une macro Private Sub workbook_beforeclose et mettre le même code dedans.

Cdlt,

Bonjour,

capture d ecran 2020 10 22 121830

J'ai ajouté le code dans la procédure que tu m'as mentionné. Par contre, j'obtiens ce message

Est-ce que je dois ajouter autre chose ?

Merci!

Bonsoir,

L'évènement ne comporte par tous ces paramètres, juste : Private Sub Workbook_BeforeClose(Cancel As Boolean)

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  If Worksheets("Validation").Range("A1").Value  0 Then
    MsgBox "Vous n'avez pas complété tous les champs requis. Vous devez catégoriser chacun des titres d'emplois en veille ou requis et compléter la section d'identification."
    Cancel = True
  Else
    Cancel = False
  End If
End Sub

@+

Désolé, j'aurais dû préciser mais en fait cette macro s'obtient sur le module thisworkbook en sélectionnant dans la liste en haut à gauche Workbook puis dans la liste en haut à droite beforeclose.

Private Sub Workbook_BeforeClose(Cancel As Boolean)

If Worksheets("Validation").Range("A1").Value > 0 Then
    Cancel = True
    MsgBox "Vous n'avez pas complété tous les champs requis. Vous devez catégoriser chacun des titres d'emplois en veille ou requis et compléter la section d'identification."
End If

End Sub

Et il n'y a pas besoin du else car cancel est sur False d'office.

Edit : Salut BrunoM45

Cdlt,

capture d ecran 2020 10 22 182208

Merci, ça fonctionne!

Je me demandais, est-ce qu'on peut personnaliser les bouton vbYes et vbNo au lieu que ce soit écrit Oui et Non

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim answer As Integer

answer = MsgBox("Voulez-vous quitter le fichier sans l'enregistrer ?", vbYesNo + vbQuestion, "Quitter")
If answer = vbYes Then
    Cancel = False
 ElseIf Worksheets("Validation").Range("A1").Value > 0 Then
MsgBox "Vous n'avez pas complété tous les champs requis avec des astérisques (*) rouges. Vous devez catégoriser chacun des titres d'emplois en veille ou requis et compléter la section d'identification avant d'enregistrer le fichier."
   Cancel = True
End If

End Sub

De plus, si je dis "Oui", il me repose la question suivante (voir l'image plus haut):

Pourquoi ?

Merci

Bonjour,

Oui, c'est possible mais je ne l'ai jamais fait. Voici un lien grâce auquel vous trouverez des éléments de réponse :

http://www.mdf-xlpages.com/modules/publisher/item.php?itemid=42

Pour éviter le message, essayez :

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim answer As Integer

answer = MsgBox("Voulez-vous quitter le fichier sans l'enregistrer ?", vbYesNo + vbQuestion, "Quitter")

If not answer = vbYes Then
    Cancel = True
Else
    application.displayalerts = False
    if Worksheets("Validation").Range("A1").Value > 0 Then
        Cancel = True
        MsgBox "Vous n'avez pas complété tous les champs requis avec des astérisques (*) rouges. Vous devez catégoriser chacun des titres d'emplois en veille ou requis et compléter la section d'identification avant d'enregistrer le fichier."
    end if
End If

End Sub

Il faudra peut-être penser (je ne sais pas si c'est nécessaire mais ça ne coûte pas grand-chose) à avoir dans ce même module la macro suivante :

private sub workbook_open()

application.displayalerts = true

end sub

Cdlt,

Rechercher des sujets similaires à "avertissement quitter"