Appel dynamique de Fonction ou Procédure
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.
Code:
1 2 3 4 5 6
|
Private Sub LanceAction_Click(NomProcedure)
Dim AppelProcedure As String
AppelProcedure = NomProcedure
Call AppelProcedure
End Sub |
Avec NomProcedure une variable venant d'une listebox.
J'ai trouvé une solution qui consiste en faite à appeler une fonction à un nom toujours identique mais dont le contenu change dynamiquement
Code:
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 |
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 :mrgreen:
Merci d'avance