Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Private Sub App_WorkbookBeforeSave

6 réponses
Avatar
JMD
Bonjour.

J'ai un truc un peu "Chinois".

Je voudrais que chaque fois que l'on enregistre un classeur, quelle que soit
la méthode utilisée, c'est à dire avec le bouton Enregistrer ou en
confirmant la boîte de dialogue si on ferme ou quitte sans avoir enregistré,
il se passe la chose suivante :

- Le classeur est enregistré à son emplacement actuel (par exemple,
C:\VENTES\), comme il se doit.
- Le classeur est également enregistré sur un autre emplacement (par exemple
c:\COPIESDEVENTE\).


J'ai essayé dans un module de classe:

Private Sub App_WorkbookBeforeSave(ByVal Wb As Workbook, _
ByVal SaveAsUI As Boolean, Cancel As Boolean)

SaveAsUI = False

ActiveWorkbook.SaveAs Filename:= _
"C:\ventes\testbeforesave001.xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False

ActiveWorkbook.SaveAs Filename:= _
"C:\copiedevente\testbeforesave00.xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False

MsgBox "OK"

End Sub


mais bof... Il doit y avoir mieux, d'autant que mon code plante Excel si on
l'utilise plus d'une fois, et que pour que l'évennement fonctionne, il faut
avoir lancé

Sub InitializeApp()
Set X.App = Application
End Sub

et que je ne vois pas bien comment faire pour que cette initialisation se
fasse sans intervention de l'utilisateur.

Bref, ma question est : comment programmer une copie systématique lors de
chaque enregistrement d'un classeur.


Je vous remercie par avance pour votre aide et vos avis.

Très cordialement à tous,

JM

6 réponses

Avatar
JB
Bonjour,

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Not ThisWorkbook.Saved Then ThisWorkbook.Save
Répertoire = "c:cegos"
If Dir(Répertoire, vbDirectory) = "" Then MkDir Répertoire
ThisWorkbook.SaveCopyAs Répertoire & "" & ThisWorkbook.Name
End Sub

JB

On 8 juin, 09:23, "JMD" wrote:
Bonjour.

J'ai un truc un peu "Chinois".

Je voudrais que chaque fois que l'on enregistre un classeur, quelle que s oit
la méthode utilisée, c'est à dire avec le bouton Enregistrer ou en
confirmant la boîte de dialogue si on ferme ou quitte sans avoir enregi stré,
il se passe la chose suivante :

- Le classeur est enregistré à son emplacement actuel (par exemple,
C:VENTES), comme il se doit.
- Le classeur est également enregistré sur un autre emplacement (par exemple
c:COPIESDEVENTE).

J'ai essayé dans un module de classe:

Private Sub App_WorkbookBeforeSave(ByVal Wb As Workbook, _
ByVal SaveAsUI As Boolean, Cancel As Boolean)

SaveAsUI = False

ActiveWorkbook.SaveAs Filename:= _
"C:ventestestbeforesave001.xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:úlse, CreateBackup:úlse

ActiveWorkbook.SaveAs Filename:= _
"C:copiedeventetestbeforesave00.xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:úlse, CreateBackup:úlse

MsgBox "OK"

End Sub

mais bof... Il doit y avoir mieux, d'autant que mon code plante Excel si on
l'utilise plus d'une fois, et que pour que l'évennement fonctionne, il faut
avoir lancé

Sub InitializeApp()
Set X.App = Application
End Sub

et que je ne vois pas bien comment faire pour que cette initialisation se
fasse sans intervention de l'utilisateur.

Bref, ma question est : comment programmer une copie systématique lors de
chaque enregistrement d'un classeur.

Je vous remercie par avance pour votre aide et vos avis.

Très cordialement à tous,

JM


Avatar
Quetzalcoatl
Bonjour,

Dans ThisWorkbook :

Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As Boolean)
Application.EnableEvents = False 'grâce à cette instruction, on ne repasse pas dans Workbook_BeforeSave lors d'un Save
ActiveWorkbook.SaveAs Filename:=File1
ActiveWorkbook.SaveAs Filename:=File2
Application.EnableEvents = True
Cancel = True 'cette instruction permet d'annuler le Save d'origine
End Sub

(J'ai supposé quelque chose comme :
Dim File1, File2 As String
File1 = "C:ventestestbeforesave001.xls"
File2 = "C:copiedeventetestbeforesave00.xls")

Nous dire.

"JMD" a écrit dans le message de news: %
Bonjour.

J'ai un truc un peu "Chinois".

Je voudrais que chaque fois que l'on enregistre un classeur, quelle que soit la méthode utilisée, c'est à dire avec le bouton
Enregistrer ou en confirmant la boîte de dialogue si on ferme ou quitte sans avoir enregistré, il se passe la chose suivante :

- Le classeur est enregistré à son emplacement actuel (par exemple, C:VENTES), comme il se doit.
- Le classeur est également enregistré sur un autre emplacement (par exemple c:COPIESDEVENTE).


J'ai essayé dans un module de classe:

Private Sub App_WorkbookBeforeSave(ByVal Wb As Workbook, _
ByVal SaveAsUI As Boolean, Cancel As Boolean)

SaveAsUI = False

ActiveWorkbook.SaveAs Filename:= _
"C:ventestestbeforesave001.xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:úlse, CreateBackup:úlse

ActiveWorkbook.SaveAs Filename:= _
"C:copiedeventetestbeforesave00.xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:úlse, CreateBackup:úlse

MsgBox "OK"

End Sub


mais bof... Il doit y avoir mieux, d'autant que mon code plante Excel si on l'utilise plus d'une fois, et que pour que
l'évennement fonctionne, il faut avoir lancé

Sub InitializeApp()
Set X.App = Application
End Sub

et que je ne vois pas bien comment faire pour que cette initialisation se fasse sans intervention de l'utilisateur.

Bref, ma question est : comment programmer une copie systématique lors de chaque enregistrement d'un classeur.


Je vous remercie par avance pour votre aide et vos avis.

Très cordialement à tous,

JM



Avatar
JMD
Bonjour.

Comme quoi, je suis un cancre. Bravo et merci.

Juste un truc : si ensuite on ouvre la copie, en la quittant on a une erreur
d'exécution "1004 Impossible d'accèder à [nomduclasseur]" générée par la
ligne
ThisWorkbook.SaveCopyAs Répertoire & "" & ThisWorkbook.Name

Tu peux avoir l'amabilité de me dire pourquoi ?

Très cordialement.

JM

"JB" a écrit dans le message de news:

Bonjour,

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Not ThisWorkbook.Saved Then ThisWorkbook.Save
Répertoire = "c:cegos"
If Dir(Répertoire, vbDirectory) = "" Then MkDir Répertoire
ThisWorkbook.SaveCopyAs Répertoire & "" & ThisWorkbook.Name
End Sub

JB

On 8 juin, 09:23, "JMD" wrote:
Bonjour.

J'ai un truc un peu "Chinois".

Je voudrais que chaque fois que l'on enregistre un classeur, quelle que
soit
la méthode utilisée, c'est à dire avec le bouton Enregistrer ou en
confirmant la boîte de dialogue si on ferme ou quitte sans avoir
enregistré,
il se passe la chose suivante :

- Le classeur est enregistré à son emplacement actuel (par exemple,
C:VENTES), comme il se doit.
- Le classeur est également enregistré sur un autre emplacement (par
exemple
c:COPIESDEVENTE).

J'ai essayé dans un module de classe:

Private Sub App_WorkbookBeforeSave(ByVal Wb As Workbook, _
ByVal SaveAsUI As Boolean, Cancel As Boolean)

SaveAsUI = False

ActiveWorkbook.SaveAs Filename:= _
"C:ventestestbeforesave001.xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:úlse, CreateBackup:úlse

ActiveWorkbook.SaveAs Filename:= _
"C:copiedeventetestbeforesave00.xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:úlse, CreateBackup:úlse

MsgBox "OK"

End Sub

mais bof... Il doit y avoir mieux, d'autant que mon code plante Excel si
on
l'utilise plus d'une fois, et que pour que l'évennement fonctionne, il
faut
avoir lancé

Sub InitializeApp()
Set X.App = Application
End Sub

et que je ne vois pas bien comment faire pour que cette initialisation se
fasse sans intervention de l'utilisateur.

Bref, ma question est : comment programmer une copie systématique lors de
chaque enregistrement d'un classeur.

Je vous remercie par avance pour votre aide et vos avis.

Très cordialement à tous,

JM


Avatar
JMD
Merci beaucoup.


"Quetzalcoatl" a écrit dans le message
de news: 46690a6d$0$27369$
Bonjour,

Dans ThisWorkbook :

Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As
Boolean)
Application.EnableEvents = False 'grâce à cette instruction, on ne
repasse pas dans Workbook_BeforeSave lors d'un Save
ActiveWorkbook.SaveAs Filename:=File1
ActiveWorkbook.SaveAs Filename:=File2
Application.EnableEvents = True
Cancel = True 'cette instruction permet d'annuler le Save d'origine
End Sub

(J'ai supposé quelque chose comme :
Dim File1, File2 As String
File1 = "C:ventestestbeforesave001.xls"
File2 = "C:copiedeventetestbeforesave00.xls")

Nous dire.

"JMD" a écrit dans le message de news:
%
Bonjour.

J'ai un truc un peu "Chinois".

Je voudrais que chaque fois que l'on enregistre un classeur, quelle que
soit la méthode utilisée, c'est à dire avec le bouton Enregistrer ou en
confirmant la boîte de dialogue si on ferme ou quitte sans avoir
enregistré, il se passe la chose suivante :

- Le classeur est enregistré à son emplacement actuel (par exemple,
C:VENTES), comme il se doit.
- Le classeur est également enregistré sur un autre emplacement (par
exemple c:COPIESDEVENTE).


J'ai essayé dans un module de classe:

Private Sub App_WorkbookBeforeSave(ByVal Wb As Workbook, _
ByVal SaveAsUI As Boolean, Cancel As Boolean)

SaveAsUI = False

ActiveWorkbook.SaveAs Filename:= _
"C:ventestestbeforesave001.xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:úlse, CreateBackup:úlse

ActiveWorkbook.SaveAs Filename:= _
"C:copiedeventetestbeforesave00.xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:úlse, CreateBackup:úlse

MsgBox "OK"

End Sub


mais bof... Il doit y avoir mieux, d'autant que mon code plante Excel si
on l'utilise plus d'une fois, et que pour que l'évennement fonctionne, il
faut avoir lancé

Sub InitializeApp()
Set X.App = Application
End Sub

et que je ne vois pas bien comment faire pour que cette initialisation se
fasse sans intervention de l'utilisateur.

Bref, ma question est : comment programmer une copie systématique lors de
chaque enregistrement d'un classeur.


Je vous remercie par avance pour votre aide et vos avis.

Très cordialement à tous,

JM







Avatar
JB
SaveCopyAs xx ne fonctionne pas pour le fichier ouvert

If Not ThisWorkbook.Saved Then ThisWorkbook.Save
répertoire = "c:cegos"
If Dir(répertoire, vbDirectory) = "" Then MkDir répertoire
On Error Resume Next
ThisWorkbook.SaveCopyAs répertoire & "" & ThisWorkbook.Name

ou

If Not ThisWorkbook.Saved Then ThisWorkbook.Save
répertoire = "c:cegos"
If Dir(répertoire, vbDirectory) = "" Then MkDir répertoire
If UCase(ThisWorkbook.Path) <> UCase(répertoire) Then
ThisWorkbook.SaveCopyAs répertoire & "" & ThisWorkbook.Name
End If

JB

On 8 juin, 09:57, "JMD" wrote:
Bonjour.

Comme quoi, je suis un cancre. Bravo et merci.

Juste un truc : si ensuite on ouvre la copie, en la quittant on a une err eur
d'exécution "1004 Impossible d'accèder à [nomduclasseur]" génér ée par la
ligne
ThisWorkbook.SaveCopyAs Répertoire & "" & ThisWorkbook.Name

Tu peux avoir l'amabilité de me dire pourquoi ?

Très cordialement.

JM

"JB" a écrit dans le message de news:

Bonjour,

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Not ThisWorkbook.Saved Then ThisWorkbook.Save
Répertoire = "c:cegos"
If Dir(Répertoire, vbDirectory) = "" Then MkDir Répertoire
ThisWorkbook.SaveCopyAs Répertoire & "" & ThisWorkbook.Name
End Sub

JB

On 8 juin, 09:23, "JMD" wrote:



Bonjour.

J'ai un truc un peu "Chinois".

Je voudrais que chaque fois que l'on enregistre un classeur, quelle que
soit
la méthode utilisée, c'est à dire avec le bouton Enregistrer ou en
confirmant la boîte de dialogue si on ferme ou quitte sans avoir
enregistré,
il se passe la chose suivante :

- Le classeur est enregistré à son emplacement actuel (par exemple,
C:VENTES), comme il se doit.
- Le classeur est également enregistré sur un autre emplacement (par
exemple
c:COPIESDEVENTE).

J'ai essayé dans un module de classe:

Private Sub App_WorkbookBeforeSave(ByVal Wb As Workbook, _
ByVal SaveAsUI As Boolean, Cancel As Boolean)

SaveAsUI = False

ActiveWorkbook.SaveAs Filename:= _
"C:ventestestbeforesave001.xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:úlse, CreateBackup:úlse

ActiveWorkbook.SaveAs Filename:= _
"C:copiedeventetestbeforesave00.xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:úlse, CreateBackup:úlse

MsgBox "OK"

End Sub

mais bof... Il doit y avoir mieux, d'autant que mon code plante Excel si
on
l'utilise plus d'une fois, et que pour que l'évennement fonctionne, il
faut
avoir lancé

Sub InitializeApp()
Set X.App = Application
End Sub

et que je ne vois pas bien comment faire pour que cette initialisation se
fasse sans intervention de l'utilisateur.

Bref, ma question est : comment programmer une copie systématique lor s de
chaque enregistrement d'un classeur.

Je vous remercie par avance pour votre aide et vos avis.

Très cordialement à tous,

JM- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -



Avatar
JMD
Merci.



"JB" a écrit dans le message de news:

SaveCopyAs xx ne fonctionne pas pour le fichier ouvert

If Not ThisWorkbook.Saved Then ThisWorkbook.Save
répertoire = "c:cegos"
If Dir(répertoire, vbDirectory) = "" Then MkDir répertoire
On Error Resume Next
ThisWorkbook.SaveCopyAs répertoire & "" & ThisWorkbook.Name

ou

If Not ThisWorkbook.Saved Then ThisWorkbook.Save
répertoire = "c:cegos"
If Dir(répertoire, vbDirectory) = "" Then MkDir répertoire
If UCase(ThisWorkbook.Path) <> UCase(répertoire) Then
ThisWorkbook.SaveCopyAs répertoire & "" & ThisWorkbook.Name
End If

JB

On 8 juin, 09:57, "JMD" wrote:
Bonjour.

Comme quoi, je suis un cancre. Bravo et merci.

Juste un truc : si ensuite on ouvre la copie, en la quittant on a une
erreur
d'exécution "1004 Impossible d'accèder à [nomduclasseur]" générée par la
ligne
ThisWorkbook.SaveCopyAs Répertoire & "" & ThisWorkbook.Name

Tu peux avoir l'amabilité de me dire pourquoi ?

Très cordialement.

JM

"JB" a écrit dans le message de news:

Bonjour,

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Not ThisWorkbook.Saved Then ThisWorkbook.Save
Répertoire = "c:cegos"
If Dir(Répertoire, vbDirectory) = "" Then MkDir Répertoire
ThisWorkbook.SaveCopyAs Répertoire & "" & ThisWorkbook.Name
End Sub

JB

On 8 juin, 09:23, "JMD" wrote:



Bonjour.

J'ai un truc un peu "Chinois".

Je voudrais que chaque fois que l'on enregistre un classeur, quelle que
soit
la méthode utilisée, c'est à dire avec le bouton Enregistrer ou en
confirmant la boîte de dialogue si on ferme ou quitte sans avoir
enregistré,
il se passe la chose suivante :

- Le classeur est enregistré à son emplacement actuel (par exemple,
C:VENTES), comme il se doit.
- Le classeur est également enregistré sur un autre emplacement (par
exemple
c:COPIESDEVENTE).

J'ai essayé dans un module de classe:

Private Sub App_WorkbookBeforeSave(ByVal Wb As Workbook, _
ByVal SaveAsUI As Boolean, Cancel As Boolean)

SaveAsUI = False

ActiveWorkbook.SaveAs Filename:= _
"C:ventestestbeforesave001.xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:úlse, CreateBackup:úlse

ActiveWorkbook.SaveAs Filename:= _
"C:copiedeventetestbeforesave00.xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:úlse, CreateBackup:úlse

MsgBox "OK"

End Sub

mais bof... Il doit y avoir mieux, d'autant que mon code plante Excel si
on
l'utilise plus d'une fois, et que pour que l'évennement fonctionne, il
faut
avoir lancé

Sub InitializeApp()
Set X.App = Application
End Sub

et que je ne vois pas bien comment faire pour que cette initialisation
se
fasse sans intervention de l'utilisateur.

Bref, ma question est : comment programmer une copie systématique lors
de
chaque enregistrement d'un classeur.

Je vous remercie par avance pour votre aide et vos avis.

Très cordialement à tous,

JM- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -