copier code VBA vers un autre classeur

summer1128

XLDnaute Nouveau
Bonjour,
Je crée à partir d’un classeur maitre (contenant un module standard, et du code dans THISWORKBOOK) un autre classeur, je souhaiterai retrouver le code contenu dans « thisworkbook » dans le nouveau classeur.
comment puis je faire pour copier le code automatiquement via VBA de « thisworkbook » du classeur maitre vers le nouveau classeur généré ??:(
en esperant avoir été claire
je vous remercie d’avance

Summer.
 
G

Guest

Guest
Re : copier code VBA vers un autre classeur

Bonjour,

Une solution par macro. Il faut cochez la case 'Accès approuvé au modèle d'objet du projet VBA' dans les options de sécurités des macros.

Code:
Sub TransfertModuleThisWorkBook(wkb As Workbook)
    Dim moduleTexte As String
    With ThisWorkbook.VBProject.VBComponents("ThisWorkBook").CodeModule
        moduleTexte = .Lines(1, .CountOfLines)
    End With
    moduleTexte = Replace(moduleTexte, "Option Explicit", "")
    wkb.VBProject.VBComponents("ThisWorkBook").CodeModule.AddFromString moduleTexte
End Sub

A+
 
G

Guest

Guest
Re : copier code VBA vers un autre classeur

Bonsoir,
ça ne fonctionne pas je ne sais pas à quoi c'est du ...
Cela ne me dit pas non plus ce qui ne vas pas.

Y'a-t-il un message d'erreur?
Si oui quel message, et quand tu choisit Débogage, quelle ligne est surlignée en jaune?

As - tu appelé la macro en lui passant un objet Workbook?

'Le classeur cible doit être ouvert
Code:
Dim LeClasseurCible As WorkBook
Set LeClasseurCible = WorkBooks(nomDuClasseur)
TransfertModuleThisWorkBook LeClasseurCible

Peut-être qu'un fichier exemple permettrait-il de voir ce qui ne va pas.
Pour moi ce sera demain. Je raccroche.

A+
 

summer1128

XLDnaute Nouveau
Re : copier code VBA vers un autre classeur

merci pour tes réponses il n ya pas de message d'erreur le programme marche mais quand je regarde le thisworkbook du classeur généré il n ya pas de code

tu me dis que le classeur cible doit être ouvert mais le classeur n'existe pas avant de généré le code vu qu'il est crée dans le code
je suis probablement à coté de la plaque :s
j'espère que vous arriverez à m'aider ^^

Summer.
 
G

Guest

Guest
Re : copier code VBA vers un autre classeur

Bonjour,

Tu crées le classeur Cible par le code ou non et ensuite tu appelles la procédure en lui passant le nouveau classeur.

Bien sûr, le classeur dans lequel est la macro (et qui créé la cible) doit avoir des procédures dans ThisWorkbook.

Conformément à ta demande initiale
je souhaiterai retrouver le code contenu dans « thisworkbook » dans le nouveau classeur

Qui laisse supposer que le classeur maître ait des éléments dans ThisWorkbook.

A+
 
Dernière modification par un modérateur:

laurent950

XLDnaute Accro
(Resolu) : copier code VBA vers un autre 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").CodeModule
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
 

MJ13

XLDnaute Barbatruc
Re : copier code VBA vers un autre classeur

Bonjour à tous

Sinon, j'avais fait ce code. Très intéressant :).

Penser à remplacer les " par chr(34).

Code:
Sub Insere_code_VBA_Ouverture_Fichier_Thisworkbook()
'MJ permet avec un fichier ayant les noms de dossier en Colonne1 et les noms de fichier en colonne 2 à n d'ouvrir le fichier
'If ActiveWorkbook.Name = ThisWorkbook.Name Then Exit Sub
With ActiveWorkbook.VBProject.VBComponents("Thisworkbook").CodeModule
.InsertLines 1, "Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)"
.InsertLines 2, "Dim NF"
.InsertLines 3, "NcolDossier = 1"
.InsertLines 4, "Cancel = True: On Error Resume Next"
.InsertLines 5, "If Mid(ActiveCell, 2, 1) = " & Chr(34) & ":" & Chr(34) & " Then Shell " & Chr(34) & "C:\Windows\explorer.exe " & Chr(34) & " & ActiveCell & " & Chr(34) & "" & Chr(34) & ", vbMaximizedFocus: End"
.InsertLines 6, "If Mid(ActiveCell, 2, 1) <> " & Chr(34) & ":" & Chr(34) & " Then NF = ActiveCell.Offset(0, -(ActiveCell.Column - NcolDossier)) & " & Chr(34) & "\" & Chr(34) & " & ActiveCell: ThisWorkbook.FollowHyperlink NF: End"
.InsertLines 7, "End Sub"
End With
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 329
Messages
2 087 335
Membres
103 520
dernier inscrit
Azise