Boite de dialogue perso Quitter + Enregistrer le fichier + Annuler

thom02

XLDnaute Junior
Bonjour, j’aimerais que lorsque je quitte mon fichier, une boite de dialogue s’ouvre pour me demander si j’ai bien enregistrer accompagnée de 3 choix.
Oui -> Quitter le fichier
Non -> Enregistrer le fichier selon
Annuler -> Retourner au document.
J’ai trouver comment faire mais en chipotant et je suis certain qu’il y a un code plus « propre » et plus court. De plus, quand je clic annuler la boite de dialogue apparaît à nouveau et je ne comprends pas pourquoi.
Merci pour votre aide.


' Message box lorsque l'on quitte
Sub QuitterDocument()

Dim Reponse As VbMsgBoxResult
Dim Cancel As Boolean
Reponse = MsgBox("Avez-Vous Bien Enregistré Votre Document?" & vbCrLf & "« Oui » Pour Quitter" & vbCrLf & "« Non » Pour Enregistrer", vbYesNoCancel + vbQuestion, "Boite d'Enregistrement")

'Procédure si click sur Oui
If Reponse = vbYes Then
ThisWorkbook.Close True

End If

If Reponse = vbNo Then 'Alors il faut enregistrer
ActiveWorkbook.SaveAs AdrEnregistr

End If
If Reponse = vbCancel Then
ThisWorkbook.Close False
End If

End Sub


'Commande qui permet d'enregistrer à la fermeture du document
Sub Workbook_BeforeClose(Cancel As Boolean)

Call QuitterDocument
'ThisWorkbook.Close False 'Annule l'enregistrement à la sortie

End Sub
 

fhoest

XLDnaute Accro
Re : Boite de dialogue perso Quitter + Enregistrer le fichier + Annuler

Bonsoir,
pour un code plus court sur avez vous pensez...?
pour moi c'est d'enregistrer et de fermer sans faire la demande par msgbox
Code:
with activeworkbook
.save
.close
end with
comme ça même pas besoins de penser!!
c'est mon avis voir si il est partagé je ne sait pas.
A+
 

kjin

XLDnaute Barbatruc
Re : Boite de dialogue perso Quitter + Enregistrer le fichier + Annuler

Bonsoir,
En gros tu souhaites recréer la boite auto d'Excel...mais en moins bien ?!
Parce qu'à moins que tu ne disposes de la version de 1975 (j'exagère toujours...), Excel affiche automatiquement cette boite si tu à modifier le fichier durant la session
A+
kjin
 

thom02

XLDnaute Junior
Re : Boite de dialogue perso Quitter + Enregistrer le fichier + Annuler

Bonjour,

Merci pour vos réponses.
En effet j'aimerais une boite perso. Ce que j'ai oublié de préciser est que je veux que l'enregistrement se fasse suivant une format particulier que je vais rechercher à un endroit. J'ai enlevé cette ligne de code mais là est la différence.

Je reformule ma question, est il possible d'assigner une action aux réponses de la boite par défait de excel?

Merci pour vos réponses.
 

thom02

XLDnaute Junior
Re : Boite de dialogue perso Quitter + Enregistrer le fichier + Annuler

Bonjour,
Apparemment je n’ai pas été clair, alors je reformule.
A la sortie du document je souhaiterais une boite Perso (dont je puisse personnaliser le texte et l’en tête) avec les choix suivants
« Enregistrer les modifications ? »
Oui -> Enregistrer sous dans un dossier spécifique avec un nom spécifique (pour cela j’ai le code)
Non-> Quitter
Annuler-> Retour au document.

Un grand merci
 

fhoest

XLDnaute Accro
Re : Boite de dialogue perso Quitter + Enregistrer le fichier + Annuler

re;re
Essaie ceci:
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim reponse As Integer
Cancel = False
reponse = MsgBox("Enregistrer les modifications ?", vbYesNoCancel)
If reponse = 6 Then
Application.GetSaveAsFilename
Else: Cancel = True
End If
End Sub
A bientot.
 

tototiti2008

XLDnaute Barbatruc
Re : Boite de dialogue perso Quitter + Enregistrer le fichier + Annuler

Bonjour thom, Bonjour kjin, Bonjour fhoest, Bonjour ricard,

) Pour quand je clic Annuler la boite réapparait et je dois à nouveau cliquer sur annuler ?

Parce que ce n'est pas ta boite de dialogue mais celle d'Excel qui apparait toujours quand on ferme un fichier sans l'enregistrer ?

Et si c'est ça, alors la question de base sur "refaire ce qui existe déja" reste entière...
 

thom02

XLDnaute Junior
Re : Boite de dialogue perso Quitter + Enregistrer le fichier + Annuler

re;re
Essaie ceci:
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim reponse As Integer
Cancel = False
reponse = MsgBox("Enregistrer les modifications ?", vbYesNoCancel)
If reponse = 6 Then
Application.GetSaveAsFilename
Else: Cancel = True
End If
End Sub
A bientot.

Merci pour ta proposition, mais:
1) quand je clique NON il ne quitte pas le document...
2) Quand je clique Oui pour enregistrer et que finalement je décide d'annuler il me crée un fichier FALSE

snif :)
 

Dull

XLDnaute Barbatruc
Re : Boite de dialogue perso Quitter + Enregistrer le fichier + Annuler

Salut thom, kjin, fhoest:), ricard, Tototiti:), le Forum

...Et si c'est ça, alors la question de base sur "refaire ce qui existe déja" reste entière...
:D:D

Néanmoins un test sur une idée géniale de Didier Mdf :) grâce son célèbre Tuto sur les MsgBox ...aconsommersansmodérations;)

Fichier à enregistrer sur le DD au préalable

A tester

bonne Journée
 

Pièces jointes

  • thom02 V2.zip
    37.3 KB · Affichages: 63
Dernière édition:

fhoest

XLDnaute Accro
Re : Boite de dialogue perso Quitter + Enregistrer le fichier + Annuler

Merci pour ta proposition, mais:
1) quand je clique NON il ne quitte pas le document...
2) Quand je clique Oui pour enregistrer et que finalement je décide d'annuler il me crée un fichier FALSE

snif :)

Pour le non il suffit de changer la condition
Code:
If reponse = 6 Then
Application.GetSaveAsFilename
Else: Cancel = True
End If
remplacé par
Code:
Select Case reponse
Case Is = vbYes
Application.GetSaveAsFilename
Case Is = vbNo
Exit Sub
Case Is = vbCancel
Cancel = True
End Select
et pour le fichier false je ne sais pas il faut juste savoir ce que l'on veut avant de faire un choix
cependant il serai plus facile de connaitre le format de fichier que tu veux creer lors de cette action tu pourrais alors passer par le biais d'une inputbox pour le nom du fichier et lui imposer l'extension par
Code:
Dim variableinputbox As String
variableinputbox = InputBox("entrez le nom du fichier")
activeworkbook.SaveAs(variableinputbox,fileformat:=...)
A+
 

thom02

XLDnaute Junior
Re : Boite de dialogue perso Quitter + Enregistrer le fichier + Annuler

et pour le fichier false je ne sais pas il faut juste savoir ce que l'on veut avant de faire un choix
cependant il serai plus facile de connaitre le format de fichier que tu veux creer lors de cette action tu pourrais alors passer par le biais d'une inputbox pour le nom du fichier et lui imposer l'extension par
Code:
Dim variableinputbox As String
variableinputbox = InputBox("entrez le nom du fichier")
activeworkbook.SaveAs(variableinputbox,fileformat:=...)
A+

Un tout grand merci pour tes lumières mon codes s'améliore à grands pas.
J'aimerais avoir un fichier qui prenne en charge les macros soit xlsm..

Voici la structure que j'utilise...

Merci pour ton aide
Code:
 Dim NomDuFicher, Emplacement as String

NomDuFicher = Feuil7.Range("D4").Value
Emplacement = "J:\XXXXXX"

AdrEnregistr = Application.GetSaveAsFilename(InitialFileName:= Emplacement _ & NomDuFicher, Filefilter:="Fichier Excel (*.xlsm), *.xlsm")
    ActiveWorkbook.SaveAs AdrEnregistr

Est ce Correct?
 
Dernière édition:

fhoest

XLDnaute Accro
Re : Boite de dialogue perso Quitter + Enregistrer le fichier + Annuler

Bonjour,
voici ton code remodelé
Code:
Sub test()
Dim NomDuFicher, Emplacement As String
NomDuFicher = Feuil7.Range("D4").Value
Emplacement = "c:\XXXXXX"
'AdrEnregistr = Application.GetSaveAsFilename(InitialFileName:=Emplacement & "_" & NomDuFicher, Filefilter:="Fichier Excel (*.xlsm), *.xlsm")
ActiveWorkbook.SaveAs Emplacement & "_" & NomDuFicher & ".xlsm", FileFormat:= _
xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub
A bientôt.:D
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 146
Membres
103 130
dernier inscrit
FRCRUNGR