[excel][vba]Creer une macro depuis une macro. [Résolu/Fermé]

Messages postés
2
Date d'inscription
lundi 4 avril 2011
Statut
Membre
Dernière intervention
5 avril 2011
-
Bonjour,

J'ai créé une macro qui fait exactement ce que je voudrais, seulement, j'aimerai l'insérer dans un document EXCEL qui est lui-même crée par une macro. J'aimerai donc créer une macro dans une feuille depuis une autre macro.

J'ai trouvé quelqu'un qui avait le même projet, mais je me vois mal rentrer le code de cette façon. (voir http://www.vbfrance.com/... ). Avez vous une solution qui m'éviterai de rentrer le code avec des "vbcr" à chaque ligne ?

Salutations, leguims.

Afficher la suite 

2 réponses

Meilleure réponse
1
Merci
Bonjour,

Ici mon classeur contenant la macro se nomme couleurs.xls.

Le module de la macro est copiée dans tous les classeurs
ouverts lors du lancement de la macro.

Le module se nomme "mod_Couleurs".

Public Function ExportCodeModule()

    ' Déclaration des variables
    Dim strCode As String, Compteur As Integer, Indice As Long
    Dim modObj As Object, objMod As Object, Classeur As Workbook
    Dim vbCom As VBComponent, Lignes As Long
    
    ' Set object to the module you want to export.
    Set modObj = Application.VBE.ActiveVBProject.VBComponents.Item("mod_Couleurs")
    ' Place code in a string.
    strCode = modObj.CodeModule.Lines(1, modObj.CodeModule.CountOfLines)
    Compteur = 0
    For Each Classeur In Workbooks
        If (Classeur.Name <> "Couleurs.xls") Then
            ' Create a new module in workbook.
            Classeur.Activate
            Set objMod = Classeur.VBProject.VBComponents
            objMod.Add (vbext_ct_StdModule)
            
            With objMod("Module1").CodeModule
                .DeleteLines 1, .CountOfLines
            End With
            ' Add code to new module from string variable.
            objMod.Item("Module1").CodeModule.AddFromString (strCode)
            objMod.Item("Module1").Name = "mod_Couleurs"
            Compteur = (Compteur + 1)
        End If
    Next Classeur
    MsgBox "Fonction ajouté dans " & Compteur & " classeur(s)."

End Function
'

'


n.b. Pour utiliser ce code, il faut ajouter la référence :

MICROSOFT VISUAL BASIC FOR APPLICATIONS EXTENSIBILITY 5.3

cDT

lUPIN

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 62690 internautes nous ont dit merci ce mois-ci

Messages postés
2
Date d'inscription
lundi 4 avril 2011
Statut
Membre
Dernière intervention
5 avril 2011
0
Merci
Merci de cette réponse qui correspond à ma demande, j'ai testé et ça fonctionne. De plus, ça me permet d'affiner mes recherches sur le sujet grace au mot clef "vbext_ct_StdModule".

Pour ceux qui chercheraient sur le même sujet, j'ai trouvé d'autres références :
- [fr] http://dj.joss.free.fr/ecrisub.htm
- [fr] http://support.microsoft.com/kb/245801/fr

Mais bon, quand on a un exemple, ça aide à trouver des infos similaires. :)


Voici le bout de code adapté à mon contexte :
("NewTraca"=source/"RefStats"=destination)

'Copier la macro dans le fichier "RefStats"
    Dim strCode As String
    Dim vbCom As VBComponent
    Dim modObj As Object
    
    ' Select source document
    Windows(NewTraca).Activate
    ' Set object to the module you want to export.
    Set modObj = _
        Application.VBE.ActiveVBProject.VBComponents.Item("Module99")
    ' Place code in a string.
    strCode = modObj.CodeModule.Lines(1, modObj.CodeModule.CountOfLines)
    ' Select destination document
    Windows(RefStats).Activate
    ' Create a new module in workbook.
    Application.VBE.ActiveVBProject.VBComponents.Add (vbext_ct_StdModule)
    ' Add code to new module from string variable.
    Application.VBE.ActiveVBProject.VBComponents.Item("Module1") _
        .CodeModule.AddFromString (strCode)



Merci beaucoup "Lupin.PC4". :c)