Copier une macro dans un autre classeur

Bonjour à tous,

Avant tout merci pour les cours VBA bien utiles et j'aime bien le design du site ! Bravo !!!

Je sollicite votre aide pour copier une macro d'un classeur vers un autre car je n'y arrive pas ?!

  • J'ai trouvé une macro qui correspond à mon besoin mais j'ai une erreur avec VBProject.VBComponents("Module1").CodeModule
  • J'ai essayé des macros plus simples qui utilisent VBProject.VBComponents
  • J'ai activé la référence "Microsoft Visual Basic for Applications Extensibility 5.3" comme conseillé mais rien à faire ?!

Je ne sais donc pas quelle référence activer pour utiliser VBProject.VBComponents ?!

J'ai utilisé Outlook.Application sans activer la librairie en passant par CreateObject, est-ce une piste possible pour VBProject.VBComponents ?

Merci d'avance pour votre aide.

Bonjour, et bienvenue

voici un code pour dupliquer une macro

Sub dupliquer()
' cocher la réference Microsoft Visual Basic for Applications Extensibility 5.3
Dim myMacro As VBComponent
    Set myMacro = ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName)
    Workbooks.Add
    RecopierMacro myMacro, ActiveWorkbook.VBProject.VBComponents(WsCodeName(ActiveSheet))
End Sub

Sub RecopierMacro(depuis As VBComponent, jusque As VBComponent)
    With jusque.CodeModule
        For i = 1 To depuis.CodeModule.CountOfLines
            .InsertLines i, depuis.CodeModule.Lines(i, 1)
        Next
    End With
End Sub

Function WsCodeName$(Ws As Object)
On Error Resume Next
With Application.VBE.MainWindow
     WsCodeName = Ws.CodeName
End With
End Function

on peut aussi écrire directement

Sub AjouterMacro(ici)
' cocher la réference Microsoft Visual Basic for Applications Extensibility 5.3
    With ActiveWorkbook.VBProject.VBComponents(Worksheets(ici).CodeName).CodeModule
        ligne = .CountOfLines
        .InsertLines ligne + 1, "Private Sub Worksheet_Change(ByVal Target As Range)"
        .InsertLines ligne + 2, "If Not Intersect(Target, Range(""A1"")) Is Nothing Then"
        .InsertLines ligne + 3, "ActiveSheet.ListObjects(""Tableau1"").Range.AutoFilter Field:=5, Criteria1:=Range(""A1"")"
        .InsertLines ligne + 4, "End If"
        .InsertLines ligne + 5, "Range(""A1"").Select"
        .InsertLines ligne + 6, "End Sub"
    End With
End Sub

En plus de la référence "Microsoft Visual Basic for Applications Extensibility 5.3" , il faut aussi cocher les cases ad-hoc comme ici :

dupliquer macro

Pour plus d'aide, poste un bout de fichier.

Merci Steelson ! Super, je vais regarder tes propositions de macro avec intérêt. Celle que j'ai cité me semble bien aussi.

En plus de la référence "Microsoft Visual Basic for Applications Extensibility 5.3" , il faut aussi cocher les cases ad-hoc

Effectivement, je peux maintenant exécuter des macros avec VBProject.VBComponents en cochant Développeur > Sécurité des macros > Accès approuvé au modèle d'objet du projet VBA

Je faisais cette recherche pour faciliter l'intégration de macros dans un classeur existant !? Mais s'il faut activer une référence plus cocher Fichier > Options > Centre de gestion de la confidentialité > Paramètres du Centre de gestion de la confidentialité > Paramètres des macros > Accès approuvé au modèle d'objet du projet VBA

Et est ce que ça ne pose pas des problème de sécurité de cocher cette option ?

Du coup, pouvez vous me conseiller sur la méthode qui vous parait la plus simple en toute sécurité pour partager des macros avec des utilisateurs non avertis avec les macros ? Demander à l'utilisateur :

  • D'activer une référence et l'option ad-hoc pour importer des macros ?
  • D'activer une référence et importer un fichier .bas ?
  • D'ajouter une macro complémentaire via un fichier .xla ?

Je sors un peu du sujet initial de mon post... Mais merci d'avance.

Bonjour,

difficile de répondre ...

mais en premier lieu, ce sujet qui consiste par macro à créer une macro est quand même très spécifique, moi-même je ne l'ai jamais utilisé et j'ai compris après de nombreuses heures, par curiosité, à trouver la solution que j'ai donnée ci-dessus pour un sujet posté sur ce forum

donc si ton besoin est de permettre à un grand nombre de faire des macros par des macros, oups, c'est déjà une prouesse que de savoir faire des macros "correctes" => à réserver à un petit nombre, si c'est pour toi seul, pas de soucis, si c'est pour diffuser cela va poser sans doute quelques interrogations !

je préférerais sans doute l'importation d'un fichier .bas

plus généralement, quant à l'utilisation des macros, oui il y a toujours un risque assez faible; je me pose parfois la question, quand j'ouvre un fichier attaché ici, cela s'est produit une fois où mon ordi s'est bien planté; cela reste moins risqué que d'ouvrir des fichiers attachés bien plus insidieux

j'ajoute que en ce qui me concerne, je transmets le code par fichier txt ou directement dans un message

car bien souvent l'extension .bas n'est pas acceptée dans les envois électroniques

Merci une nouvelle fois pour ta réponse.

Je suis d'accord, difficile de faire profiter de macros à un utilisateur non averti... et qui ne s'intéresse pas un minimum aux fonctionnalités avancées.

Pour importer un .bas, sauf erreur de ma part, il faut passer par l'interface virtual basic et ça peut en rebuter certains ?! Editer une macro ou activer l'onglet développeur.

Je vais approfondir dans le sens des macros complémentaires, ça me semble un bon moyen de partager des macros dans un cadre entreprise. Ca évitera peut être de passer par la copie de macro vers un classeur existant.

Il y avait la solution du fichier modèle mais à ma connaissance utilisé uniquement pour la création de nouveau classeur.

Merci pour le temps consacré !

Rechercher des sujets similaires à "copier macro classeur"