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 Sub

et 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 Sub

La 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"

Rechercher des sujets similaires à "ecrire macro"