Copier une macro par une macro

jeanmomo

XLDnaute Nouveau
Bonjour,

Est-il possible de copier un module "Module1" d'un fichier test1.xls vers un fichier test2.xls, ainsi que le bouton de commande (CommandButton1)qui va avec.
Dans le cas en question, le fichier test2.xls doit absolument être crée en copiant en valeur et en format un onglet "synthèse" du classeur test1.xls, d'où la complication pour copier la macro.

J'ai essayé tout un tas de codes avec des lignes types :

ThisWorkbook.VBProject.VBComponents("Module1").Export _
"cheminmacro" & ".bas"


ThisWorkbook.VBProject.VBComponents("Module1").Import "cheminmacro" & ".bas"

Mais, je ne m'en sors pas du tout. Faut-il juste importer ou exporter, ou alors exporter et importer?
De plus, je souhaiterai que la macro ne soit pas stocké autrepart que dans ces deux fichiers en question.

Merci d'avance pour vos réponses !!!
 

kjin

XLDnaute Barbatruc
Re : Copier une macro par une macro

Bonjour,
La macro "Copie" est sensée être située aussi dans le Module1
Cette macro
- copie l'onglet synthèse dans un nouveau classeur
- copie le Module1 dans ce nouveau classeur
- détruit la macro "Copie" du nouveau classeur
- sauve et ferme le nouveau classeur
Pour le bouton, sans fichier...
Code:
Sub Copie()
Application.ScreenUpdating = False
Set wkb1 = ActiveWorkbook
Sheets("Synthèse").Copy
Set Wkb2 = ActiveWorkbook
With wkb1.VBProject.VBComponents("Module1").CodeModule
    Lcode = .Lines(1, .CountOfLines)
End With
With Wkb2
    With .VBProject
        .VBComponents.Add(1).Name = "Module1"
        With .VBComponents("Module1").CodeModule
            .AddFromString Lcode
            debut = .ProcStartLine("Copie", vbext_pk_Proc)
            fin = .ProcCountLines("Copie", vbext_pk_Proc)
            .deleteLines debut, fin
        End With
    End With
    .SaveAs wkb1.Path & "\jeanmomo2.xls"
    .Close
End With
Application.ScreenUpdating = True

End Sub
A+
kjin
 

jeanmomo

XLDnaute Nouveau
Re : Copier une macro par une macro

Merci pour ta contribution kjin, cependant à cause de la taille de l'onglet à copier dans un autre classeur, je ne souhaite pas utiliser la ligne:

Sheets("Synthèse").Copy,

mais à la place:

Cells.Select
Selection.Copy
Workbooks.Add
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

d'où mon problème pour copier le module et le bouton par une macro... j'ai donc essayé les export et/ou import de macro, mais sans réussite.

J'ai d'autres fichiers identiques mais 10 fois plus léger, pour lesquels j'ai utilisé : Sheets("Synthèse").Copy, et je suis arrivé à y faire tout ce que je voulais, mais là pour mon gros fichier la copie de l'onglet prend une minute!!!

Et sinon à la ligne:
With wkb1.VBProject.VBComponents("Module1").CodeModule
Lcode = .Lines(1, .CountOfLines)

il me dit qu'il y a une erreur d'éxécution '1014' et que l'erreur est définie par l'application ou par l'objet.
 

jeanmomo

XLDnaute Nouveau
Re : Copier une macro par une macro

Je joins mon fichier, vidé de toutes les informations, exceptés les 2 boutons de commandes et les codes vba qui vont avec.
Le bouton " création fichier" me sert à créer un fichier (essai.xls) qui est la copie de l'onglet "synthèse" en valeur et en format.
Ce fichier crée est enregistré dans le même dossier que le fichier jeanmomo.xls, en prenant le nom de la cellule AD4 (ici j'ai inscrit "essai" en dur dans la cellule).

Je n'ai pas besoin que le bouton "création fichier" soit copier, ni le code qui va avec dans essai.xls.

En revanche, je souhaiterai que le bouton "mise au format pour l'impression" et le code qui va avec soit copier/importer/transférer vers essai.xls.

Je joins mon fichier.

Merci!!!
 

Pièces jointes

  • jeanmomo.xls
    47 KB · Affichages: 61

Discussions similaires

Statistiques des forums

Discussions
311 709
Messages
2 081 779
Membres
101 816
dernier inscrit
Jfrcs