Copie d'un module dans une macro
Bonjour,
J'ai trouvé et exécuté un petit code qui me permet de copier un module du classeur actuelle dans un autre classeur grâce à une macro.
Seulement j'ai un problème : Le code fonctionne lorsque l'éditeur Microsoft Visual Basic est ouvert mais impossible de le faire marcher lorsque je ferme la fenêtre et que j'exécute la macro directement avec un bouton. J'ai une erreur 9 : "l'indice n'appartient pas à la solution".
J'ai d'abord pensé que c'était un problème avec le nom du module, j'ai donc essayer de rajouter l'extension (.bas). mais j'ai le même problème. Est ce que l'un de vous pourrait m'aider s'il vous plait?
Merci !
("Impression" est le nom de mon module/ nomFichier+"_res.xls" est le nom de mon classeur cible/ "Traitement.xls" est le nom de mon dossier source)
Sub ExportModule(nomFichier)
Dim strCode As String
Dim vbCom As VBComponent
Dim modObj As Object
' Select source document
Windows("Traitement.xls").Activate
' Set object to the module you want to export.
Set modObj = Application.VBE.ActiveVBProject.VBComponents.Item("Impression") 'Erreur 9 ICI !
' Place code in a string.
strCode = modObj.CodeModule.Lines(1, modObj.CodeModule.CountOfLines)
' Select destination document
Windows(nomFichier + "_res.xls").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)
Application.VBE.ActiveVBProject.VBComponents.Item("Module1").Name = "Impression"
End SubBonjour
Pas de soucis particulier (juste testé quelques lignes (jusqu'à strCode = modObj.CodeM......)
Mon test
Création d'un module "Impression" avec une macro quelconque
Création d'une macro permettant de lancer ta macro
Sub test()
ExportModule toto
End SubEnsuite que ce soit par l'éditeur ou par un bouton pas de problème
Ton fichier va être indispensable
Merci d'avoir répondu aussi vite !
As tu essayé d'exécuter cette macro sans ouvrir la fenêtre Microsoft Visual Basic? ça fonctionne ?
Mon problème est ici : Mon code est fonctionnel avec un bouton ou pas du moment que l'éditeur de macro est ouvert.
Seulement, lorsque je vais envoyer mon fichier Excel avec le bouton de la macro, le destinataire ne va pas s'amuser à ouvrir l'éditeur de macro pour faire fonctionner mon code ! Et dans ce cas là, ma macro m'affiche l'erreur expliqué ci dessus :/
En effet ça fonctionne...
Je ne peux pas trop t'envoyer mon fichier mais je peux t'expliquer ce qu'il fais rapidement :
Je trie une liste de donnée via un TCD pour cela, je crée un nouveau Classeur(nomFichier+"_res.xls"), dans ce classeur je veux recréer un bouton qui effectue ma macro "Impression" (pour imprimer mon tableau obtenu). A ce moment précis j'ai donc 2 classeur :
- Mon classeur 'Traitement.xls' que j'ai utilisé pour effectuer ma macro principale via un bouton (le TCD)
- Mon classeur 'nomFichier+"_res.xls"' dans lequel se trouve le resultat de mon tableau avec le bouton "Impression"
ma sous-routine ExportModule est donc déjà lancé via une autre macro (ma macro principale).
J'espère que j'ai été clair et que ça pourra t'aider...
Je ne comprends vraiment pas pourquoi cela ne marche pas... j'active pourtant le classeur "Traitement.xls" où se trouve ma macro "Impression"...
Ou peut être pour contourner le problème, existe-il une ligne de code qui me permet d'ouvrir l'éditeur de macro avant d'effectuer ce bout de code ?
Merci
EDIT : En effet, j'ai contourné le problème :
Application.VBE.VBProjects.VBE.MainWindow.Visible = True
ExportModule (nomFichier)
Application.VBE.VBProjects.VBE.MainWindow.Visible = FalseJ'ai entouré l'appel à cette macro de l'ouverture et de la fermeture de l'éditeur de macro et ça fonctionne !
Merci beaucoup pour ton aide rapide en tout cas !!