IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

copie de module par code


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 238
    Par défaut copie de module par code
    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

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2013
    Messages : 27
    Par défaut
    Quelque chose du genre


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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)

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    La macro suivante copie le module "Module 1" du classeur actif et l'importe dans le classeur contenant la macro.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 238
    Par défaut
    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)

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Eh bien, fais l'inverse !

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 238
    Par défaut
    Daniel.C

    Je ne comprend pas ce que signifie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Kill "C:\temp\export.bas"
    Ni ce que se fichier fait la, car moi je ne l'ai pas la ^^'

  7. #7
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    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.

  8. #8
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 238
    Par défaut
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.VBProject.VBComponents("feuille_importer").Export "C:\export.bas"
    il me met un message d'erreur qui est :

    la méthode 'VBProject' de l'objet '_Worbook' a échoué

    Je me demande donc si il faut une référence spéciale..
    Cordialement

  9. #9
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2013
    Messages : 27
    Par défaut
    Citation Envoyé par sharox Voir le message
    Libesa, merci pour ton aide, mais malheureusement ce que tu m'as donné ne fonctionne pas
    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) ?

  10. #10
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 238
    Par défaut
    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.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    (tu as oublié un "s" )
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set objF = ThisWorkbook.VBProject.VBComponents("Module_export")
    sois disant, la méthode 'VBProject' de l'objet '_Workbook' a échoué


    Cordialement

  11. #11
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2013
    Messages : 27
    Par défaut
    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.

  12. #12
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 238
    Par défaut
    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

  13. #13
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2013
    Messages : 27
    Par défaut
    Je me demandais hier soir si j'etais le seul clampin a encore bosser sur Excel 2003, ben non on est au moins 2

  14. #14
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 238
    Par défaut
    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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Cordialement

  15. #15
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    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 ?

  16. #16
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 238
    Par défaut
    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

  17. #17
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2013
    Messages : 27
    Par défaut
    Pour effacer les lignes tu utilises simplement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objF.CodeModule.DeleteLines LigDeb, NbLig
    dans ton cas pour tout effacer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objF.CodeModule.DeleteLines 1, objF.CodeModule.CountOfLines
    en ayant bien sur affecté objF au module que tu veux effacer

  18. #18
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Le code que tu m'as fournis, il ne fonctionne pas
    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.

  19. #19
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 238
    Par défaut
    -_- 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

  20. #20
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2013
    Messages : 27
    Par défaut
    Ton code devient donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. copie de module par code
    Par sharox dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/11/2013, 10h25
  2. [D2009][Win7]Installation de police ttf par code de copie
    Par istam3 dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 05/11/2010, 14h13
  3. [Source]Supprimer par code des lignes de codes ou un Module
    Par mortalino dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 27/01/2007, 16h37
  4. [VCL] Scroller un contrôle par code
    Par sbeu dans le forum Composants VCL
    Réponses: 3
    Dernier message: 31/03/2004, 10h39
  5. [VB6] Datagrid afficher ou cacher des colonnes par code
    Par soazig dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 06/02/2003, 17h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo