[VBA]Appeler une fonction à partir d'une variable

joquetino

XLDnaute Junior
Bonsoir,

J'ai un p'tit souci dans une macro VBA. Je récupère via un formulaire une variable. Et j'aimerais lancer une fonction qui a le même nom que cette variable.

En gros, dans mon formulaire, l'utilisateur a la choix entre :
- libelle1
- libelle2

Lorsqu'il clique sur libelle1, j'aimerais que le code lance la fonction du même nom, donc libelle1(). Or je ne sais pas trop comment faire. Mon nom de variable est varFonction. Et lorsque je tape en VBA : varFonction(), il essaye de trouver la fonction intitulée varFonction(), et moi ce n'est pas ce que je souhaiterai, j'aimerais qu'il interprète le nom de la variable.

Merci de votre aide.
 

Kotov

XLDnaute Impliqué
Re : [VBA]Appeler une fonction à partir d'une variable

Bonsoir Joquetino, Cbea,

Comme le souligne Cbea, un exemple ne sera pas de trop.

Mais avant tout, fais bien attention lorsque tu réalises tes déclarations (variables, fonctions, objets ..)
En utilisant des noms identiques, tu t'exposes à des conflits de noms.

Personnellement, lorsque je monte un projet conséquent, je m'astreins à des règles strictes dans la définition des noms. C'est utile pour développer mais surtout pour apporter une modif beaucoup plus tard. (récemment lors d'une mise à jour, j'ai été ravi d'avoir procédé de manière rigoureuse en ... 2001 - j'avais dormi depuis !!)


Par exemple :
- mes fonctions commencent par "f" suivi d'une majuscule à la lettre suivante :
(intérêt : la lettre "f" m'indique qu'il s'agit d'une fonction, évite un conflit avec un nom réservé par VBA, et avec la majuscule en 2ème position, lorsque je tape le nom de la fonction plus tard, je vois tout de suite si ma saisie est correcte : la 2ème lettre passe en majuscule)

- sur le même principe mes variables commencent par "v"

- les objets :
les Userform débutent par USF (ex: USFsaisie)
les ComboBox par cbx (ex : cbxNom)
les Labels par lab (ex : labAdresse)
les Textbox par txt (ex : txtResultat)
etc..

C'est beaucoup plus facile de s'y retrouver.
Tu remarqueras qu'à chaque fois, il y a au moins une majuscule à l'intérieur qui me permet un controle lors de la saisie en minuscule.
Pour les userform, je fais l'inverse avec USF en majuscule : dans les projets avec appel de plusieurs formulaires dans la même macro, je repère plus vite ces 3 lettres en capitales.

Ce sont quelques trucs persos, à toi d'en trouver qui te conviennent.

Bonne soirée

Kotov
 
Dernière édition:

joquetino

XLDnaute Junior
Re : [VBA]Appeler une fonction à partir d'une variable

Ouaip, merci pour les conseils.

Pour l'exemple, c'est compliqué de le donner parce que je ne l'ai pas sous la main, mais grossièrement, voilà ce que je souhaite mettre en place :

J'ai une table, dans lequel je stocke un numéro de produit, un libellé de produit, et un nom de fonction.

Par exemple : maTable
1 ; produit1 ; nomFonction1

Lorsque l'utilisateur choisit le produit dans une liste déroulante, je récupère le nom la fonction associée grâce à une requête SQL, dans une variable de type String, nommé mafonction. Par exemple, si l'utilisateur choisit dans la liste le produit1, ma variable mafonction sera initialisée à nomFonction1. Jusque là, tout est ok.

Dans mon code vba, j'ai une fonction nomFonction1(), une fonction nomFonction1(), et une fonction nomFonction3().

Ce que je souhaiterai, c'est exécuter la fonction de libellé nomFonction1.
Ainsi, si l'utilisateur choisit le produit1, je souhaiterai exécuter la fonction nomFonction1(), qui a donc le même nom que la valeur de la variable mafonction.

Et là je bloque un peu ... Donc si vous pourriez m'apporter un p'tit coup de main, ça m'aiderait grandement.

Un grand merci d'avance.
 

MichelXld

XLDnaute Barbatruc
Re : [VBA]Appeler une fonction à partir d'une variable

bonsoir


tu peux utiliser la méthode Run:

Code:
Sub Test()
    Dim x As String
    
    x = "NomFonction1"
    
    MsgBox Application.Run(x, 10)
End Sub

Code:
Function NomFonction1(x As Integer) As Integer
    NomFonction1 = x * 2
End Function



Bonne soirée
MichelXld
 

Discussions similaires

Réponses
4
Affichages
183

Membres actuellement en ligne

Statistiques des forums

Discussions
312 196
Messages
2 086 101
Membres
103 116
dernier inscrit
kutobi87