Ecrire Macro depuis Macro
Bonjour !
Je souhaiterais écrire depuis un classeur, une macro dans un autre classeur
Mais même en ayant activé la référence "Visual basic For Application Extensibility 5.3", cela ne fonctionne pas...
J'en ai testé plusieurs et toujours même erreur à la ligne "VbComp In ThisWorkbook.VBProject.VBComponents"
Quelqu'un peut-il m'aider ?
Bonjour,
Ici, une procédure pour copier des lignes de code d'un module situé dans un classeur à un autre module situé dans un autre classeur :
Sub Copier()
Dim Module As Object
Dim NouvModule As Object
Dim Cls1 As Workbook
Dim Cls2 As Workbook
Dim Debut As Integer
Set Cls1 = ThisWorkbook
Set Cls2 = Workbooks("Classeur2.xlsm")
Set Module = Cls1.VBProject.VBComponents("Module1")
'si le module n'existe pas, le crée
On Error Resume Next
Set NouvModule = Cls2.VBProject.VBComponents("Module1")
If Err.Number <> 0 Then: Set NouvModule = Cls2.VBProject.VBComponents.Add(1)
'supprime le gestionnaire d'erreur
On Error GoTo 0
'copie les lignes de code d'un module à l'autre
With Module.CodeModule
If .Lines(1, 1) = "Option Explicit" Then Debut = 3 Else Debut = 2
NouvModule.CodeModule.InsertLines NouvModule.CodeModule.CountOfLines + 1, .Lines(Debut, .CountOfLines)
End With
End Subet ici, l'écriture de lignes de code dans le module d'un autre classeur nommé "Classeur2.xlsm" et bien sûr, le classeur doit être ouvert :
Sub Ecrire()
Dim Module As Object
Dim Cls As Workbook
Set Cls = Workbooks("Classeur2.xlsm")
'si le module n'existe pas, le crée
On Error Resume Next
Set Module = Cls.VBProject.VBComponents("Module1")
If Err.Number <> 0 Then: Set Module = Cls.VBProject.VBComponents.Add(1)
'supprime le gestionnaire d'erreur
On Error GoTo 0
'écrit les lignes de code
With Module.CodeModule
.InsertLines .CountOfLines + 1, "Sub Ma_Macro_A_Moi()"
.InsertLines .CountOfLines + 1, ""
.InsertLines .CountOfLines + 1, " Dim I as integer"
.InsertLines .CountOfLines + 1, ""
.InsertLines .CountOfLines + 1, " For I = 1 To 10"
.InsertLines .CountOfLines + 1, " "
.InsertLines .CountOfLines + 1, " ThisWorkbook.Worksheets(1).Cells(I, 1).Value = I"
.InsertLines .CountOfLines + 1, ""
.InsertLines .CountOfLines + 1, " Next I"
.InsertLines .CountOfLines + 1, ""
.InsertLines .CountOfLines + 1, " Msgbox ""Voilà, la boucle est fini et la valeur de I est '"" & I & ""' !"""
.InsertLines .CountOfLines + 1, ""
.InsertLines .CountOfLines + 1, "End Sub"
End With
End SubLa relation est tardive donc, pas nécessaire de cocher la référence !
Merci beaucoup ! Je teste ça de suite....
----- EDIT -----
Dans la macro "Copier" : j'ai une erreure d'exécution '1004' à la ligne "Set Module = Cls1.VBProject.VBComponents("Module1")"
Dans la macro "Ecrire" : j'ai une erreure d'exécution '91' à la ligne "With Module.CodeModule"