Problème avec before close et before save
Bonjour à tous
voici mon problème, j'ai aussi posté ce message sur Excel download car je ne trouve pas la solution, merci pour votre aide
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
Bonjour,
Si je résume, votre objectif est simplement d'enregistrer le document sous un nom et répertoire bien défini (et connu d'avance, c'est à dire sans saisie/sélection de la part de l'utilisateur au moment d'enregistrer ?) ?
Un essai à tester :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Not ThisWorkbook.Saved Then
If MsgBox("Pour enregistrer cette simulation, cliquez OK !", vbOKOnly + vbInformation, "je vous informe") = vbAbort Then Exit Sub
With Sheets("Feuil1") 'Tout élément commençant par "." se rapporte à cette feuille
If .Range("D7") = "" Then 'Si D7 n'est pas vide
MsgBox "Vous devez préciser le nom du client !"
Cancel = True 'Annule la fermeture du classeur
Exit Sub 'Quitte la macro
Else
Application.EnableEvents = False 'Désactive les procédures évenement (pour éviter d'éxécuter ce code indéfiniment)
ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & .Range("D7") & "_" & Format(Date, "dd-mm-yyyy"), FileFormat:=52, CreateBackup:=True 'Sauvegarde
Application.EnableEvents = True 'Réactive les procédures évenement
End If
End With
End If
GestionErr:
MsgBox "L'enregistrement du classeur a échoué !"
Cancel = True 'Annule l'enregistrement du classeur
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
On Error GoTo GestionErr 'En cas d'erreur, VBA exécute une section spécifique de code (voir fin de macro)
SaveAsUI = False 'N'affiche pas la boite de dialogue "enregistrer sous"
With Sheets("Feuil1") 'Tout élément commençant par "." se rapporte à cette feuille
If .Range("D7") = "" Then 'Si D7 n'est pas vide
MsgBox "Vous devez préciser le nom du client !"
Cancel = True 'Annule l'enregistrement du classeur
Exit Sub 'Quitte la macro
Else
Application.EnableEvents = False 'Désactive les procédures évenement (pour éviter d'éxécuter ce code indéfiniment)
ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & .Range("D7") & "_" & Format(Date, "dd-mm-yyyy"), FileFormat:=52, CreateBackup:=True 'Sauvegarde
Application.EnableEvents = True 'Réactive les procédures évenement
End If
End With
Exit Sub
GestionErr:
MsgBox "L'enregistrement du classeur a échoué !"
Cancel = True 'Annule l'enregistrement du classeur
End SubBonjour,
Votre demande ne risque-t-elle pas de tourner en boucle ?
- Utilisation croix rouge
- Before close ---> obliger utilisateur a enregistrer sous.
Une fois que l'utilsateur aura enregistré sous ... il va à nouveau réutiliser la croix rouge pour quitter et
votre code va à nouveau lui redemander la même chose
Bonjour,
Votre demande ne risque-t-elle pas de tourner en boucle ?
- Utilisation croix rouge
- Before close ---> obliger utilisateur a enregistrer sous.
Une fois que l'utilsateur aura enregistré sous ... il va à nouveau réutiliser la croix rouge pour quitter et
votre code va à nouveau lui redemander la même chose
Bonjour Xmenpl,
S'il n'y a pas de modification entre l'enregistrement et la fermeture, le code BeforeClose n'affichera pas la MsgBox.
Bonjour à tous er encore merci de m'aider
Pedro22 j'ai testé mais cela n'est pas exactement ce que je soutaite :
Quand je clique sur la croix rouge d'excel, un msgbox s'affiche disant " vous devez passer par enregistrer sous uniquement", avec un bouton pour annuler la procédure d'enregistrement "beforesave" et de fermeture et que l'on revienne sur la feuille, qu'il y ait ou pas eu de modification
En fait la croix rouge devient simplement une information sans conséquence, mais annule le beforesave
Quand a Before save (clic sur disquette ou fichier, enregister sous) declenche la procédure que j'ai ecrite et qui fonctionne
Peut être qu'en utilisant before save sans before close on peut combiner tout ca, mais je n'y arrive pas
un grand merci encore pour votre aide précieuse
Chupito66
Bonjour à tous er encore merci de m'aider
Pedro22 j'ai testé mais cela n'est pas exactement ce que je soutaite :
Quand je clique sur la croix rouge d'excel, un msgbox s'affiche disant " vous devez passer par enregistrer sous uniquement", avec un bouton pour annuler la procédure d'enregistrement "beforesave" et de fermeture et que l'on revienne sur la feuille, qu'il y ait ou pas eu de modification
En fait la croix rouge devient simplement une information sans conséquence, mais annule le beforesave
Quand a Before save (clic sur disquette ou fichier, enregister sous) declenche la procédure que j'ai ecrite et qui fonctionne
Peut être qu'en utilisant before save sans before close on peut combiner tout ca, mais je n'y arrive pas
un grand merci encore pour votre aide précieuse
Chupito66
Désolé, mais je n'ai rien compris...
La procédure BeforeClose ne déclenche pas la procédure BeforeSave, sauf si vous enregistrez le fichier à la fermeture...
Re bonjour pour before close je crois que j'ai trouvé
Private Sub Workbook_BeforeClose(Cancel As Boolean)
MsgBox "Vous devez passez par enregistrer sous !"
Cancel = True
End Sub
Mais je souhaite qu'il annule aussi before save, avez vous une idée ?
Mais le problème c'est que je ne peux plus fermer le classeur
Re bonjour pour before close je crois que j'ai trouvé
Private Sub Workbook_BeforeClose(Cancel As Boolean)
MsgBox "Vous devez passez par enregistrer sous !"
Cancel = True
End Sub
Mais je souhaite qu'il annule aussi before save, avez vous une idée ?
Je ne comprend pas l'utilité de ce que vous avez écrit : vous ne pourrez plus fermer le fichier...
Que voulez vous annuler dans BeforeSave ? L'enregistrement ?
Bien vu , je viens de m'apercevoir que je ne peux plus fermer le classeur
Pedro, en testant votre Code,
Quand je clique sur la croix rouge :
Si Cellule D7 est vide, il me le signale et annule procédure, donc c'est bon
Si Cellule D7 est remplie, il me demande si je veux enregistrer mais me dit que l'enregistrement a échoué
SI je clique la disquette ou enregistrer ou enregistrer sous, il me signale "erreur de compilation etiquette non définie"
Rappel : in ne faut pas que l'on puisse passer par enregister, mais uniquement par enregistrer sous
un grand merci
Bien vu , je viens de m'apercevoir que je ne peux plus fermer le classeur
Pedro, en testant votre Code,
Quand je clique sur la croix rouge :
Si Cellule D7 est vide, il me le signale et annule procédure, donc c'est bon
Si Cellule D7 est remplie, il me demande si je veux enregistrer mais me dit que l'enregistrement a échoué
SI je clique la disquette ou enregistrer ou enregistrer sous, il me signale "erreur de compilation etiquette non définie"
Rappel : in ne faut pas que l'on puisse passer par enregister, mais uniquement par enregistrer sous
un grand merci
La procédure événement "BeforeSave" que j'ai proposé plus haut annule l'enregistrement classique du Classeur (ni enregistrer, ni enregistrer sous), et impose l'enregistrement sous un nom et répertoire défini par la formule suivante :
ThisWorkbook.Path & "\" & .Range("D7") & "_" & Format(Date, "DD-MM-YYYY")Ce qui correspond à :
(Répertoire dans lequel se trouve déjà le fichier)\(contenu cellule D7 de la feuille 1)_(Date du jour)
Pour l'erreur je ne vois pas à quoi elle correspond ni son origine. C'est peut-être le contenu de D7 qui pose pb ?
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
Bien vu , je viens de m'apercevoir que je ne peux plus fermer le classeur
Pedro, en testant votre Code,
Quand je clique sur la croix rouge :
Si Cellule D7 est vide, il me le signale et annule procédure, donc c'est bon
Si Cellule D7 est remplie, il me demande si je veux enregistrer mais me dit que l'enregistrement a échoué
SI je clique la disquette ou enregistrer ou enregistrer sous, il me signale "erreur de compilation etiquette non définie"
Rappel : in ne faut pas que l'on puisse passer par enregister, mais uniquement par enregistrer sous
un grand merci
La procédure événement "BeforeSave" que j'ai proposé plus haut annule l'enregistrement classique du Classeur (ni enregistrer, ni enregistrer sous), et impose l'enregistrement sous un nom et répertoire défini par la formule suivante :
ThisWorkbook.Path & "\" & .Range("D7") & "_" & Format(Date, "DD-MM-YYYY")Ce qui correspond à :
(Répertoire dans lequel se trouve déjà le fichier)\(contenu cellule D7 de la feuille 1)_(Date du jour)
Pour l'erreur je ne vois pas à quoi elle correspond ni son origine. C'est peut-être le contenu de D7 qui pose pb ?
Bonjour,
Lorsque je clic sur la croix rouge, il enregsitre bien le classeur modifié mais que l'enregistrement à échoué, bizarre !
Lorsque je clique sur la disquette pour enregistrer, le classeur est bien enregistré ou il se doit, l'original se ferme et le classeur modifié s'affiche mais excel se bloque , je dois le fermer avec gestionnaire de tâche, avez vous une idée?
merci
Bonjour à tous
je vais opter pour une autre solution, à savoir:
Le grand écran grâce à LOUREED (command bar sont toutes masquées) avec 2 command bouton sur la feuille 1:
un pour sauvegarder avec condition/chemin pour enregistrer sous/nom de cellule, l'original se ferme et le nouveau reste affiché et l'autre pour fermer le classeur sans enregistrer
En tous cas, merci à tous pour votre temps