Bonjour a tous
J'aimerais savoir comment copier un module en code ^^
en gros je veux que quand j'appuie sur un bouton il me copie un module du 1er classeur dans le 2eme classeur
Cordialement
Version imprimable
Bonjour a tous
J'aimerais savoir comment copier un module en code ^^
en gros je veux que quand j'appuie sur un bouton il me copie un module du 1er classeur dans le 2eme classeur
Cordialement
Quelque chose du genre
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Dim LigDeb As Long Dim NbLig As Long Dim stCode As String Dim vbNew As Workbook Dim objF As Object Set vbNew=Workbook("AutreClasseur.xlsx") Set objF = ThisWorkbook.VBProject.VBComponents("MonModuleSource") stCode = objF.CodeModule.Lines(LigDeb, NbLig) Set objF = wbNew.VBProject.VBComponents("MonModuleCible") objF.CodeModule.addfromstring (stCode)
Bonjour,
La macro suivante copie le module "Module 1" du classeur actif et l'importe dans le classeur contenant la macro.
Code:
1
2
3
4
5
6
7
8
9
10
11
12 Sub CopieModule() ' suppression d'un fichier d'export On Error Resume Next Kill "C:\temp\export.bas" On Error GoTo 0 ' Export Module 1 ActiveWorkbook.VBProject.VBComponents("module1").Export "C:\temp\export.bas" ' Import Module 1 dans thisworkbook Set Var = Application.VBE.ActiveVBProject.VBComponents Application.VBE.ActiveVBProject.VBComponents.Import "C:\temp\export.bas" Kill "C:\temp\export.bas" End Sub
Libesa, merci pour ton aide, mais malheureusement ce que tu m'as donné ne fonctionne pas :(
Pour Daniel.C Je suis désolé je ne comprend pas ton explication
En gros cette macro copie le module1 du classeur actif, et l'importe dans la classeur contenant la macro => donc je dois mettre cette macro dans la classeur ou je veux que le module soit mis ??
Moi il me faudrait l'inverse, que je mette la macro dans le classeur ou je veux prendre le module, pour l'implanter dans un autre classeur (qui est ouvert)
Eh bien, fais l'inverse !
Daniel.C
Je ne comprend pas ce que signifie :
Ni ce que se fichier fait la, car moi je ne l'ai pas la ^^'Code:Kill "C:\temp\export.bas"
Si tu veux progresser, apprend à te servir de l'aide VBA : tu cliques sur le mot que tu ne connais pas et tu appuies sur F1. "Kill" supprime le fichier. Le fichier .bas est celui dans lequel se fait l'exportation - importation. Il est normal que tu ne l'aies pas. L'instruction est là seulement si, par hasard, tu en avais un.
je sais a quoi ca sert le kill ^^
j'ai joué a certain jeu et le .kill était vachement utile :)
C'est juste le fichier que tu supprimes je ne savais pas ce qu'il définissait
et je me demandais si je devait pas rajouter du "chemin" pour que l'instruction supprime ce même fichier qui est un peu plus loin dans le répertoire ou non
(je ne sais absolument pas si je l'ai ou non)
Ensuite quand j'exécute ton programme, à la ligne :
il me met un message d'erreur qui est :Code:ActiveWorkbook.VBProject.VBComponents("feuille_importer").Export "C:\export.bas"
la méthode 'VBProject' de l'objet '_Worbook' a échoué
Je me demande donc si il faut une référence spéciale..
Cordialement
A une petite faute de frappe près (vbNew est devenu wbNew quelques lignes plus bas) cela fonctionne chez moi.
As tu remplacé les noms bidons que j'ai mis pour l'exemple et les variables LigDeb et NbLig par les valeurs de ton programme?
As tu activé la référence adequate (Microsoft Visual Basic for Applications Extensibility je crois) ?
Bon j'ai l'impression qu'il y a un problème
Donc on va le chercher..
Déjà je suis sous Excel 2003 (Windows 7)
pour la référence j'ai : Microsoft Visual Basic for Applications Extensibility 5.3
Ensuite dans le programme que j'ai commenté, a toi de me dire ou est-ce que je me suis trompé ^^ Je vois très rarement mes erreur, mais c'est rattrapé par le fait que quand on m'en montre une je ne dénie pas l'avoir faite.
(tu as oublié un "s" )Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Sub test_import() ' Déclaration des variables Dim LigDeb As Long Dim NbLig As Long Dim stCode As String Dim vbNew As Workbook Dim objF As Object ' ici, je dois mettre le nom du classeur dans le quel je veux importer Set vbNew = Workbooks ("classeur2 .xls") ' ici, je dois mettre le nom du module a exporter Set objF = ThisWorkbook.VBProject.VBComponents("Module_export") ' ici, je dois mettre les lignes que je veux exporter dans ce module (pas sûr) stCode = objF.CodeModule.Lines(1, 402) ' ici, je dois mettre le nom du module dans le quel je dois intégré ces lignes Set objF = vbNew.VBProject.VBComponents("Moule_import") ' ici, je ne sais pas, peut être que l'ajout est de mode code objF.CodeModule.addfromstring (stCode) End Sub
Set vbNew=Workbook("AutreClasseur.xlsx")
deviens
Set vbNew=Workbooks("AutreClasseur.xlsx")
enfin je pense
Et il me met toujours une erreur après cette ligne :
sois disant, la méthode 'VBProject' de l'objet '_Workbook' a échouéCode:Set objF = ThisWorkbook.VBProject.VBComponents("Module_export")
Cordialement
Effectivement autant ca marche sur Excel 2010, autant ca plante sur Excel 2003!
J'ai trouvé!
Il faut que tu ailles dans Outils/Macro/Sécurité.../Editeurs approuvés, puis cocher Faire confiance au projet VBA.
ET voila.
ha...d'acc
tu viens de me pourrir ma journée ^^
Bon, et vous connaissez pas d'autres méthodes utilisable sur Excel 2003
Les autres méthodes qu'il y a sur le post, ne fonctionne pas non plus
OU je ne sais pas les faire fonctionner
j'ai fait tout les sites internet, et j'essaie d'y adapter a ma sauce mais je ne suis pas un pro donc souvent la sauce tourne au vinaigre ^^
Cordialement
HAAAAAAAAAAAAAAAAAAAAAAA
Ca fonctionne !!!!!!!!!!!!!!!!!!!!!!!!!!!! <3
Je te remercie :)
tu viens de pourrir et d'aiguillé ma journée en 10sec d'intervalle
Je t'en remercie beaucoup !!
Ca fait trop plaisir ^^
Cordialement
Encore merci
Je me demandais hier soir si j'etais le seul clampin a encore bosser sur Excel 2003, ben non on est au moins 2 :D
ha mais mince, un nouveau problème ^^
enfin je pense que pour toi, il est plutôt simple
Je voudrait que avant qu'il copie, il supprime les lignes qu'il y a dans le module ou toutes ces lignes vont aller
^^ nn tkt je fait des grosses journée moi..
7h/12h - 13h30/20h
J'ai trouvé ceci, mais je ne sais pas vraiment comment l'adapter dans mon cas
CordialementCode:
1
2
3
4
5
6
7
8 ' la premiere ligne ca va, je l'ai mis dans Nombre_ligne Nlig = ActiveWorkbook.VBProject.VBComponents("test").CodeModule.CountOfLines 'et a partir d'ici je suis perdu, j'ai fait plein de test, mais rien n'y fait je comprend pas 'c'est surtout au niveau des noms que je suis perdu enfaite MonClasseur = ThisWorkbook.Name Set MonModule = Workbooks(MonClasseur).VBProject.VBComponents("test") MonModule.CodeModule.DeleteLines 1, Nlig
Cette macro supprime les lignes de code du module "test". Est-ce que la macro que je t'ai fournie ne te conviens pas ? Quel est le problème ?
Le code que tu m'as fournis, il ne fonctionne pas
J'ai beau le tournicoter dans tout les sens, il bug...
je ne comprend pas du tout ce qu'il y a dans ton programme, donc je ne sais pas quoi modifier
Le code est Libesa est peut être moins complet, mais je le comprend, je peux donc tester des trucs
En Gros je suis perdu, je suis complètement nul en VB, et chaque jours j'apprend des choses, (en gros cela fait 3/4semaines que j'ai commencé VBA)
et j'ai appris pas mal de truc durant ces semaines, mais avec que je vois il m'en manque encore énormément
Pour effacer les lignes tu utilises simplement:
dans ton cas pour tout effacer:Code:objF.CodeModule.DeleteLines LigDeb, NbLig
en ayant bien sur affecté objF au module que tu veux effacerCode:objF.CodeModule.DeleteLines 1, objF.CodeModule.CountOfLines
Voila qui est clair. Puisque tu le dis... J'ai l'impression que tu t'attaques à un problème trop compliqué pour ton niveau de compréhension.Citation:
Le code que tu m'as fournis, il ne fonctionne pas
-_- Merci bien !!
Encore une fois
C'est abusé comment je cherchais un truc rie na voir...
Merci encore !!
Daniel, ta solution je veux bien la connaitre quand même, avec un peu d'explication si possible
si je te donne des noms bidons (mnémonique) y a moyen que tu me réécrive le code avec ces noms ?
Classeur_imp => classeur ou on doit importer le module
Classeur_exp => classeur ou on doit exporter le module et ou ce situe le bouton
Module_imp => nom du module a importer
Module_exp => nom du module a exporter
Ton code devient donc
Code:
1
2
3
4
5 Set objF = ThisWorkbook.VBProject.VBComponents("Module_export") objF.CodeModule.DeleteLines 1, objF.CodeModule.CountOfLines stCode = objF.CodeModule.Lines(1, 402)