Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 problème avec before close et beforesave

pat66

XLDnaute Impliqué
Bonsoir à tous
voici mon probème,

Private Sub Workbook_BeforeClose = Cliquer sur la croix rouge, elle ne doit pas fermer pas le fichier, mais doit m'informer avec unmsgbox ANNULER uniquement pour forcer d'enregistrer sous
Le problème c'est que quand je clique sur l'un ou l'autre choix, Before save me propose quand même d'enregistrer sous ou annuler

Private Sub Workbook_BeforeSave =
Oblige d'enregister sous avec la disquette ou fichier, avec un nom de cellule, chemin, date comme vous le voyez et que le fichier original se ferme et le nouveau reste afficher

Mon Souhait:
cliquer sur la croix rouge , msgbox "vous devez passer "par enregistrer sous" donc avec (VBCancel uniquement) et la procédure de fermeture ou d'enregistrement s'annule même celle de Before save

peut être que l'on peut tout combiner before save ?

je vous remercie pour votre aide

Patrick

Private Sub Workbook_BeforeClose(Cancel As Boolean) ( clic sur croix rouge)
Dim Sauver As Boolean
Sauver = ThisWorkbook.Saved
If Sauver = False Then
If MsgBox("Pour enregistrer cette simulation, cliquez OK !", vbOKOnly + vbInformation, "je vous informe") = vbAbort Then Exit Sub
End If
End Sub



Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) (enregistrer sous)
Application.EnableEvents = False

If Sheets("Feuil1").Range("D7") = "" Then
If MsgBox("Vous devez préciser le nom du client !", vbOKOnly + vbInformation, "Je vous informe") = vbAbort Then Exit Sub
Else
ChDir ThisWorkbook.Path
ActiveWorkbook.SaveAs filename:=Sheets("Feuil1").Range("D7") & "_" & Format(Now, "dd-mm-yyyy"), FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=True
End If

Application.EnableEvents = True
End Sub
 

Eric C

XLDnaute Barbatruc
Bonsoir le forum
Bonsoir Patrick

Peut être en essayant ce code :
VB:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
MsgBox "Veuillez enregistrer le fichier!!!"
Application.Dialogs(xlDialogSaveAs).Show ("Mon Fichier")  'A adapter
Unload Me
End If
ThisWorkbook.Close
End Sub
Bonne soirée à toutes & à tous
@+ Eric c
 

Eric C

XLDnaute Barbatruc
Re le fil,
@mapomme : tu as raison, je me suis planté sur toute la ligne, il s'agit de la fermeture d'EXCEL. Je me suis dépêché de répondre alors que je n'avais pas lu la question en entier.... et que mon fils venait d'arriver à la maison.... Méa culpa.
@+ Eric c
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re @patricklopez66,

Si j'ai bien compris :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
   Application.DisplayAlerts = False
   If Not ThisWorkbook.Saved Then MsgBox "Vous devez d'abord 'Enregister sous...'", vbCritical: Cancel = True: Exit Sub
End Sub
 

Pièces jointes

  • patricklopez66- Ne pas quitter si... v1.xlsm
    15.6 KB · Affichages: 16

pat66

XLDnaute Impliqué
Bonjour Ma Pomme

d'abord un grand merci pour ton aide

Before close : C'est exactement cela, sauf que dans tous les cas (fichier modifié ou pas) Before close ne ferme jamais le fichier et affiche le msgbox
vbCritical: Cancel

Before save crée bien le dossier, sauf que excel beuuuge, je dois forcer sa fermeture !!!!

La fonction de before save est comme décris dans la procédure plus haut, enregistrer sous, afficher le nouveau fichier et fermer l'ancien afin qu'il ne soit pas modifié

merci encore pour ton aide si précieuse

Patrick
 

pat66

XLDnaute Impliqué
Bonsoir
j'avoue que mon discours est un peu confus alors peut être plus simplement est il possible, en cliquant sur la croix rouge d'excel que cela propose d'enregistrer le classeur modifié avec le chemin indiqué plus haut avec un message box du style "voulez vous enregistrer ce fichier avec le contenu de la cellule D7 oui ou annuler

Clic sur croix rouge
Si la cellule D7 est vide, message box " veuillez remplir la cellule et annule la procédure" pour pouvoir remplir D7
SI D7 est remplie, enregistre le classeur avec le chemin avec un message box " votre classeur est enregistrer, ferme l'original et le modifié reste afficher

Mais que dans tous les cas, on ne puisse plus passer par enregistrer afin de ne pas modifier l'original

merci
 

pat66

XLDnaute Impliqué


Bonjour

Before fore, annule bien la fermeture
mais peut on l'enregistrer uniquement avec beforesaveAs avec le chemin suivant :
ChDir ThisWorkbook.Path
ActiveWorkbook.SaveAs filename:=Sheets("Feuil1").Range("D7") & "_" & Format(Now, "dd-mm-yyyy"), FileFormat:=xlOpenXMLWorkbookMacroEnabled,

et peut on afficher fichier modifié et le fermer et fermer l' original

un grand merci
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil,

Mais que dans tous les cas, on ne puisse plus passer par enregistrer afin de ne pas modifier l'original
Le plus simple ne serait-il pas d'utiliser un modèle Excel ?
Ainsi l'original ne sera pas modifié.
 

pat66

XLDnaute Impliqué


Bonjour Staple,

pourriez vous m'en dire plus sur la procédure afin que le classeur devienne "Modèle"

merci
 

pat66

XLDnaute Impliqué
Oups javais pas vu le lien, merci je regarde
 

pat66

XLDnaute Impliqué
J'ai regardé pour passer en Modèle, intéressant, bien que je n'ai plus la possibilité d'afficher en grand écran et que j'aimerai quand même définir avec "saveas" uniquement le nom du classeur (dans cellule) , la date, dans même répertoire que l'original peut être avec un command bouton ? que le classeur modifié s'affiche et que le modèle se ferme
est ce possible, si oui? pourriez vous m'aider à écrire ces actions, merci
 

Staple1600

XLDnaute Barbatruc
Re

Si la piste du modèle est retenue alors petite précision (qui n'est pas indiquée sur le lien précédemment soumis)
Créer un classeur basé sur le modèle
Vous pouvez créer un nouveau classeur avec le modèle que vous avez créé précédemment.
Le modèle peut-être un modèle contenant du VBA
Modèle (code) .xltm
Format de fichier prenant en charge les macros pour un modèle Excel Excel 2010 et Excel 2007. Stocke les codes macro VBA ou les feuilles de macros Excel 4.0 (.xlm).

Autre précision
Si on utilise un modèle*, celui-ci n'est pas ouvert, donc on n'aura pas à le fermer

(*: au sens de modèle Excel)
 

Discussions similaires

Réponses
2
Affichages
437
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…