Récupérer le contenu d'une variable à partir de son nom ...

JaGu

XLDnaute Nouveau
Bonjour à tous.

Un problème que je dois pas être le seul à n'avoir pas réussi à résoudre : dans une fonction vba, je définis et calcule plein de variables. En retour de cette fonction, j'aimerai bien avoir la valeur d'une de ces variables calculées.

En faisant simplifiant à l'extrême, cela donnerait le code suivant :

------------------------
Function test(x1, x2, x3, sortie)
y1 = x1
y2 = 2 * x2
y3 = 3 * x3

Select Case sortie
Case "y1": test = y1
Case "y2": test = y2
Case "y3": test = y2
Case Else
End Select

End Function​

-----------------------------​

Mais en réalité, il y a plus d'une centaine de variables calculées ... ce qui ferait un bloc select assez lourd et ingérable dès qu'une nouvelle variable est introduite dans la fonction.

L'idée serait de pouvoir faire passer le nom de la variable voulue dans le variable "sortie", (par exemple sortie="y2") et de l'envoyer dans la fonction. Ca donnerait :
------------------------------
Function test(x1, x2, x3, sortie)
y1 = x1
y2 = 2 * x2
y3 = 3 * x3

test = sortie '(c'est là que ça coince ... !o)
End Function

-----------------------------

Quelqu'un a déjà trouvé comment procéder ?

Un grand merci !
 

mécano41

XLDnaute Accro
Au cas où tu aurais aussi beaucoup de variables x1, x2, x3.... il faut les mettre en tableau A1:A3 par ex pour 3 var. et écrire la fonction en sélectionnant ce tableau. Ex : test2(A1:A3;4) pour avoir la 4ème variable calculée.

Le code est alors :
Function test2(X, sortie)
Dim T(100) ' pour 100 variables

T(1) = X(1, 1)
T(2) = 2 * X(2, 1)
T(3) = 3 * X(3, 1)
T(4) = 12 * X(2, 1) - 3
T(5) = 6 * X(3, 1) - X(2, 1)
' etc....

test2 = T(sortie)
End Function
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour JaGu et bienvenue sur XLD :), mécano41 ;),

Une piste dans le fichier joint avec une fonction personnalisée nommée Calculer().
Cette fonction a comme paramètres :
  1. une expression (formule) à calculer comprenant des variables : x5, x1, x2, ...
  2. une liste de valeurs individuelles : v1, v2, v3, ...
Dans l'expression, la fonction remplacera les occurences de x5 par la valeur v1, les occurences de x1 par la valeur v2, les occurences de x2 par la valeur v3 et ainsi de suite.
Puis, la fonction évaluera l'expression et retournera la valeur de l'expression.

La fonction est utilisable soit dans une feuille de calcul, soit dans du code VBA.
L'expression, les valeurs v1, v2, v3, ... peuvent chacune faire référence à une cellule de feuille de calcul.

Voir fichier joint. Tout se passe dans module1.
 

Pièces jointes

  • JaGu- Formules- v1.xlsm
    24.2 KB · Affichages: 26
Dernière édition:

JaGu

XLDnaute Nouveau
Bonjour à tous,
et merci de vos réponses.
Comme indiqué par Mecano41, il va falloir passer par des tableaux à deux dimensions.
la première étant le nom de la variable , la seconde étant l'indice recherché.

Dans l'exemple simple cité dans on premier post, cela donne :

------------------------------
Function test(x1, x2, x3, nom_var_sortie,indice_sortie)

y=1 : z=2
Select Case nom_var
Case "y": var_sortie = 1
Case "y": var_sortie= 2
End Select

redim X(3,3)

X(y,1) = x1
X(y,2)= 2 * x2
X(y,3 )= 3 * x3
X(z,1) = 4*X(y,1)+5*X(y,3)

test = X(var_sortie,indice_sortie)
End Function

-----------------------------

j'ai repris ce principe dans le code sur lequel je travaille. Ca fonctionne impec. Merci de la piste Mecano41.

Quand à la fonction Calculer, je ne connaissais pas. Ca a l'air plein de potentiel d'applications pour le genre d'exercice que je demande à Excel. Je vais ceuser.
Merci de l'idée Mapomme !
 

Discussions similaires

Réponses
0
Affichages
137

Statistiques des forums

Discussions
312 104
Messages
2 085 339
Membres
102 865
dernier inscrit
FreyaSalander