VBA - lancer une macro de la copie depuis le classeur original
Le
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
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

Poser une question


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
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
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 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
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
Bonsoir,
etc... etc...