[excel][vba]Creer une macro depuis une macro.
Résolu/Fermé
leguims
Messages postés
2
Date d'inscription
lundi 4 avril 2011
Statut
Membre
Dernière intervention
5 avril 2011
-
Modifié par leguims le 4/04/2011 à 18:44
leguims Messages postés 2 Date d'inscription lundi 4 avril 2011 Statut Membre Dernière intervention 5 avril 2011 - 5 avril 2011 à 15:44
leguims Messages postés 2 Date d'inscription lundi 4 avril 2011 Statut Membre Dernière intervention 5 avril 2011 - 5 avril 2011 à 15:44
A voir également:
- [excel][vba]Creer une macro depuis une macro.
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Créer une liste déroulante excel - Guide
- Créer une adresse hotmail - Guide
- Créer un compte gmail - Guide
- Créer un compte google - Guide
2 réponses
Utilisateur anonyme
4 avril 2011 à 21:48
4 avril 2011 à 21:48
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".
n.b. Pour utiliser ce code, il faut ajouter la référence :
MICROSOFT VISUAL BASIC FOR APPLICATIONS EXTENSIBILITY 5.3
cDT
lUPIN
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
leguims
Messages postés
2
Date d'inscription
lundi 4 avril 2011
Statut
Membre
Dernière intervention
5 avril 2011
5 avril 2011 à 15:44
5 avril 2011 à 15:44
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] https://support.microsoft.com/fr-fr/help/245801
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)
Merci beaucoup "Lupin.PC4". :c)
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] https://support.microsoft.com/fr-fr/help/245801
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)