FairesSuivreMacroDansNouveauClasseur

M

Moa

Guest
Bonsoir à tous.

Voilà :

J'ai un classeur, avec une macro, qui duplique des feuilles, de ce classeur, en crée un nouveau, fait des "copier/coller/valeurs", renomme les feuilles, etc...et pour finir, donne un nom au nouveau classeur, en le sauvegardant, et ferme le classeur d'origine.

Jusque là tout va bien.

Mais le problème, est que dans le classeur d'origine, j'ai trois autres macros, que je voudrais faire suivre dans le nouveau classeur.

Car, une fois le classeur d'origine, fermé, je n'ai plus accès, à ces macros.

Y'a-t-il un moyen pour les faire suivre ?

Merci beaucoup d'avance.

@ +

Moa
 
@

@+Thierry

Guest
Salut Moa


Il y a cette solution, mais il faut bien comprendre que pour VBA on copie toutes les lignes contenues dans un module entier, et pas une macro. Donc à toi de placer les macros qui doivent suivrent le nouveau classeur dans le module adéquate. (ici donc c'est "Module1")

Il est bien entendu que nous sommes dans le même contexte que j'expliquais à Christine, il faut que ton nouveau classeur soit déjà sauver comme dans cet exemple "New.xls" et que ce classeur soit ouvert.

Il est aussi bien compris que ce code est à placer dans le calsseur Maître et pas celui de destination qui est donc "New.xls"

Il est aussi compris que ce classeur "New.xls" ne comprend pas déjà un Module1...

Code de Frédérique Singonneau
Sub CopieCodeModule()
Dim S As String, Wbk As Workbook

With ActiveWorkbook.VBProject.VBComponents("Module1").CodeModule
S = .Lines(1, .CountOfLines)
End With

Set Wbk = Workbooks("New.xls")
Wbk.VBProject.VBComponents.Add 1
With Wbk.VBProject.VBComponents("Module1").CodeModule
.AddFromString S
End With

End Sub

Bon App
@+Thierry
 
M

Moa

Guest
Ok, merci Thierry, mais justement, je ne peux pas respecter ces trois conditions, puisque le nom de mon classeur change toutes les semaines.

Donc, je ne peux pas donner de nom de classeur, dans ma macro.

Je vais me tourner, vers l'autre façon possible, qui est de faire une macro, qui va créer une autre macro.

Je vais étudier ton autre réponse.

Merci quand-même...


@ +

Moa
 
C

Christine

Guest
Bonjour,

Voilà la solution que j'ai utilisé pour insérer une instruction dans thisworkbook et le module comprenant les macros nécessaires à l'utilisation de l'application.

Dim X As Integer
Sub SAUVEGARDE_thisWorkbook_AG()

With Workbooks("fa4glrec.xls").VBProject.VBComponents("ThisWorkbook").CodeModule
X = .CountOfLines
.InsertLines X + 1, "Private Sub Workbook_Open()"
.InsertLines X + 2, "DEBUT_DE_TRAVAIL_AG"
.InsertLines X + 3, "End Sub"
End With

' Exporter le module de ce classeur
Filename = ThisWorkbook.Path & "\tempmodxxx.bas"
ThisWorkbook.VBProject.VBComponents("CPT_ASS_MENU").Export Filename

' Remplacer le module dans le classeur de destination
Set VBP = ActiveWorkbook.VBProject
With VBP.VBComponents
.Import Filename
End With

End Sub


Ici le nom du fichier est "fa4glrec.xls"
le nom du module est "CPT_ASS_MENU"
"DEBUT_DE_TRAVAIL_AG" est le nom de la macro qui se situe dans le module ci-dessus.

Donne le nom du nouveau fichier que tu affectes à une variable, et remplace cette variable dans la formule ci-dessous

exemple :

NouveauNom = "toto" & ".xls"
With Workbooks(NouveauNom).VBProject.VBComponents...
...

Voilà ma petite contribution (si j'ai bien compirs la question !) à ce super forum.

Bon courage

Christine
 
Haut Bas