J'ai un bouton de la boîte à outils de contrôles sur toutes les
feuilles du classeur :
'--
Private Sub Fermer_Click()
ThisWorkbook.Close 'savechanges:=False
End Sub
'--
Dans le module "ThisWorkbook", j'ai :
'--
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
If SaveAsUI Then
MsgBox "Désolé, l'option Enregistrer sous... est impossible !",
_
vbExclamation, " Veuillez utiliser fichier / fermer "
Cancel = True
Else
With ThisWorkbook
ChDrive "C"
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " &
.Name
End With
End If
End Sub
'--
Problème :
Toutes les feuilles sont en plein écran (sans aucune barre de menu) ;
j'ai donc pensé au bouton "Private Sub Fermer_Click()" pour fermer le
classeur.
Au début, j'avais mis :
'--
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call AnnulePleinEcran
End Sub
'--
... ça enregistrait bien le classeur, mais sans faire les copies (comme
le fait la procédure plus haut).
Donc pour rejoindre "Private Sub Workbook_BeforeSave (...)", j'ai
ajouté ceci :
'--
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call AnnulePleinEcran
Call Workbook_BeforeSave(False, False)
End Sub
'--
... mais ça ne m'enregistre toujours pas les copies, comme si je
fermais avec Fichier/Fermer !
Je suis perdu !
Merci pour votre aide,
JP
PS : peut-on lancer ""Private Sub Workbook_BeforeSave (...)" depuis un
bouton de feuille ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
FFO
Salut Pascal
Dans le VBA de ton bouton je mettrais :
Private Sub Fermer_Click() Call AnnulePleinEcran ThisWorkbook.Close 'savechanges:úlse End Sub
et dans le ThisWorkbook :
Private Sub Workbook_BeforeClose(Cancel As Boolean) With ThisWorkbook ChDrive "C" ChDir .Path .SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & ..Name End With End If End Sub
A la fermeture le code du bouton déclenche l'exécution de la macro "AnnulePleinEcran" puis ferme le classeur qui déclenche le code lié à sa fermeture "Private Sub Workbook_BeforeClose(Cancel As Boolean)"
L'évennement : Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
n'intervient qu'à la sauvegarde de ce classeur pour en faire une copie
Fais des essais et dis moi !!!!!
Salut Pascal
Dans le VBA de ton bouton je mettrais :
Private Sub Fermer_Click()
Call AnnulePleinEcran
ThisWorkbook.Close 'savechanges:úlse
End Sub
et dans le ThisWorkbook :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
With ThisWorkbook
ChDrive "C"
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " &
..Name
End With
End If
End Sub
A la fermeture le code du bouton déclenche l'exécution de la macro
"AnnulePleinEcran" puis ferme le classeur qui déclenche le code lié à sa
fermeture "Private Sub Workbook_BeforeClose(Cancel As Boolean)"
L'évennement : Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,
Cancel As
Boolean)
n'intervient qu'à la sauvegarde de ce classeur pour en faire une copie
Private Sub Fermer_Click() Call AnnulePleinEcran ThisWorkbook.Close 'savechanges:úlse End Sub
et dans le ThisWorkbook :
Private Sub Workbook_BeforeClose(Cancel As Boolean) With ThisWorkbook ChDrive "C" ChDir .Path .SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & ..Name End With End If End Sub
A la fermeture le code du bouton déclenche l'exécution de la macro "AnnulePleinEcran" puis ferme le classeur qui déclenche le code lié à sa fermeture "Private Sub Workbook_BeforeClose(Cancel As Boolean)"
L'évennement : Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
n'intervient qu'à la sauvegarde de ce classeur pour en faire une copie
Fais des essais et dis moi !!!!!
j-pascal
Bonsoir FFO,
Merci pour ta réponse. J'ai fait les modifs que tu préconises.
Si je déroule le code pas à pas depuis "Private Sub Fermer_Click()" :
- Je passe par "Private Sub Workbook_BeforeClose" Le "Path" est bien défini mais le ".SaveCopyAs" reste sans effet bien que la ligne passe en surbrillance (je veux dire qu'aucune copie n'est effectuée).
- (Si je clique sur "Sauvegarder") Je passe par "Private Sub Workbook_BeforeSave" Et là, idem, il n'y a pas de copie de fichier !
Question :
Puisque je prévois la copie du fichier dans le "Private Sub Workbook_BeforeSave", pourquoi faut-il que j'ajoute :
Par ailleurs si je crée une copie dès la "Private Sub Workbook_BeforeClose", sauf erreur de ma part, les modifications ne sont pas enregistrées !?
Faut-il ajouter un DoEvents quelque part, un application.EnableEvents ??
Pas très clair pour moi, tout ça !
@+
jp
Salut Pascal
Dans le VBA de ton bouton je mettrais :
Private Sub Fermer_Click() Call AnnulePleinEcran ThisWorkbook.Close 'savechanges:úlse End Sub
et dans le ThisWorkbook :
Private Sub Workbook_BeforeClose(Cancel As Boolean) With ThisWorkbook ChDrive "C" ChDir .Path .SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & ..Name End With End If End Sub
A la fermeture le code du bouton déclenche l'exécution de la macro "AnnulePleinEcran" puis ferme le classeur qui déclenche le code lié à sa fermeture "Private Sub Workbook_BeforeClose(Cancel As Boolean)"
L'évennement : Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
n'intervient qu'à la sauvegarde de ce classeur pour en faire une copie
Fais des essais et dis moi !!!!!
Bonsoir FFO,
Merci pour ta réponse. J'ai fait les modifs que tu préconises.
Si je déroule le code pas à pas depuis "Private Sub Fermer_Click()" :
- Je passe par "Private Sub Workbook_BeforeClose"
Le "Path" est bien défini mais le ".SaveCopyAs" reste sans effet bien
que la ligne passe en surbrillance (je veux dire qu'aucune copie n'est
effectuée).
- (Si je clique sur "Sauvegarder")
Je passe par "Private Sub Workbook_BeforeSave"
Et là, idem, il n'y a pas de copie de fichier !
Question :
Puisque je prévois la copie du fichier dans le "Private Sub
Workbook_BeforeSave", pourquoi faut-il que j'ajoute :
Par ailleurs si je crée une copie dès la "Private Sub
Workbook_BeforeClose", sauf erreur de ma part, les modifications ne
sont pas enregistrées !?
Faut-il ajouter un DoEvents quelque part, un application.EnableEvents
??
Pas très clair pour moi, tout ça !
@+
jp
Salut Pascal
Dans le VBA de ton bouton je mettrais :
Private Sub Fermer_Click()
Call AnnulePleinEcran
ThisWorkbook.Close 'savechanges:úlse
End Sub
et dans le ThisWorkbook :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
With ThisWorkbook
ChDrive "C"
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " &
..Name
End With
End If
End Sub
A la fermeture le code du bouton déclenche l'exécution de la macro
"AnnulePleinEcran" puis ferme le classeur qui déclenche le code lié à sa
fermeture "Private Sub Workbook_BeforeClose(Cancel As Boolean)"
L'évennement : Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,
Cancel As
Boolean)
n'intervient qu'à la sauvegarde de ce classeur pour en faire une copie
Merci pour ta réponse. J'ai fait les modifs que tu préconises.
Si je déroule le code pas à pas depuis "Private Sub Fermer_Click()" :
- Je passe par "Private Sub Workbook_BeforeClose" Le "Path" est bien défini mais le ".SaveCopyAs" reste sans effet bien que la ligne passe en surbrillance (je veux dire qu'aucune copie n'est effectuée).
- (Si je clique sur "Sauvegarder") Je passe par "Private Sub Workbook_BeforeSave" Et là, idem, il n'y a pas de copie de fichier !
Question :
Puisque je prévois la copie du fichier dans le "Private Sub Workbook_BeforeSave", pourquoi faut-il que j'ajoute :
Par ailleurs si je crée une copie dès la "Private Sub Workbook_BeforeClose", sauf erreur de ma part, les modifications ne sont pas enregistrées !?
Faut-il ajouter un DoEvents quelque part, un application.EnableEvents ??
Pas très clair pour moi, tout ça !
@+
jp
Salut Pascal
Dans le VBA de ton bouton je mettrais :
Private Sub Fermer_Click() Call AnnulePleinEcran ThisWorkbook.Close 'savechanges:úlse End Sub
et dans le ThisWorkbook :
Private Sub Workbook_BeforeClose(Cancel As Boolean) With ThisWorkbook ChDrive "C" ChDir .Path .SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & ..Name End With End If End Sub
A la fermeture le code du bouton déclenche l'exécution de la macro "AnnulePleinEcran" puis ferme le classeur qui déclenche le code lié à sa fermeture "Private Sub Workbook_BeforeClose(Cancel As Boolean)"
L'évennement : Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
n'intervient qu'à la sauvegarde de ce classeur pour en faire une copie
Fais des essais et dis moi !!!!!
FFO
Rebonjour à toi
Si tu souhaites réaliser une copie de ton document à sa fermeture il faut passer par l'évennement :
Workbook_BeforeClose
Si tu souhaites la réaliser à l'enregistrement il faut passer par l'évennement :
Workbook_BeforeSave
L'instruction de copie doit être dans l'évennement approprié
Si tu la met dans l'évennement de sauvegarde la copie à la fermeture de ce document si celle-ci est réalisée sans sauvegarde ne se fera pas
Et inversement
A toi de voir avec quel évennement tu souhaites réaliser la copie
Tu peux aussi utiliser les 2 évennements auquel cas il faudra pour couvrir toutes les situations mettre le code de la copie dans les 2 évennements
Concernant le code aprés essai celui-ci corrigé doit fonctionner :
With ThisWorkbook ChDrive "C" ChDir .Path .SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name End With
Il doit être intégré dans le classeur dont on réalise la copie
Le lecteur entre les lignes :
ChDrive "C" ChDir .Path
doit être identique
ChDir .Path est l'adresse du répertoire du classeur dont on réalise la copie
Il doit donc faire mention obligatoirement du lecteur "C"
Fais des essais et dis moi !!!!!
Rebonjour à toi
Si tu souhaites réaliser une copie de ton document à sa fermeture il faut
passer par l'évennement :
Workbook_BeforeClose
Si tu souhaites la réaliser à l'enregistrement il faut passer par
l'évennement :
Workbook_BeforeSave
L'instruction de copie doit être dans l'évennement approprié
Si tu la met dans l'évennement de sauvegarde la copie à la fermeture de ce
document si celle-ci est réalisée sans sauvegarde ne se fera pas
Et inversement
A toi de voir avec quel évennement tu souhaites réaliser la copie
Tu peux aussi utiliser les 2 évennements auquel cas il faudra pour couvrir
toutes les situations mettre le code de la copie dans les 2 évennements
Concernant le code aprés essai celui-ci corrigé doit fonctionner :
With ThisWorkbook
ChDrive "C"
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name
End With
Il doit être intégré dans le classeur dont on réalise la copie
Le lecteur entre les lignes :
ChDrive "C"
ChDir .Path
doit être identique
ChDir .Path est l'adresse du répertoire du classeur dont on réalise la copie
Il doit donc faire mention obligatoirement du lecteur "C"
Si tu souhaites réaliser une copie de ton document à sa fermeture il faut passer par l'évennement :
Workbook_BeforeClose
Si tu souhaites la réaliser à l'enregistrement il faut passer par l'évennement :
Workbook_BeforeSave
L'instruction de copie doit être dans l'évennement approprié
Si tu la met dans l'évennement de sauvegarde la copie à la fermeture de ce document si celle-ci est réalisée sans sauvegarde ne se fera pas
Et inversement
A toi de voir avec quel évennement tu souhaites réaliser la copie
Tu peux aussi utiliser les 2 évennements auquel cas il faudra pour couvrir toutes les situations mettre le code de la copie dans les 2 évennements
Concernant le code aprés essai celui-ci corrigé doit fonctionner :
With ThisWorkbook ChDrive "C" ChDir .Path .SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name End With
Il doit être intégré dans le classeur dont on réalise la copie
Le lecteur entre les lignes :
ChDrive "C" ChDir .Path
doit être identique
ChDir .Path est l'adresse du répertoire du classeur dont on réalise la copie
Il doit donc faire mention obligatoirement du lecteur "C"
Fais des essais et dis moi !!!!!
j-pascal
Bonsoir,
Comprends pas un truc :
J'ai fait l'essai en pas à pas :
Si je fais Fichier/Fermer,
Je passe par :
'-- Private Sub Workbook_BeforeSave(Cancel As Boolean)
With ThisWorkbook ChDrive "C" ChDir .Path .SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name End With End Sub '--
(J'ai simplifié le contenu juste pour l'exemple).
J'obtiens donc une copie de mon fichier.
Puis je clique sur oui à la question "voulez-vous sauvegarder ...", je passe par :
'-- Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) With ThisWorkbook ChDrive "C" ChDir .Path .SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name End With End Sub '--
et j'obtiens donc une 2nd sauvegarde de mon fichier.
Problème, si je clique sur le bouton d'une feuille :
'-- Private Sub Fermer_Click() ThisWorkbook.Close 'savechanges:úlse End Sub '--
je passe également par toutes les lignes de : Private Sub Workbook_BeforeClose et de Private Sub Workbook_BeforeSave
(comme dans l'exemple précédent), mais ça ne crée aucune sauvegarde !!!
Les deux procédures semblent se dérouler de façon identique, mais n'ont pas du tout le même effet suivant qu'elles sont lancées d'un bouton, ou de Fichier/Fermer !
Je ne comprends rien.
A bientôt,
jp
Rebonjour à toi
Si tu souhaites réaliser une copie de ton document à sa fermeture il faut passer par l'évennement :
Workbook_BeforeClose
Si tu souhaites la réaliser à l'enregistrement il faut passer par l'évennement :
Workbook_BeforeSave
L'instruction de copie doit être dans l'évennement approprié
Si tu la met dans l'évennement de sauvegarde la copie à la fermeture de ce document si celle-ci est réalisée sans sauvegarde ne se fera pas
Et inversement
A toi de voir avec quel évennement tu souhaites réaliser la copie
Tu peux aussi utiliser les 2 évennements auquel cas il faudra pour couvrir toutes les situations mettre le code de la copie dans les 2 évennements
Concernant le code aprés essai celui-ci corrigé doit fonctionner :
With ThisWorkbook ChDrive "C" ChDir .Path .SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name End With
Il doit être intégré dans le classeur dont on réalise la copie
Le lecteur entre les lignes :
ChDrive "C" ChDir .Path
doit être identique
ChDir .Path est l'adresse du répertoire du classeur dont on réalise la copie
Il doit donc faire mention obligatoirement du lecteur "C"
Fais des essais et dis moi !!!!!
Bonsoir,
Comprends pas un truc :
J'ai fait l'essai en pas à pas :
Si je fais Fichier/Fermer,
Je passe par :
'--
Private Sub Workbook_BeforeSave(Cancel As Boolean)
With ThisWorkbook
ChDrive "C"
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " &
.Name
End With
End Sub
'--
(J'ai simplifié le contenu juste pour l'exemple).
J'obtiens donc une copie de mon fichier.
Puis je clique sur oui à la question "voulez-vous sauvegarder ...", je
passe par :
'--
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
With ThisWorkbook
ChDrive "C"
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " &
.Name
End With
End Sub
'--
et j'obtiens donc une 2nd sauvegarde de mon fichier.
Problème, si je clique sur le bouton d'une feuille :
'--
Private Sub Fermer_Click()
ThisWorkbook.Close 'savechanges:úlse
End Sub
'--
je passe également par toutes les lignes de :
Private Sub Workbook_BeforeClose
et de
Private Sub Workbook_BeforeSave
(comme dans l'exemple précédent), mais ça ne crée aucune sauvegarde !!!
Les deux procédures semblent se dérouler de façon identique, mais n'ont
pas du tout le même effet suivant qu'elles sont lancées d'un bouton, ou
de Fichier/Fermer !
Je ne comprends rien.
A bientôt,
jp
Rebonjour à toi
Si tu souhaites réaliser une copie de ton document à sa fermeture il faut
passer par l'évennement :
Workbook_BeforeClose
Si tu souhaites la réaliser à l'enregistrement il faut passer par
l'évennement :
Workbook_BeforeSave
L'instruction de copie doit être dans l'évennement approprié
Si tu la met dans l'évennement de sauvegarde la copie à la fermeture de ce
document si celle-ci est réalisée sans sauvegarde ne se fera pas
Et inversement
A toi de voir avec quel évennement tu souhaites réaliser la copie
Tu peux aussi utiliser les 2 évennements auquel cas il faudra pour couvrir
toutes les situations mettre le code de la copie dans les 2 évennements
Concernant le code aprés essai celui-ci corrigé doit fonctionner :
With ThisWorkbook
ChDrive "C"
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name
End With
Il doit être intégré dans le classeur dont on réalise la copie
Le lecteur entre les lignes :
ChDrive "C"
ChDir .Path
doit être identique
ChDir .Path est l'adresse du répertoire du classeur dont on réalise la copie
Il doit donc faire mention obligatoirement du lecteur "C"
'-- Private Sub Workbook_BeforeSave(Cancel As Boolean)
With ThisWorkbook ChDrive "C" ChDir .Path .SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name End With End Sub '--
(J'ai simplifié le contenu juste pour l'exemple).
J'obtiens donc une copie de mon fichier.
Puis je clique sur oui à la question "voulez-vous sauvegarder ...", je passe par :
'-- Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) With ThisWorkbook ChDrive "C" ChDir .Path .SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name End With End Sub '--
et j'obtiens donc une 2nd sauvegarde de mon fichier.
Problème, si je clique sur le bouton d'une feuille :
'-- Private Sub Fermer_Click() ThisWorkbook.Close 'savechanges:úlse End Sub '--
je passe également par toutes les lignes de : Private Sub Workbook_BeforeClose et de Private Sub Workbook_BeforeSave
(comme dans l'exemple précédent), mais ça ne crée aucune sauvegarde !!!
Les deux procédures semblent se dérouler de façon identique, mais n'ont pas du tout le même effet suivant qu'elles sont lancées d'un bouton, ou de Fichier/Fermer !
Je ne comprends rien.
A bientôt,
jp
Rebonjour à toi
Si tu souhaites réaliser une copie de ton document à sa fermeture il faut passer par l'évennement :
Workbook_BeforeClose
Si tu souhaites la réaliser à l'enregistrement il faut passer par l'évennement :
Workbook_BeforeSave
L'instruction de copie doit être dans l'évennement approprié
Si tu la met dans l'évennement de sauvegarde la copie à la fermeture de ce document si celle-ci est réalisée sans sauvegarde ne se fera pas
Et inversement
A toi de voir avec quel évennement tu souhaites réaliser la copie
Tu peux aussi utiliser les 2 évennements auquel cas il faudra pour couvrir toutes les situations mettre le code de la copie dans les 2 évennements
Concernant le code aprés essai celui-ci corrigé doit fonctionner :
With ThisWorkbook ChDrive "C" ChDir .Path .SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name End With
Il doit être intégré dans le classeur dont on réalise la copie
Le lecteur entre les lignes :
ChDrive "C" ChDir .Path
doit être identique
ChDir .Path est l'adresse du répertoire du classeur dont on réalise la copie
Il doit donc faire mention obligatoirement du lecteur "C"