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

VBA - lancer une macro de la copie depuis le classeur original

10 réponses
Avatar
twinley
Bonsoir à tous

La dernière ligne de sauvenouveaubook fait une err 424 code requis

Le but de la manip :

fermer les fenêtres de code du VBE puis fermer le VBE d'un classeur
faire la copie conforme d'un classeur en changeant de nom
garder l'original ouvert
ouvrir la copie du classeur
les deux classeurs sont dans le même répertoire
lancer une macro de la copie depuis le classeur original
la macro videlesdonnees doit nettoyer les pages de la copie

du coup la macro videlesdonnes a le même nom dans les deux classeurs,
mais pas le même chemin. L'err se trouve bien dans la macro de la copie.


Sub sauvenouveaubook()
Dim strNewnamepath As String
Dim strNewnameshort As String

' ferme les CodePanes et le VBE avant la copie
Ferme_CodeWindow
' "C:\aapublic\2005carole.xls"
strNewnamepath = "C:\aapublic" & Sheets("clients").[A1] & "\" _
& Sheets("clients").[A2] & Sheets("clients").[A1] & ".xls"
' "2005carole.xls"
strNewnameshort = Sheets("clients").[A2] & Sheets("clients").[A1] _
& ".xls"
' crée une copie du Wbk dans le même rep
ActiveWorkbook.SaveCopyAs strNewnamepath
' ouvre la copie en même temps que l'original
Workbooks.Open Filename:=strNewnamepath
' lance depuis l'original la sub de la copie !videlesdonnes
xlApp.Run xlBook.Name & "'strNewnameshort'!videlesdonnees"
End Sub



Sub videlesdonnees()
Application.EnableEvents = False
' supprime les donneés dans les 13 feuilles Janv à RECAP
Application.ScreenUpdating = False
Dim oSheet As Worksheet
For Each oSheet In Worksheets
If oSheet.Name <> "clients" Then
oSheet.Activate
Range(Range("A1"),
Range("A1").SpecialCells(xlCellTypeLastCell)).ClearContents
ActiveWindow.FreezePanes = False
Range("A1").Select
End If
Next
Worksheets("clients").Activate
Application.EnableEvents = True
End Sub


Je ne trouve pas d'info sur
xlApp.Run xlBook.Name & "'strNewnameshort'!videlesdonnees"

Je vous remercie pour votre aide.

--
à+twinley

10 réponses

Avatar
FxM
Bonsoir,

Et si tu fais l'inverse, à savoir executer la macro depuis l'original et
la faire agir dans la copie ?

(non testé)

Sub sauvenouveaubook()
Dim strNewnamepath As String
Dim strNewnameshort As String
Dim awb As String '¬tiveworkbook.name

' ferme les CodePanes et le VBE avant la copie
Ferme_CodeWindow
' "C:aapublic2005carole.xls"
strNewnamepath = "C:aapublic" & Sheets("clients").[A1] & "" _
& Sheets("clients").[A2] & Sheets("clients").[A1] & ".xls"
' "2005carole.xls"
strNewnameshort = Sheets("clients").[A2] & Sheets("clients").[A1] _
& ".xls"

awb = activeworkbook.name

' crée une copie du Wbk dans le même rep
ActiveWorkbook.SaveCopyAs strNewnamepath

' ouvre la copie en même temps que l'original
Workbooks.Open Filename:=strNewnamepath

Workbooks(awb).activate
videlesdonnees(strnewnameshort)
End Sub

Sub videlesdonnees(fil)
Application.EnableEvents = False
' supprime les donneés dans les 13 feuilles Janv à RECAP
Application.ScreenUpdating = False
Dim oSheet As Worksheet
with workbooks(fil)
for Each oSheet In .Worksheets
If oSheet.Name <> "clients" Then
.oSheet.Activate
.activesheet.Range(Range("A1"), _
.activesheet.Range("A1"). _
SpecialCells(xlCellTypeLastCell)).ClearContents
' ActiveWindow.FreezePanes = False
.activesheet.Range("A1").Select
End If
Next oSheet
.Worksheets("clients").Activate
Application.EnableEvents = True
Application.ScreenUpdating = False
end with
End Sub

@+
FxM













Bonsoir à tous

La dernière ligne de sauvenouveaubook fait une err 424 code requis

Le but de la manip :

fermer les fenêtres de code du VBE puis fermer le VBE d'un classeur
faire la copie conforme d'un classeur en changeant de nom
garder l'original ouvert
ouvrir la copie du classeur
les deux classeurs sont dans le même répertoire
lancer une macro de la copie depuis le classeur original
la macro videlesdonnees doit nettoyer les pages de la copie

du coup la macro videlesdonnes a le même nom dans les deux classeurs,
mais pas le même chemin. L'err se trouve bien dans la macro de la copie.


Sub sauvenouveaubook()
Dim strNewnamepath As String
Dim strNewnameshort As String

' ferme les CodePanes et le VBE avant la copie
Ferme_CodeWindow
' "C:aapublic2005carole.xls"
strNewnamepath = "C:aapublic" & Sheets("clients").[A1] & "" _
& Sheets("clients").[A2] & Sheets("clients").[A1] & ".xls"
' "2005carole.xls"
strNewnameshort = Sheets("clients").[A2] & Sheets("clients").[A1] _
& ".xls"
' crée une copie du Wbk dans le même rep
ActiveWorkbook.SaveCopyAs strNewnamepath
' ouvre la copie en même temps que l'original
Workbooks.Open Filename:=strNewnamepath
' lance depuis l'original la sub de la copie !videlesdonnes
xlApp.Run xlBook.Name & "'strNewnameshort'!videlesdonnees"
End Sub



Sub videlesdonnees()
Application.EnableEvents = False
' supprime les donneés dans les 13 feuilles Janv à RECAP
Application.ScreenUpdating = False
Dim oSheet As Worksheet
For Each oSheet In Worksheets
If oSheet.Name <> "clients" Then
oSheet.Activate
Range(Range("A1"),
Range("A1").SpecialCells(xlCellTypeLastCell)).ClearContents
ActiveWindow.FreezePanes = False
Range("A1").Select
End If
Next
Worksheets("clients").Activate
Application.EnableEvents = True
End Sub


Je ne trouve pas d'info sur
xlApp.Run xlBook.Name & "'strNewnameshort'!videlesdonnees"

Je vous remercie pour votre aide.



Avatar
twinley
Bonsoir FxM

Je viens de trouver que c'est ma variable strNewnameshort qui met la
pagaille. Si j'écris le nom du fichier, je vais plus loin. C'est la
première chose.

Et je vais sérieusement prendre en considération ton idée car je tue les
données de l'original, la copie n'est pas modifiée. C'est l'inverse que
je souhaite.

Mais pas ce soir, j'ai les synapses tendues comme des baguettes...

Merci pour ton aide et bonne nuit

à+twinley

Bonsoir,

Et si tu fais l'inverse, à savoir executer la macro depuis l'original et
la faire agir dans la copie ?

(non testé)

Sub sauvenouveaubook()
Dim strNewnamepath As String
Dim strNewnameshort As String
Dim awb As String '¬tiveworkbook.name

' ferme les CodePanes et le VBE avant la copie
Ferme_CodeWindow
' "C:aapublic2005carole.xls"
strNewnamepath = "C:aapublic" & Sheets("clients").[A1] & "" _
& Sheets("clients").[A2] & Sheets("clients").[A1] & ".xls"
' "2005carole.xls"
strNewnameshort = Sheets("clients").[A2] & Sheets("clients").[A1] _
& ".xls"

awb = activeworkbook.name

' crée une copie du Wbk dans le même rep
ActiveWorkbook.SaveCopyAs strNewnamepath

' ouvre la copie en même temps que l'original
Workbooks.Open Filename:=strNewnamepath

Workbooks(awb).activate
videlesdonnees(strnewnameshort)
End Sub

Sub videlesdonnees(fil)
Application.EnableEvents = False
' supprime les donneés dans les 13 feuilles Janv à RECAP
Application.ScreenUpdating = False
Dim oSheet As Worksheet
with workbooks(fil)
for Each oSheet In .Worksheets
If oSheet.Name <> "clients" Then
.oSheet.Activate
.activesheet.Range(Range("A1"), _
.activesheet.Range("A1"). _
SpecialCells(xlCellTypeLastCell)).ClearContents
' ActiveWindow.FreezePanes = False
.activesheet.Range("A1").Select
End If
Next oSheet
.Worksheets("clients").Activate
Application.EnableEvents = True
Application.ScreenUpdating = False
end with
End Sub

@+
FxM














Bonsoir à tous

La dernière ligne de sauvenouveaubook fait une err 424 code requis

Le but de la manip :

fermer les fenêtres de code du VBE puis fermer le VBE d'un classeur
faire la copie conforme d'un classeur en changeant de nom
garder l'original ouvert
ouvrir la copie du classeur
les deux classeurs sont dans le même répertoire
lancer une macro de la copie depuis le classeur original
la macro videlesdonnees doit nettoyer les pages de la copie

du coup la macro videlesdonnes a le même nom dans les deux classeurs,
mais pas le même chemin. L'err se trouve bien dans la macro de la copie.


Sub sauvenouveaubook()
Dim strNewnamepath As String
Dim strNewnameshort As String

' ferme les CodePanes et le VBE avant la copie
Ferme_CodeWindow
' "C:aapublic2005carole.xls"
strNewnamepath = "C:aapublic" & Sheets("clients").[A1] & "" _
& Sheets("clients").[A2] & Sheets("clients").[A1] & ".xls"
' "2005carole.xls"
strNewnameshort = Sheets("clients").[A2] & Sheets("clients").[A1] _
& ".xls"
' crée une copie du Wbk dans le même rep
ActiveWorkbook.SaveCopyAs strNewnamepath
' ouvre la copie en même temps que l'original
Workbooks.Open Filename:=strNewnamepath
' lance depuis l'original la sub de la copie !videlesdonnes
xlApp.Run xlBook.Name & "'strNewnameshort'!videlesdonnees"
End Sub



Sub videlesdonnees()
Application.EnableEvents = False
' supprime les donneés dans les 13 feuilles Janv à RECAP
Application.ScreenUpdating = False
Dim oSheet As Worksheet
For Each oSheet In Worksheets
If oSheet.Name <> "clients" Then
oSheet.Activate
Range(Range("A1"),
Range("A1").SpecialCells(xlCellTypeLastCell)).ClearContents
ActiveWindow.FreezePanes = False
Range("A1").Select
End If
Next
Worksheets("clients").Activate
Application.EnableEvents = True
End Sub


Je ne trouve pas d'info sur
xlApp.Run xlBook.Name & "'strNewnameshort'!videlesdonnees"

Je vous remercie pour votre aide.





Avatar
twinley
Bonjour,

Désolé pour FxM de t'avoir planté là très tôt ce matin.
Merci pour tes modifs qui m'amènent progressivement vers la solution.
J'ai testé tes sub.
Je suis surpris par ta façon de passer une variable en ne tenant pas
compte du nom ni de sa déclarartion. VBA à l'air de si reconnaître.

Mais dans la deuxième sub videlesdonnees, ça passe pas sur le code :

with workbooks(fil)
for Each oSheet In .Worksheets
If oSheet.Name <> "clients" Then
.oSheet.Activate


Err d'execution 438 : propriété ou méthode non gérée par cet objet
sur le ligne if

pourtant fil contient bien le nom du classeur destination 2005carole.xls.
Mais j'ai l'impression qu'il ne trouve pas le chemin correct
workbook.sheet. ou quelque chose car la première feuille c'est clients
puis la deuxième c'est Janv.

Or If oSheet.Name <> "clients" Then montre oSheet.Name avec le mot Janv,
ce qui indique qu'il a fait le test sur clients. Tant que je reste hors
de la boucle, c'est ok. Mais quand la condition l'amène dans la boucle,
l'objet n'est pas correct.
J'ai fait plusieurs variantes avec point ou pas devant oSheet, mais je
n'ai pas encore trouvé.

Merci pour ton aide.

à+twinley

Bonsoir,

Et si tu fais l'inverse, à savoir executer la macro depuis l'original et
la faire agir dans la copie ?

(non testé)

Sub sauvenouveaubook()
Dim strNewnamepath As String
Dim strNewnameshort As String
Dim awb As String '¬tiveworkbook.name

' ferme les CodePanes et le VBE avant la copie
Ferme_CodeWindow
' "C:aapublic2005carole.xls"
strNewnamepath = "C:aapublic" & Sheets("clients").[A1] & "" _
& Sheets("clients").[A2] & Sheets("clients").[A1] & ".xls"
' "2005carole.xls"
strNewnameshort = Sheets("clients").[A2] & Sheets("clients").[A1] _
& ".xls"

awb = activeworkbook.name

' crée une copie du Wbk dans le même rep
ActiveWorkbook.SaveCopyAs strNewnamepath

' ouvre la copie en même temps que l'original
Workbooks.Open Filename:=strNewnamepath

Workbooks(awb).activate
videlesdonnees(strnewnameshort)
End Sub

Sub videlesdonnees(fil)
Application.EnableEvents = False
' supprime les donneés dans les 13 feuilles Janv à RECAP
Application.ScreenUpdating = False
Dim oSheet As Worksheet
with workbooks(fil)
for Each oSheet In .Worksheets
If oSheet.Name <> "clients" Then
.oSheet.Activate
.activesheet.Range(Range("A1"), _
.activesheet.Range("A1"). _
SpecialCells(xlCellTypeLastCell)).ClearContents
' ActiveWindow.FreezePanes = False
.activesheet.Range("A1").Select
End If
Next oSheet
.Worksheets("clients").Activate
Application.EnableEvents = True
Application.ScreenUpdating = False
end with
End Sub

@+
FxM














Bonsoir à tous

La dernière ligne de sauvenouveaubook fait une err 424 code requis

Le but de la manip :

fermer les fenêtres de code du VBE puis fermer le VBE d'un classeur
faire la copie conforme d'un classeur en changeant de nom
garder l'original ouvert
ouvrir la copie du classeur
les deux classeurs sont dans le même répertoire
lancer une macro de la copie depuis le classeur original
la macro videlesdonnees doit nettoyer les pages de la copie

du coup la macro videlesdonnes a le même nom dans les deux classeurs,
mais pas le même chemin. L'err se trouve bien dans la macro de la copie.


Sub sauvenouveaubook()
Dim strNewnamepath As String
Dim strNewnameshort As String

' ferme les CodePanes et le VBE avant la copie
Ferme_CodeWindow
' "C:aapublic2005carole.xls"
strNewnamepath = "C:aapublic" & Sheets("clients").[A1] & "" _
& Sheets("clients").[A2] & Sheets("clients").[A1] & ".xls"
' "2005carole.xls"
strNewnameshort = Sheets("clients").[A2] & Sheets("clients").[A1] _
& ".xls"
' crée une copie du Wbk dans le même rep
ActiveWorkbook.SaveCopyAs strNewnamepath
' ouvre la copie en même temps que l'original
Workbooks.Open Filename:=strNewnamepath
' lance depuis l'original la sub de la copie !videlesdonnes
xlApp.Run xlBook.Name & "'strNewnameshort'!videlesdonnees"
End Sub



Sub videlesdonnees()
Application.EnableEvents = False
' supprime les donneés dans les 13 feuilles Janv à RECAP
Application.ScreenUpdating = False
Dim oSheet As Worksheet
For Each oSheet In Worksheets
If oSheet.Name <> "clients" Then
oSheet.Activate
Range(Range("A1"),
Range("A1").SpecialCells(xlCellTypeLastCell)).ClearContents
ActiveWindow.FreezePanes = False
Range("A1").Select
End If
Next
Worksheets("clients").Activate
Application.EnableEvents = True
End Sub


Je ne trouve pas d'info sur
xlApp.Run xlBook.Name & "'strNewnameshort'!videlesdonnees"

Je vous remercie pour votre aide.





Avatar
FxM
Bonsoir,

J'obtiens aussi des trucs incompréhensibles avec mon code telque "format
de données non valide"; ne manquait plus que cela. On l'oublie :o)

En repartant de ton code, j'obtiens quelque chose qui semble tenir la
route en remplacant
xlApp.Run xlBook.Name & "'strNewnameshort'!videlesdonnees"
par
Application.Run strNewnameshort & "!videlesdonnees"

Le lien qui va bien : http://cjoint.com/?bguJ6pCkHC

@+
FxM





Bonjour,

Désolé pour FxM de t'avoir planté là très tôt ce matin.
Merci pour tes modifs qui m'amènent progressivement vers la solution.
J'ai testé tes sub.
Je suis surpris par ta façon de passer une variable en ne tenant pas
compte du nom ni de sa déclarartion. VBA à l'air de si reconnaître.

Mais dans la deuxième sub videlesdonnees, ça passe pas sur le code :

with workbooks(fil)
for Each oSheet In .Worksheets
If oSheet.Name <> "clients" Then
.oSheet.Activate


Err d'execution 438 : propriété ou méthode non gérée par cet objet
sur le ligne if

pourtant fil contient bien le nom du classeur destination 2005carole.xls.
Mais j'ai l'impression qu'il ne trouve pas le chemin correct
workbook.sheet. ou quelque chose car la première feuille c'est clients
puis la deuxième c'est Janv.

Or If oSheet.Name <> "clients" Then montre oSheet.Name avec le mot Janv,
ce qui indique qu'il a fait le test sur clients. Tant que je reste hors
de la boucle, c'est ok. Mais quand la condition l'amène dans la boucle,
l'objet n'est pas correct.
J'ai fait plusieurs variantes avec point ou pas devant oSheet, mais je
n'ai pas encore trouvé.

Merci pour ton aide.

à+twinley


Bonsoir,

Et si tu fais l'inverse, à savoir executer la macro depuis l'original
et la faire agir dans la copie ?

(non testé)

Sub sauvenouveaubook()
Dim strNewnamepath As String
Dim strNewnameshort As String
Dim awb As String '¬tiveworkbook.name

' ferme les CodePanes et le VBE avant la copie
Ferme_CodeWindow
' "C:aapublic2005carole.xls"
strNewnamepath = "C:aapublic" & Sheets("clients").[A1] & "" _
& Sheets("clients").[A2] & Sheets("clients").[A1] & ".xls"
' "2005carole.xls"
strNewnameshort = Sheets("clients").[A2] & Sheets("clients").[A1] _
& ".xls"

awb = activeworkbook.name

' crée une copie du Wbk dans le même rep
ActiveWorkbook.SaveCopyAs strNewnamepath

' ouvre la copie en même temps que l'original
Workbooks.Open Filename:=strNewnamepath

Workbooks(awb).activate
videlesdonnees(strnewnameshort)
End Sub

Sub videlesdonnees(fil)
Application.EnableEvents = False
' supprime les donneés dans les 13 feuilles Janv à RECAP
Application.ScreenUpdating = False
Dim oSheet As Worksheet
with workbooks(fil)
for Each oSheet In .Worksheets
If oSheet.Name <> "clients" Then
.oSheet.Activate
.activesheet.Range(Range("A1"), _
.activesheet.Range("A1"). _
SpecialCells(xlCellTypeLastCell)).ClearContents
' ActiveWindow.FreezePanes = False
.activesheet.Range("A1").Select
End If
Next oSheet
.Worksheets("clients").Activate
Application.EnableEvents = True
Application.ScreenUpdating = False
end with
End Sub

@+
FxM














Bonsoir à tous

La dernière ligne de sauvenouveaubook fait une err 424 code requis

Le but de la manip :

fermer les fenêtres de code du VBE puis fermer le VBE d'un classeur
faire la copie conforme d'un classeur en changeant de nom
garder l'original ouvert
ouvrir la copie du classeur
les deux classeurs sont dans le même répertoire
lancer une macro de la copie depuis le classeur original
la macro videlesdonnees doit nettoyer les pages de la copie

du coup la macro videlesdonnes a le même nom dans les deux classeurs,
mais pas le même chemin. L'err se trouve bien dans la macro de la copie.


Sub sauvenouveaubook()
Dim strNewnamepath As String
Dim strNewnameshort As String

' ferme les CodePanes et le VBE avant la copie
Ferme_CodeWindow
' "C:aapublic2005carole.xls"
strNewnamepath = "C:aapublic" & Sheets("clients").[A1] & "" _
& Sheets("clients").[A2] & Sheets("clients").[A1] & ".xls"
' "2005carole.xls"
strNewnameshort = Sheets("clients").[A2] & Sheets("clients").[A1] _
& ".xls"
' crée une copie du Wbk dans le même rep
ActiveWorkbook.SaveCopyAs strNewnamepath
' ouvre la copie en même temps que l'original
Workbooks.Open Filename:=strNewnamepath
' lance depuis l'original la sub de la copie !videlesdonnes
xlApp.Run xlBook.Name & "'strNewnameshort'!videlesdonnees"
End Sub



Sub videlesdonnees()
Application.EnableEvents = False
' supprime les donneés dans les 13 feuilles Janv à RECAP
Application.ScreenUpdating = False
Dim oSheet As Worksheet
For Each oSheet In Worksheets
If oSheet.Name <> "clients" Then
oSheet.Activate
Range(Range("A1"),
Range("A1").SpecialCells(xlCellTypeLastCell)).ClearContents
ActiveWindow.FreezePanes = False
Range("A1").Select
End If
Next
Worksheets("clients").Activate
Application.EnableEvents = True
End Sub


Je ne trouve pas d'info sur
xlApp.Run xlBook.Name & "'strNewnameshort'!videlesdonnees"

Je vous remercie pour votre aide.







Avatar
syra
Toc toc toc ...

Bonsoir,
etc... etc...



Bonsoir,

J'obtiens aussi des trucs incompréhensibles avec mon code telque "format
de données non valide"; ne manquait plus que cela. On l'oublie :o)

En repartant de ton code, j'obtiens quelque chose qui semble tenir la
route en remplacant
xlApp.Run xlBook.Name & "'strNewnameshort'!videlesdonnees"
par
Application.Run strNewnameshort & "!videlesdonnees"

Le lien qui va bien : http://cjoint.com/?bguJ6pCkHC

@+
FxM





Bonjour,

Désolé pour FxM de t'avoir planté là très tôt ce matin.
Merci pour tes modifs qui m'amènent progressivement vers la solution.
J'ai testé tes sub.
Je suis surpris par ta façon de passer une variable en ne tenant pas
compte du nom ni de sa déclarartion. VBA à l'air de si reconnaître.

Mais dans la deuxième sub videlesdonnees, ça passe pas sur le code :

with workbooks(fil)
for Each oSheet In .Worksheets
If oSheet.Name <> "clients" Then
.oSheet.Activate


Err d'execution 438 : propriété ou méthode non gérée par cet objet
sur le ligne if

pourtant fil contient bien le nom du classeur destination 2005carole.xls.
Mais j'ai l'impression qu'il ne trouve pas le chemin correct
workbook.sheet. ou quelque chose car la première feuille c'est clients
puis la deuxième c'est Janv.

Or If oSheet.Name <> "clients" Then montre oSheet.Name avec le mot Janv,
ce qui indique qu'il a fait le test sur clients. Tant que je reste hors
de la boucle, c'est ok. Mais quand la condition l'amène dans la boucle,
l'objet n'est pas correct.
J'ai fait plusieurs variantes avec point ou pas devant oSheet, mais je
n'ai pas encore trouvé.

Merci pour ton aide.

à+twinley


Bonsoir,

Et si tu fais l'inverse, à savoir executer la macro depuis l'original
et la faire agir dans la copie ?

(non testé)

Sub sauvenouveaubook()
Dim strNewnamepath As String
Dim strNewnameshort As String
Dim awb As String '¬tiveworkbook.name

' ferme les CodePanes et le VBE avant la copie
Ferme_CodeWindow
' "C:aapublic2005carole.xls"
strNewnamepath = "C:aapublic" & Sheets("clients").[A1] & "" _
& Sheets("clients").[A2] & Sheets("clients").[A1] & ".xls"
' "2005carole.xls"
strNewnameshort = Sheets("clients").[A2] & Sheets("clients").[A1] _
& ".xls"

awb = activeworkbook.name

' crée une copie du Wbk dans le même rep
ActiveWorkbook.SaveCopyAs strNewnamepath

' ouvre la copie en même temps que l'original
Workbooks.Open Filename:=strNewnamepath

Workbooks(awb).activate
videlesdonnees(strnewnameshort)
End Sub

Sub videlesdonnees(fil)
Application.EnableEvents = False
' supprime les donneés dans les 13 feuilles Janv à RECAP
Application.ScreenUpdating = False
Dim oSheet As Worksheet
with workbooks(fil)
for Each oSheet In .Worksheets
If oSheet.Name <> "clients" Then
.oSheet.Activate
.activesheet.Range(Range("A1"), _
.activesheet.Range("A1"). _
SpecialCells(xlCellTypeLastCell)).ClearContents
' ActiveWindow.FreezePanes = False
.activesheet.Range("A1").Select
End If
Next oSheet
.Worksheets("clients").Activate
Application.EnableEvents = True
Application.ScreenUpdating = False
end with
End Sub

@+
FxM














Bonsoir à tous

La dernière ligne de sauvenouveaubook fait une err 424 code requis

Le but de la manip :

fermer les fenêtres de code du VBE puis fermer le VBE d'un classeur
faire la copie conforme d'un classeur en changeant de nom
garder l'original ouvert
ouvrir la copie du classeur
les deux classeurs sont dans le même répertoire
lancer une macro de la copie depuis le classeur original
la macro videlesdonnees doit nettoyer les pages de la copie

du coup la macro videlesdonnes a le même nom dans les deux classeurs,
mais pas le même chemin. L'err se trouve bien dans la macro de la copie.


Sub sauvenouveaubook()
Dim strNewnamepath As String
Dim strNewnameshort As String

' ferme les CodePanes et le VBE avant la copie
Ferme_CodeWindow
' "C:aapublic2005carole.xls"
strNewnamepath = "C:aapublic" & Sheets("clients").[A1] & "" _
& Sheets("clients").[A2] & Sheets("clients").[A1] & ".xls"
' "2005carole.xls"
strNewnameshort = Sheets("clients").[A2] & Sheets("clients").[A1] _
& ".xls"
' crée une copie du Wbk dans le même rep
ActiveWorkbook.SaveCopyAs strNewnamepath
' ouvre la copie en même temps que l'original
Workbooks.Open Filename:=strNewnamepath
' lance depuis l'original la sub de la copie !videlesdonnes
xlApp.Run xlBook.Name & "'strNewnameshort'!videlesdonnees"
End Sub



Sub videlesdonnees()
Application.EnableEvents = False
' supprime les donneés dans les 13 feuilles Janv à RECAP
Application.ScreenUpdating = False
Dim oSheet As Worksheet
For Each oSheet In Worksheets
If oSheet.Name <> "clients" Then
oSheet.Activate
Range(Range("A1"),
Range("A1").SpecialCells(xlCellTypeLastCell)).ClearContents
ActiveWindow.FreezePanes = False
Range("A1").Select
End If
Next
Worksheets("clients").Activate
Application.EnableEvents = True
End Sub


Je ne trouve pas d'info sur
xlApp.Run xlBook.Name & "'strNewnameshort'!videlesdonnees"

Je vous remercie pour votre aide.










Avatar
twinley
Entre Syra, je suis encore habillé...Comment vas-tu ?

Merci FxM, je teste demain matin, car je sors de table et je suis fullup .

à+twinley



Toc toc toc ...

Bonsoir,
etc... etc...



Bonsoir,

J'obtiens aussi des trucs incompréhensibles avec mon code telque "format
de données non valide"; ne manquait plus que cela. On l'oublie :o)

En repartant de ton code, j'obtiens quelque chose qui semble tenir la
route en remplacant
xlApp.Run xlBook.Name & "'strNewnameshort'!videlesdonnees"
par
Application.Run strNewnameshort & "!videlesdonnees"

Le lien qui va bien : http://cjoint.com/?bguJ6pCkHC

@+
FxM





Bonjour,

Désolé pour FxM de t'avoir planté là très tôt ce matin.
Merci pour tes modifs qui m'amènent progressivement vers la solution.
J'ai testé tes sub.
Je suis surpris par ta façon de passer une variable en ne tenant pas
compte du nom ni de sa déclarartion. VBA à l'air de si reconnaître.

Mais dans la deuxième sub videlesdonnees, ça passe pas sur le code :

with workbooks(fil)
for Each oSheet In .Worksheets
If oSheet.Name <> "clients" Then
.oSheet.Activate


Err d'execution 438 : propriété ou méthode non gérée par cet objet
sur le ligne if

pourtant fil contient bien le nom du classeur destination 2005carole.xls.
Mais j'ai l'impression qu'il ne trouve pas le chemin correct
workbook.sheet. ou quelque chose car la première feuille c'est clients
puis la deuxième c'est Janv.

Or If oSheet.Name <> "clients" Then montre oSheet.Name avec le mot Janv,
ce qui indique qu'il a fait le test sur clients. Tant que je reste hors
de la boucle, c'est ok. Mais quand la condition l'amène dans la boucle,
l'objet n'est pas correct.
J'ai fait plusieurs variantes avec point ou pas devant oSheet, mais je
n'ai pas encore trouvé.

Merci pour ton aide.

à+twinley


Bonsoir,

Et si tu fais l'inverse, à savoir executer la macro depuis l'original
et la faire agir dans la copie ?

(non testé)

Sub sauvenouveaubook()
Dim strNewnamepath As String
Dim strNewnameshort As String
Dim awb As String '¬tiveworkbook.name

' ferme les CodePanes et le VBE avant la copie
Ferme_CodeWindow
' "C:aapublic2005carole.xls"
strNewnamepath = "C:aapublic" & Sheets("clients").[A1] & "" _
& Sheets("clients").[A2] & Sheets("clients").[A1] & ".xls"
' "2005carole.xls"
strNewnameshort = Sheets("clients").[A2] & Sheets("clients").[A1] _
& ".xls"

awb = activeworkbook.name

' crée une copie du Wbk dans le même rep
ActiveWorkbook.SaveCopyAs strNewnamepath

' ouvre la copie en même temps que l'original
Workbooks.Open Filename:=strNewnamepath

Workbooks(awb).activate
videlesdonnees(strnewnameshort)
End Sub

Sub videlesdonnees(fil)
Application.EnableEvents = False
' supprime les donneés dans les 13 feuilles Janv à RECAP
Application.ScreenUpdating = False
Dim oSheet As Worksheet
with workbooks(fil)
for Each oSheet In .Worksheets
If oSheet.Name <> "clients" Then
.oSheet.Activate
.activesheet.Range(Range("A1"), _
.activesheet.Range("A1"). _
SpecialCells(xlCellTypeLastCell)).ClearContents
' ActiveWindow.FreezePanes = False
.activesheet.Range("A1").Select
End If
Next oSheet
.Worksheets("clients").Activate
Application.EnableEvents = True
Application.ScreenUpdating = False
end with
End Sub

@+
FxM














Bonsoir à tous

La dernière ligne de sauvenouveaubook fait une err 424 code requis

Le but de la manip :

fermer les fenêtres de code du VBE puis fermer le VBE d'un classeur
faire la copie conforme d'un classeur en changeant de nom
garder l'original ouvert
ouvrir la copie du classeur
les deux classeurs sont dans le même répertoire
lancer une macro de la copie depuis le classeur original
la macro videlesdonnees doit nettoyer les pages de la copie

du coup la macro videlesdonnes a le même nom dans les deux classeurs,
mais pas le même chemin. L'err se trouve bien dans la macro de la copie.


Sub sauvenouveaubook()
Dim strNewnamepath As String
Dim strNewnameshort As String

' ferme les CodePanes et le VBE avant la copie
Ferme_CodeWindow
' "C:aapublic2005carole.xls"
strNewnamepath = "C:aapublic" & Sheets("clients").[A1] & "" _
& Sheets("clients").[A2] & Sheets("clients").[A1] & ".xls"
' "2005carole.xls"
strNewnameshort = Sheets("clients").[A2] & Sheets("clients").[A1] _
& ".xls"
' crée une copie du Wbk dans le même rep
ActiveWorkbook.SaveCopyAs strNewnamepath
' ouvre la copie en même temps que l'original
Workbooks.Open Filename:=strNewnamepath
' lance depuis l'original la sub de la copie !videlesdonnes
xlApp.Run xlBook.Name & "'strNewnameshort'!videlesdonnees"
End Sub



Sub videlesdonnees()
Application.EnableEvents = False
' supprime les donneés dans les 13 feuilles Janv à RECAP
Application.ScreenUpdating = False
Dim oSheet As Worksheet
For Each oSheet In Worksheets
If oSheet.Name <> "clients" Then
oSheet.Activate
Range(Range("A1"),
Range("A1").SpecialCells(xlCellTypeLastCell)).ClearContents
ActiveWindow.FreezePanes = False
Range("A1").Select
End If
Next
Worksheets("clients").Activate
Application.EnableEvents = True
End Sub


Je ne trouve pas d'info sur
xlApp.Run xlBook.Name & "'strNewnameshort'!videlesdonnees"

Je vous remercie pour votre aide.












Avatar
FxM
Toc toc toc ...

Bonsoir,
etc... etc...



Bonsoir,

Ce n'est pas beau de tirer la langue <:oP
(blague interne)

@+
FxM

Avatar
twinley
Bonsoir FxM

Ton classeur-exemple fait exactement ce que je veux. Bravo.

J'ai eu un coup au coeur quand j'ai vu la disposition des onglets. C'est
exactement mon classeur.
Tu ferai un bon devin.

Merci pour ton aide

à+twinley

Bonsoir,

J'obtiens aussi des trucs incompréhensibles avec mon code telque "format
de données non valide"; ne manquait plus que cela. On l'oublie :o)

En repartant de ton code, j'obtiens quelque chose qui semble tenir la
route en remplacant
xlApp.Run xlBook.Name & "'strNewnameshort'!videlesdonnees"
par
Application.Run strNewnameshort & "!videlesdonnees"

Le lien qui va bien : http://cjoint.com/?bguJ6pCkHC

@+
FxM






Bonjour,

Désolé pour FxM de t'avoir planté là très tôt ce matin.
Merci pour tes modifs qui m'amènent progressivement vers la solution.
J'ai testé tes sub.
Je suis surpris par ta façon de passer une variable en ne tenant pas
compte du nom ni de sa déclarartion. VBA à l'air de si reconnaître.

Mais dans la deuxième sub videlesdonnees, ça passe pas sur le code :

with workbooks(fil)
for Each oSheet In .Worksheets
If oSheet.Name <> "clients" Then
.oSheet.Activate


Err d'execution 438 : propriété ou méthode non gérée par cet objet
sur le ligne if

pourtant fil contient bien le nom du classeur destination 2005carole.xls.
Mais j'ai l'impression qu'il ne trouve pas le chemin correct
workbook.sheet. ou quelque chose car la première feuille c'est clients
puis la deuxième c'est Janv.

Or If oSheet.Name <> "clients" Then montre oSheet.Name avec le mot
Janv, ce qui indique qu'il a fait le test sur clients. Tant que je
reste hors de la boucle, c'est ok. Mais quand la condition l'amène
dans la boucle, l'objet n'est pas correct.
J'ai fait plusieurs variantes avec point ou pas devant oSheet, mais je
n'ai pas encore trouvé.

Merci pour ton aide.

à+twinley


Bonsoir,

Et si tu fais l'inverse, à savoir executer la macro depuis l'original
et la faire agir dans la copie ?

(non testé)

Sub sauvenouveaubook()
Dim strNewnamepath As String
Dim strNewnameshort As String
Dim awb As String '¬tiveworkbook.name

' ferme les CodePanes et le VBE avant la copie
Ferme_CodeWindow
' "C:aapublic2005carole.xls"
strNewnamepath = "C:aapublic" & Sheets("clients").[A1] & "" _
& Sheets("clients").[A2] & Sheets("clients").[A1] & ".xls"
' "2005carole.xls"
strNewnameshort = Sheets("clients").[A2] & Sheets("clients").[A1] _
& ".xls"

awb = activeworkbook.name

' crée une copie du Wbk dans le même rep
ActiveWorkbook.SaveCopyAs strNewnamepath

' ouvre la copie en même temps que l'original
Workbooks.Open Filename:=strNewnamepath

Workbooks(awb).activate
videlesdonnees(strnewnameshort)
End Sub

Sub videlesdonnees(fil)
Application.EnableEvents = False
' supprime les donneés dans les 13 feuilles Janv à RECAP
Application.ScreenUpdating = False
Dim oSheet As Worksheet
with workbooks(fil)
for Each oSheet In .Worksheets
If oSheet.Name <> "clients" Then
.oSheet.Activate
.activesheet.Range(Range("A1"), _
.activesheet.Range("A1"). _
SpecialCells(xlCellTypeLastCell)).ClearContents
' ActiveWindow.FreezePanes = False
.activesheet.Range("A1").Select
End If
Next oSheet
.Worksheets("clients").Activate
Application.EnableEvents = True
Application.ScreenUpdating = False
end with
End Sub

@+
FxM














Bonsoir à tous

La dernière ligne de sauvenouveaubook fait une err 424 code requis

Le but de la manip :

fermer les fenêtres de code du VBE puis fermer le VBE d'un classeur
faire la copie conforme d'un classeur en changeant de nom
garder l'original ouvert
ouvrir la copie du classeur
les deux classeurs sont dans le même répertoire
lancer une macro de la copie depuis le classeur original
la macro videlesdonnees doit nettoyer les pages de la copie

du coup la macro videlesdonnes a le même nom dans les deux
classeurs, mais pas le même chemin. L'err se trouve bien dans la
macro de la copie.


Sub sauvenouveaubook()
Dim strNewnamepath As String
Dim strNewnameshort As String

' ferme les CodePanes et le VBE avant la copie
Ferme_CodeWindow
' "C:aapublic2005carole.xls"
strNewnamepath = "C:aapublic" & Sheets("clients").[A1] & "" _
& Sheets("clients").[A2] & Sheets("clients").[A1] & ".xls"
' "2005carole.xls"
strNewnameshort = Sheets("clients").[A2] & Sheets("clients").[A1] _
& ".xls"
' crée une copie du Wbk dans le même rep
ActiveWorkbook.SaveCopyAs strNewnamepath
' ouvre la copie en même temps que l'original
Workbooks.Open Filename:=strNewnamepath
' lance depuis l'original la sub de la copie !videlesdonnes
xlApp.Run xlBook.Name & "'strNewnameshort'!videlesdonnees"
End Sub



Sub videlesdonnees()
Application.EnableEvents = False
' supprime les donneés dans les 13 feuilles Janv à RECAP
Application.ScreenUpdating = False
Dim oSheet As Worksheet
For Each oSheet In Worksheets
If oSheet.Name <> "clients" Then
oSheet.Activate
Range(Range("A1"),
Range("A1").SpecialCells(xlCellTypeLastCell)).ClearContents
ActiveWindow.FreezePanes = False
Range("A1").Select
End If
Next
Worksheets("clients").Activate
Application.EnableEvents = True
End Sub


Je ne trouve pas d'info sur
xlApp.Run xlBook.Name & "'strNewnameshort'!videlesdonnees"

Je vous remercie pour votre aide.









Avatar
FxM
Hug twinley,

Bonsoir FxM

Ton classeur-exemple fait exactement ce que je veux. Bravo.
Z'en prie. C'est avec qui tu sais et ce que tu sais :o)


J'ai eu un coup au coeur quand j'ai vu la disposition des onglets. C'est
exactement mon classeur.
Tu ferais un bon devin.
Ca, c'est plutôt mon intuition féminine qui ... :o)


@+
FxM

Avatar
twinley
:-D

méfie toi, un peu de rimel et des bas résille, et certains pourraient se
méprendre...

à+twinley

Hug twinley,


Bonsoir FxM

Ton classeur-exemple fait exactement ce que je veux. Bravo.


Z'en prie. C'est avec qui tu sais et ce que tu sais :o)

J'ai eu un coup au coeur quand j'ai vu la disposition des onglets.
C'est exactement mon classeur.
Tu ferais un bon devin.


Ca, c'est plutôt mon intuition féminine qui ... :o)

@+
FxM