Bonjour à tous,
Je suis actuellement sur un cas un peu particulier sur lequel j'ai trouvé une solution mais qui me semble pas forcément la meilleur... Je m'explique :
Sous Excel 2003, je cherche à appeler dynamiquement une fonction ou une procédure en fonction de ce qui se trouve dans une listebox.
Pour faire plus clair, j'ai un formulaire avec différents champs, choix et listes qui se remplissent automatiquement au fur et à mesure des choix de l'utilisateur. Avec à la fin un bouton Exécuter l'action (que l'utilisateur à demander).
Dans un soucis de modularité, je ne souhaite pas mettre un select case qui serait trop contraignant pour certain de devoir allez dans le code en cas d'ajout de fonctionnalités. De plus ayant beaucoup de fonction, c'est un peu lourd à gérer.
Existe t-il une possibilité d'avoir un bouton qui appel une procédure ou une fonction ou une macro enfin n'importe quoi mais dynamiquement.
Avec NomProcedure une variable venant d'une listebox.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Private Sub LanceAction_Click(NomProcedure) Dim AppelProcedure As String AppelProcedure = NomProcedure Call AppelProcedure End Sub
J'ai trouvé une solution qui consiste en faite à appeler une fonction à un nom toujours identique mais dont le contenu change dynamiquement
Alors attention ça marche bien mais ne pas mettre le delete et la creation de la procédure dans le même module que l'appel à la fonction sous peine de plantage
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 Public Sub Temp(NomFonction) Dim debut As Integer Dim Lignes As Integer With ThisWorkbook.VBProject.VBComponents("PgmTest").CodeModule debut = .ProcStartLine("AppelProcedure", 0) Lignes = .ProcCountLines("AppelProcedure", 0) .DeleteLines debut, Lignes 'End With sFonction = "Sub AppelProcedure" & vbCrLf sFonction = sFonction & vbTab & NomFonction & vbCrLf sFonction = sFonction & "End Sub" 'création d'une procdure appelante With ActiveWorkbook.VBProject.VBComponents("PgmTest").CodeModule NextLine = .CountOfLines + 1 .insertlines NextLine, sFonction End With End Sub
Merci d'avance
Partager