Macro qui créer une Macro (ajouté dans un fichier module)

Bonsoir à tous,

Ayant farfouillé et n'ayant trouvé (peu) d'informations concernant ce sujet, je suis à la recherche d'aide pour finir mon projet.

Je voulais savoir s'il était possible de :

Lorsque j'appuie sur un bouton, lance une macro qui :

- crée une macro et qui prends pour nom le contenu d'une cellule ( qui crée un module avec ce nom la ? )

- qui elle même crée un bouton, et lui affecte cette macro

Je sens que j'arrive sur une partie assez complexe et c'est pour cela que je demande l'aide de personnes plus compétente que moi, je précise que je n'ai pas beaucoup d'expérience sur Excel

Merci d'avance à tous pour vos réponses, cordialement,

Kévin

Hello,

Pourquoi créer une macro qui créée une macro ?

Pourquoi ne pas mettre le code voulu directement dans le bouton ?

Alors tout simplement parceque le premier bouton me permet de créer une page que je renomme avec le contenu d'une cellule de ma page (prenom),

puis ensuite intervient la creation du deuxième bouton qui me permettrai directement de m'amener à la page tout juste créée (donc la macro)

Etrange ... Pourquoi ne pas créer le 2eme bouton puis lui affecter du code sur la même feuille que le premier bouton (création à la main j'entends) ?

Salut,

tout d'abord tu active la référence...

image

Tu peux créer un module qui se nommera "basTestVbComponent"

ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule).Name = "basTestVbcomponent"

Pour créer une macro voici une sub

Sub SetMacroInModule(ModuleName As String, StringMacro As String)
' // # Ajoute un retour chariot
' // * Ajoute une tabulation
' // ^ Ajoute un guillemet
' // Ne pas mettre d'espace dans le nom de la sub ou fonction
Dim strtemp As String
strtemp = Replace(Replace(Replace(StringMacro, "#", vbCr), "*", vbTab), "^", Chr(34))
ThisWorkbook.VBProject.VBComponents(ModuleName).CodeModule.AddFromString strtemp
End Sub

Que tu peux tester comme ceci

Sub testWriteFunction()
    Dim strtemp As String
    strtemp = "sub Test11(strName as string)" & _
              "#dim i as integer" & _
              "#*for i = 1 to 10" & _
              "#*debug.print ^i: ^;i" & _
              "#*next i" & _
              "#*strname = ^toto la rico^" & _
              "#*msgbox strname" & _
              "#end sub"
    SetMacroInModule "module1", strtemp
End Sub

Pour créer un bouton sur un UserForm

Dim usf As Object
Set Usf = ThisWorkbook.VBProject.VBComponents.Add(3) ' // On crée l'UserForm

With Usf
        .Properties("Caption") = "Test UserForm"
        .Properties("BackColor") = RGB(255, 255, 255)
End With
With Usf.Designer.Controls.Add("Forms.CommandButton.1")
            .AutoSize = True
            .Caption = "Lance Test"
            .AutoSize = False
End With

Ensuite tu crée la Sub pour ton bouton en reprenant

Dim strtemp As String
    strtemp = "Sub CommandButton1_Click(strName as string)" & _
              "#dim i as integer" & _
              "#*for i = 1 to 10" & _
              "#*debug.print ^i: ^;i" & _
              "#*next i" & _
              "#*strname = ^toto la rico^" & _
              "#*msgbox strname" & _
              "#end sub"SetMacroInModule(ModuleName As String, StringMacro As String)
With usf.CodeModule
.AddFromString strtemp
End With

Par contre si c'est pour l'insertion du bouton sur une feuille je ne te serais d'aucune utilité.

Bonjour,

j'ai l'impression que tu pars sur une usine à gaz pour un problème qui peut sans doute se résoudre de façon plus simple.
Comme tu n'exprimes pas ton besoin mais seulement comment tu penses le traiter par un biais tortueux, difficile d'y réfléchir...
eric

Bonsoir, tout d'abord merci beaucoup pour vous réponses, je vais essayer ta méthode je te tiens au courant prochainement !

Je travaille dans une petite équipe qui n'est pas du tout doué pour l'informatique, et on gère un fichier formation, donc j'aimerai pouvoir tout simplifier en cliquant simplement sur un seul bouton.

Je souhaite "simplement" insérer un bouton qui permet de rajouter le nom et le prénom dans une liste d'une feuille générale, tout en créant une feuille avec ce même prénom (cette partie est ok)

Sur la même ligne dans la feuille générale, j'ai besoin d'un bouton qui lorsque je clique dessus, me ramène à la feuille de cette personne, d'ou la macro qui créer une macro.

Je vous tiens au courant, cordialement,

Kévin

Bonjour,

tu peux tout simplement, au moment de sa création, créer un hyperlien qui te mène à cette feuille.
eric

Re-bonsoir,

Alors j'ai essayé la technique des hypersliens ( très pratique ), or j'ai un petit soucis, je m'explique.

Une fois que je rajoute une personne dans ma feuille générale, je procède à un tri par ordre alphabétique des noms : j'arrive à insérer le lien hypertexte dans la case souhaité et il fonctionne, le problème et qu'il ne suit pas sa ligne lors du tri mais reste à l'endroit ou il a été crée.

Il y aurait-t'il une solution ? :D

Le code que j'ai utilisé pour insérer le lien (qui est dans une macro)

-> ActiveSheet.Hyperlinks.Add Anchor:=Worksheets("VUE GENERALE").Range("C9"),

Address:="",

SubAddress:= _ prenom & "!A1", TextToDisplay:=prenom

Merci de vos réponses, cordialement,

Kévin

Bonsoir,

il faudrait un petit fichier en situation avec qq lignes.

...reste à l'endroit ou il a été crée

il devrait être trié.
Je me demande si tu ne parles pas de l'autre feuille triée et il ne pointe plus là où il faut (?)
eric

Bonsoir à tous,

Effectivement les hyperliens se trient, j'avais un petit soucis dans mon code, le problème est réglé et mon fichier est operationnel

Merci beaucoup à tous pour votre aide !

Rechercher des sujets similaires à "macro qui creer ajoute fichier module"