[RESOLU] Copier contenu code Microsoft Excel Objets ThisWorkbook vers autre classeur

laurent950

XLDnaute Accro
Bonsoir Le Forum,

J’aimerais copier les modules VBA d’un classeur vers un autre que je crée : dans le Classeur « Userfom non modal »

Récupérer les code dans ces modules (l’ingrégralité du module)

- Microsoft Excel Objets : extension ( ?)
Code dans Sheet1 (Information) ‘ J’ai besoin du code contenu dans ce module
Code dans ThisWorkbook ‘ J’ai besoin du code contenu dans ce module


- Feuilles : extension .frm
Code dans InfoUserfom1 ‘ J’ai besoin du code contenu dans ce module


- Modules : extension .bas
Code dans AfficheUsurform ‘ J’ai besoin du code contenu dans ce module
Code dans Info ‘ J’ai besoin du code contenu dans ce module
Code dans SousRoutine ‘ J’ai besoin du code contenu dans ce module


Je voudrais aussi rajouter la feuille « Graph1 » a ce classeur crée et enregistrer se claseur sous le nom = Information.xlsm

***************************************************************************

Je n’ai pas besoin de ces modules : Ne pas les copier pour cet exemple

- Microsoft Excel Objets :
Code dans Chart1 (Graph1) ‘ J’ai n’ai pas besoin du code contenu dans ce module
Code dans Sheet2 (Feuil2) ‘ J’ai n’ai pas besoin du code contenu dans ce module

- Modules
Code dans Test1NePasCopier ‘ J’ai n’ai pas besoin du code contenu dans ce module
Code dans TransfertModuleTest ‘ J’ai n’ai pas besoin du code contenu dans ce module


Macro que je veux faire : le code est contenu dans ce module nom (TransfertModuleTest)

J’ai le début mais pas la fin

Sub CopieFeuilleEtModule()
Dim Wbk As Workbook, tmpBas$

'copier la feuille dans un nouveau classeur
Sheets("Information").Copy
Set Wbk = ActiveWorkbook

' Je sais pas exporter ces modules de codes dans l'autre classeur !

' - Microsoft Excel Objets : extension ( ?)
' - Code dans Sheet1 (Information) ' J'ai besoin du code contenu dans ce module
' - Code dans ThisWorkbook ' J'ai besoin du code contenu dans ce module

' je sais exporter ces modules de codes dans l'autre classeur ! (ca Fonctionne)


' - Feuilles : extension .frm
tmpBas1 = "c:\InfoUserfom1.frm"
ThisWorkbook.VBProject.VBComponents("InfoUserForm1").Export tmpBas1
Wbk.VBProject.VBComponents.Import tmpBas1
Kill tmpBas1


' - Modules : extension .bas
tmpBas2 = "c:\AfficheUsurform.bas"
ThisWorkbook.VBProject.VBComponents("AfficheUsurform").Export tmpBas2
Wbk.VBProject.VBComponents.Import tmpBas2
Kill tmpBas2

tmpBas3 = "c:\Info.bas"
ThisWorkbook.VBProject.VBComponents("Info").Export tmpBas3
Wbk.VBProject.VBComponents.Import tmpBas3
Kill tmpBas3


tmpBas4 = "c:\SousRoutine.bas"
ThisWorkbook.VBProject.VBComponents("SousRoutine").Export tmpBas4
Wbk.VBProject.VBComponents.Import tmpBas4
Kill tmpBas4


End Sub

Merci de votre aide

laurent
 

Pièces jointes

  • userform non modal.xls
    85 KB · Affichages: 161
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Copier contenu du code - Microsoft Excel Objets ThisWorkbook dans un autres clas

Bonsoir.
Savez vous au moins que pour installer un module d'un projet VBA voisin il suffit de le glisser déplacer vers le projet destinataire dans l'explorateur de projet ? Pareil pour un userform.
Le déplacement d'une feuille vers un autre classeur depuis Excel copie le code avec.
Sinon pour copier le code d'une feuille vers une autre feuille du même classeur ou d'un autre, il suffit de sélectionner tout le code, Ctrl+C, aller dans le module destinataire, éventuellement sélectionner un ancien code à remplacer, puis Ctrl+V.
Toutes ces manoeuvres me semblent assez simple pour que je ne comprenne pas trop le but de votre code.
Si c'est parce que vous dupliquez souvent ce code, il vaudrait mieux à mon avis un seul classeur de macro travaillant avec les autres classeurs, démunis, eux, de macros.
Cela dit, la propriété CodeModule d'un VbComponent permet d'accéder au code.
La référence "Microsoft Visual Basic for Application Extensibility 5.3" peut aider à manipuler ces entités.

Cordialement.
 

laurent950

XLDnaute Accro
Re : Copier contenu du code - Microsoft Excel Objets ThisWorkbook dans un autres clas

Bonsoir Dranred,

Je savais cette information, mais j'ai abandonner car le fichier source a trop de module.

j'aimerais en faite dupliquer un classeur qui contient divers module avec du code, il y a un usurform qui est activé avec le code qui est placer dans le ThisWorkbook (est que je ne sais pas récupérer)

Je dois dupliquer 150 fois se classeur avec des macro mais pas toutes car je dois distribuer ce fichier. j'aimerais connaitre l'opération pour récuperer ce bout de code, je ne connais pas l'extension de ThisWorkbook

peut être vous avez une solution et peut être je peux commenter plus la macro que j'ai faite pour éventuellement completer se code qu'il me manque.

je vous remerci de votre temps passé et de votre réponse, je continu a chercher de mon côté mais impossible de trouver cette information.

Merci

Laurent
 

Pierrot93

XLDnaute Barbatruc
Re : Copier contenu du code - Microsoft Excel Objets ThisWorkbook dans un autres clas

Bonjour Laurent, Bernard,

pas sur de situer bien ton problème, regarde peut être le code ci-dessous si il peut t'aider...
Code:
Option Explicit
Sub test()
Dim wbs As Workbook, wbd As Workbook, v As Object, f As String

Set wbs = Workbooks("Source.xls")
Set wbd = Workbooks("Destination.xls")

If wbd.Sheets.Count < wbs.Sheets.Count Then Exit Sub

With wbs.VBProject
    For Each v In .VBComponents
        If v.Type < 4 Then
            f = wbs.Path & "\test." & Choose(v.Type, "bas", "cls", "frm")
            v.Export f
            wbd.VBProject.VBComponents.Import f
            Kill f
            If v.Type = 3 Then Kill Left(f, Len(f) - 1) & "x"
        ElseIf v.Type = 100 Then
            If v.CodeModule.CountOfLines > 0 Then
                With wbd.VBProject.VBComponents(v.CodeModule).CodeModule
                    .DeleteLines 1, .CountOfLines
                    .InsertLines .CountOfLines + 1, v.CodeModule.Lines(1, v.CodeModule.CountOfLines)
                End With
            End If
        End If
    Next v
End With
End Sub

bonne journée
@+
 

tototiti2008

XLDnaute Barbatruc
Re : Copier contenu du code - Microsoft Excel Objets ThisWorkbook dans un autres clas

Bonjour à tous,

j'aimerais connaitre l'opération pour récuperer ce bout de code, je ne connais pas l'extension de ThisWorkbook

Eh bien chez moi, si je fait un clic droit - Exporter sur Thisworkbook, il me propose de l'enregistrer en .cls (Classe)

Maintenant une autre solution pourrait-être de réfléchir dans l'autre sens :
Faire une copie du classeur original (SaveCopyAs par exemple) puis supprimer les éléments non voulus...

Pour compléter la réponse de Pierrot, du code pour manipuler tout ça par là :
Visual Basic Editor
 

laurent950

XLDnaute Accro
Resolu Copier contenu code Microsoft Excel Objets ThisWorkbook ver un autres classeur

Bonsoir le Forum.

Comment importer un module type cls dans un module ThisWorkbook ?

Il est possible de sauvegarder la procédure d'un module objet ThisWorkbook en l'enregistrant sur le disque dur (extension de fichier .cls). Vous pouvez ensuite réimporter ce fichier dans un autre classeur, pour par exemple effectuer la mise à jour d'une procédure. Lors de l'import, le fichier va être créé comme un module de classe et non en lieu et place du module ThisWorkbook.

La procédure suivante permet d'automatiser le chargement du fichier .cls et le remplacement des macros dans le module objet ThisWorkbook.

Voici la procédure :


'Nécessite d'activer la référence "Microsoft Visual Basic for Applications Extensibility 5.3"
Dim Wb As Workbook
Dim oModule As CodeModule
Dim VbComp As VBComponent
Dim x As Integer
Dim Cible As String

Cible = "NomModule"
'Définit le classeur de destination (qui doit être préalablement ouvert).
Set Wb = Workbooks("NomClasseur.xls")

'Charge le module dans le classeur
Set VbComp = Wb.VBProject.VBComponents.Import("C:\ThisWorkbook. cls")
'Le renomme (pour le supprimer plus facilement ultérieurement
VbComp.Name = Cible

Set oModule = VbComp.CodeModule

'Transfère les données chargées dans ThisWorkbook.
'Attention les données existantes dans "ThisWorkbook" sont écrasées.
With Wb.VBProject.VBComponents("ThisWorkbook").CodeModu le
x = .CountOfLines
.DeleteLines 1, x
.InsertLines 1, oModule.Lines(1, oModule.CountOfLines)
End With

'Suppression du module précédemment chargé
With Wb.VBProject.VBComponents
.Remove .Item(Cible)
End With

J'ai trouver cela sur ce site très bien fait.

FAQ MS-Excel

Laurent
 

Dranreb

XLDnaute Barbatruc
Re : Copier contenu du code - Microsoft Excel Objets ThisWorkbook dans un autres clas

Voila. Comme on vous le disait: la propriété CodeModule d'un VbComponent permet d'accéder au code, et permet donc de transvaser du code vers les modules de classes correspondant à des objets Excel, à defaut de pouvoir les importer de façon permanente.
 

laurent950

XLDnaute Accro
Re : Copier contenu du code - Microsoft Excel Objets ThisWorkbook dans un autres clas

Bonjour Dranred, Pierrot93 ettototiti2008.

J’ai ajouté la solution et je remercie Dranred de m’avoir aiguillé sur un des problèmes qui ma bloquer un moment, j’ai pu trouver cette solution grâce a lui et aussi a ce forum qui est très bien fait est complet.

J’aurais aimé savoir comment ajouter cette extension, “Microsoft Visual Basic for Application Extensibility 5.3” car je ne l’ai pas trouvé dans les compléments.

Macro complémentaire depuis Excel : je n’ai pas cette option
Et
Outils / préférences depuis l’éditeur de macro Excel : je n’ai pas cette option non plus

Comment faire pour activer cette fonction ou la télécharger, ou peux être je dois la chercher a un autres endroit que je vous ai cité ?

“Microsoft Visual Basic for Application Extensibility 5.3” est ce que cela se telecharge sur internet ?

Merci par avance de votre réponse

Laurent
 

Dranreb

XLDnaute Barbatruc
Re : Copier contenu du code - Microsoft Excel Objets ThisWorkbook dans un autres clas

Bonjour.
Outils / Références et non pas Préférences depuis VBA
sans titre1.gif
Il se peut qu'il soit bien plus bas avant d'avoir été sélectionné.
À +
 

STephane

XLDnaute Occasionnel
Re : [RESOLU] Copier contenu code Microsoft Excel Objets ThisWorkbook vers autre clas

Merci pour ce code. Après avoir importé 70 modules dans un classeur qui en comporte déjà 180, je rencontrais un problème "Out of memory", j'ai donc reconstruit mon classeur, et ai réimporté ces 70 modules ;-)

Pour l'instant cela tient la route.
 

tototiti2008

XLDnaute Barbatruc
Re : [RESOLU] Copier contenu code Microsoft Excel Objets ThisWorkbook vers autre clas

Bonjour à tous,

Après avoir importé 70 modules dans un classeur qui en comporte déjà 180, je rencontrais un problème "Out of memory", j'ai donc reconstruit mon classeur, et ai réimporté ces 70 modules ;-)

:eek: Par curiosité ça fait quoi comme code ? c'est un traducteur universel terrien - martien ?
250 Modules, rien que ça... :rolleyes:
Quand parfois on a l'impression de travailler sur des usines à gaz, là je crois qu'on dépasse (de loin pour ma part) les tailles de classeurs avec lesquels j'ai travaillé :)
 

STephane

XLDnaute Occasionnel
Re : [RESOLU] Copier contenu code Microsoft Excel Objets ThisWorkbook vers autre clas

C'est ma "base de connaissances" excel et pas du tout une application, stockée dans un fichier de macros personnelles.
J'y ai importé les 70 modules de Chip Pearson, le problème c'est le conflit entre macros et autres.

Je pourrais aussi y importer les feuilles de Frédéric Sigonneau mais je réfléchirai peut-être à ne charger que ceux dont j'ai besoin.
 

tototiti2008

XLDnaute Barbatruc
Re : [RESOLU] Copier contenu code Microsoft Excel Objets ThisWorkbook vers autre clas

Bonjour à tous,

Ah, je comprend mieux ;), en effet ça doit entrainer des conflits, tout dans le même classeur...
Si ça t'intéresse dans ma signature un lien vers un outil que j'avais fait pour organiser ses codes VBA / tutos Excel etc...
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin