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 Sub

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,

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.

S'il n'y a pas de modification entre l'enregistrement et la fermeture, le code BeforeClose n'affichera pas la MsgBox.

effectivement ... pas bien réveillé ce matin.

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

Rechercher des sujets similaires à "probleme before close save"