Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Trouver la valeur d'une variable dont nous ne connaissont que le nom que sous forme de string

8 réponses
Avatar
Pierre Archambault
Bonjour à tous,

Cette question peut sembler incongrue mais je vous explique le contexte.

Dans un Form, l'usager entre le nom d'une variable qui, dans le code du
programme, contient par exemple le nombre de dossiers.

À partir du Textbox contenant ce nom de variable (qui peut différer d'une
fois à l'autre) je voudrais pouvoir obtenir la valeur de cette variable.

Dans cet exemple, le nom de la variable est "NbreDossiers" et je voudrai
savoir comment coder mon programme pour que la string "NbreDossiers" soit
interprétée comme étant la variable elle-même. Bien sûr, s'il s'agissait
toujours de la même variable, je n'aurais pas ce problème mais justement,
l'utilisateur peut entrer un grand nombre de noms de variables différents.

Merci pour vos lumières.

Pierre

8 réponses

Avatar
Patrice Henrio
Pierre Archambault a écrit :
Bonjour à tous,

Cette question peut sembler incongrue mais je vous explique le contexte.

Dans un Form, l'usager entre le nom d'une variable qui, dans le code du
programme, contient par exemple le nombre de dossiers.

À partir du Textbox contenant ce nom de variable (qui peut différer d'une
fois à l'autre) je voudrais pouvoir obtenir la valeur de cette variable.

Dans cet exemple, le nom de la variable est "NbreDossiers" et je voudrai
savoir comment coder mon programme pour que la string "NbreDossiers" soit
interprétée comme étant la variable elle-même. Bien sûr, s'il s'agissait
toujours de la même variable, je n'aurais pas ce problème mais justement,
l'utilisateur peut entrer un grand nombre de noms de variables différents.

Merci pour vos lumières.

Pierre




Si les variables considérées sont des propriétés d'un objet, on pourrait
utiliser CallByName

Par exemple une classe cMesvariables

Option Explicit

'variables locales de stockage des valeurs de propriétés
Private mvarNb As Long 'copie locale
Private mvarCh As String 'copie locale
Public Property Let Ch(ByVal vData As String)
'utilisé lors de l'affectation d'une valeur à la propriété, du coté
gauche de l'affectation.
'Syntax: X.Ch = 5
mvarCh = vData
End Property


Public Property Get Ch() As String
'utilisé lors de la lecture de la valeur de la propriété, du coté droit
de l'instruction.
'Syntax: Debug.Print X.Ch
Ch = mvarCh
End Property



Public Property Let Nb(ByVal vData As Long)
'utilisé lors de l'affectation d'une valeur à la propriété, du coté
gauche de l'affectation.
'Syntax: X.Nb = 5
mvarNb = vData
End Property


Public Property Get Nb() As Long
'utilisé lors de la lecture de la valeur de la propriété, du coté droit
de l'instruction.
'Syntax: Debug.Print X.Nb
Nb = mvarNb
End Property

Une forme et un bouton

Option Explicit
Private Sub Command1_Click()
Dim CL As New cMesVariables, V As String
CL.Ch = "essai"
V = CallByName(CL, "Ch", VbGet)

End Sub

En appuyant sur le bouton, on récupère bien la valeur "essai" dans la
variable V

En adaptant, en particulier en fonction du type de retour cela doit
pouvoir se faire.

<msdn>
La fonction CallByName permet d'employer une chaîne pour spécifier une
propriété ou une méthode au moment de l'exécution. La signature de la
fonction CallByName est la suivante :

Result = CallByName(Object, ProcedureName, CallType, Arguments())

Le premier argument de la fonction CallByName prend le nom de l'objet à
traiter. Le deuxième argument, ProcedureName, prend une chaîne contenant
le nom de la méthode ou de la propriété à invoquer. L'argument CallType
prend une constante représentant le type de procédure à invoquer : une
méthode (vbMethod), une propriété let (vbLet), une propriété get (vbGet)
ou une propriété set (vbSet). L'argument final est facultatif, il prend
un tableau de type Variant contenant des arguments pour la procédure.
</msdn>
Avatar
LE TROLL
Bonjour,

Je ne comprends pas tout, si tu as un nom de
variable, en somme, pour connaître ce nom de
variable, il faut bien qu'elle soit déclarée dans
ton code, et qu'elle contienne une valeur, non ?
Donc, par exemple:

Dim nom1, nom2, nom3, valeur, ligne
nom1=2: nom2=4: nom3=8
Delect Case text1
Case "nom1":valeur = nom1
Case "nom2":valeur = nom2
Case "nom3":valeur = nom3
End Select
''''''''''''''''''''''''''''
Tu peux aussi déclarer tes variables dans un
fichier, et ensuite faire un accès fichier, du
genre:
écrit_fichier = "nom1 2"
écrit_fichier = "nom2 4"
écrit_fichier = "nom3 8"
'
et en lecture:
lit_ligne_fihier = ligne
if text1= mid(ligne,1,len(text1)) then valeur =
mid(ligne, len(text1)+2, lgrNb)
'''''''''''''''''''''''''''''''''''''''''''

Tu peux aussi déclarer une variable qui contient
son nom + sa valeur en chaîne
nom1= "nom1 1"
nom2= "nom2 2"

Il doit y avoir plein de solutions...

--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"Pierre Archambault"
a écrit dans le
message de news:
7Oroj.433$
| Bonjour à tous,
|
| Cette question peut sembler incongrue mais je
vous explique le contexte.
|
| Dans un Form, l'usager entre le nom d'une
variable qui, dans le code du
| programme, contient par exemple le nombre de
dossiers.
|
| À partir du Textbox contenant ce nom de variable
(qui peut différer d'une
| fois à l'autre) je voudrais pouvoir obtenir la
valeur de cette variable.
|
| Dans cet exemple, le nom de la variable est
"NbreDossiers" et je voudrai
| savoir comment coder mon programme pour que la
string "NbreDossiers" soit
| interprétée comme étant la variable elle-même.
Bien sûr, s'il s'agissait
| toujours de la même variable, je n'aurais pas ce
problème mais justement,
| l'utilisateur peut entrer un grand nombre de
noms de variables différents.
|
| Merci pour vos lumières.
|
| Pierre
|
|
Avatar
Patrice Henrio
LE TROLL a écrit :
Bonjour,

Je ne comprends pas tout, si tu as un nom de
variable, en somme, pour connaître ce nom de
variable, il faut bien qu'elle soit déclarée dans
ton code, et qu'elle contienne une valeur, non ?
Donc, par exemple:

Dim nom1, nom2, nom3, valeur, ligne
nom1=2: nom2=4: nom3=8
Delect Case text1
Case "nom1":valeur = nom1
Case "nom2":valeur = nom2
Case "nom3":valeur = nom3
End Select
''''''''''''''''''''''''''''
Tu peux aussi déclarer tes variables dans un
fichier, et ensuite faire un accès fichier, du
genre:
écrit_fichier = "nom1 2"
écrit_fichier = "nom2 4"
écrit_fichier = "nom3 8"
'
et en lecture:
lit_ligne_fihier = ligne
if text1= mid(ligne,1,len(text1)) then valeur =
mid(ligne, len(text1)+2, lgrNb)
'''''''''''''''''''''''''''''''''''''''''''

Tu peux aussi déclarer une variable qui contient
son nom + sa valeur en chaîne
nom1= "nom1 1"
nom2= "nom2 2"

Il doit y avoir plein de solutions...



non pas vraiment.
D'après ce que j'ai compris la demande est l'équivalent de eval en lisp
qui peut interpréter une variable texte comme étant le nom d'une variable

par exemple

dim test as long, V as long

test=3
V=Eval("test")


' à ce moment V vaut 3
Avatar
LE TROLL
Bonjour Patrice,

eval en lisp

C'est quoi ???

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"Patrice Henrio" a
écrit dans le message de news:

| LE TROLL a écrit :
| > Bonjour,
| >
| > Je ne comprends pas tout, si tu as un nom
de
| > variable, en somme, pour connaître ce nom de
| > variable, il faut bien qu'elle soit déclarée
dans
| > ton code, et qu'elle contienne une valeur, non
?
| > Donc, par exemple:
| >
| > Dim nom1, nom2, nom3, valeur, ligne
| > nom1=2: nom2=4: nom3=8
| > Delect Case text1
| > Case "nom1":valeur = nom1
| > Case "nom2":valeur = nom2
| > Case "nom3":valeur = nom3
| > End Select
| > ''''''''''''''''''''''''''''
| > Tu peux aussi déclarer tes variables dans un
| > fichier, et ensuite faire un accès fichier, du
| > genre:
| > écrit_fichier = "nom1 2"
| > écrit_fichier = "nom2 4"
| > écrit_fichier = "nom3 8"
| > '
| > et en lecture:
| > lit_ligne_fihier = ligne
| > if text1= mid(ligne,1,len(text1)) then valeur
| > mid(ligne, len(text1)+2, lgrNb)
| > '''''''''''''''''''''''''''''''''''''''''''
| >
| > Tu peux aussi déclarer une variable qui
contient
| > son nom + sa valeur en chaîne
| > nom1= "nom1 1"
| > nom2= "nom2 2"
| >
| > Il doit y avoir plein de solutions...
| >
| non pas vraiment.
| D'après ce que j'ai compris la demande est
l'équivalent de eval en lisp
| qui peut interpréter une variable texte comme
étant le nom d'une variable
|
| par exemple
|
| dim test as long, V as long
|
| test=3
| V=Eval("test")
|
|
| ' à ce moment V vaut 3
Avatar
tking
Patrice Henrio a utilisé son clavier pour écrire :




non pas vraiment.
D'après ce que j'ai compris la demande est l'équivalent de eval en lisp qui
peut interpréter une variable texte comme étant le nom d'une variable

par exemple

dim test as long, V as long

test=3
V=Eval("test")


' à ce moment V vaut 3



Non car en VB :

Dim v, test As Integer
test = 3
v = test
' Text1.Text = v (renvoi 3)




Mais j'ai pensé à une autre solution concernant le problème soulevé
c'est d'utiliser un tableau,

variable = text1.text (stock le mot clef entré par l'utilisateur)
valeur(1) = variable
Avatar
Patrice Henrio
tking a écrit :
Patrice Henrio a utilisé son clavier pour écrire :




non pas vraiment.
D'après ce que j'ai compris la demande est l'équivalent de eval en
lisp qui peut interpréter une variable texte comme étant le nom d'une
variable

par exemple

dim test as long, V as long

test=3
V=Eval("test")


' à ce moment V vaut 3



Non car en VB :

Dim v, test As Integer
test = 3
v = test
' Text1.Text = v (renvoi 3)




Mais j'ai pensé à une autre solution concernant le problème soulevé
c'est d'utiliser un tableau,

variable = text1.text (stock le mot clef entré par l'utilisateur)
valeur(1) = variable




A moins de n'avoir rien compris à la demande, il s'agit de trouver la
valeur d'une variable dont le nom est passée sous forme de chaîne. Ce
n'est pas possible nativement en VB.
Avatar
tking
Patrice Henrio a présenté l'énoncé suivant :

A moins de n'avoir rien compris à la demande, il s'agit de trouver la valeur
d'une variable dont le nom est passée sous forme de chaîne. Ce n'est pas
possible nativement en VB.



Oui et bien en rusant, il suffit de créer deux tableaux, dans un tu
mets la variable chaîne et dans l'autre la valeur, puis par
correspondance tu obtiens ta valeur en interrogeant la variable chaîne.
Ce n'est peut être pas la meilleur solution mais ça marche.
Avatar
LE TROLL
Bonjour,

Ben oui, c'est faisable en biaisant, mais là, ce
serait mieux si celui qui a posé la question,
expliquait pourquoi il lui faut absolument ce nom
de variable... Ce serai plutôt le programme qu'il
faudrait revoir, et aborder le problème sous un
autre angle...

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"tking" a écrit dans le message de
news:
| Patrice Henrio a présenté l'énoncé suivant :
|
| > A moins de n'avoir rien compris à la demande,
il s'agit de trouver la valeur
| > d'une variable dont le nom est passée sous
forme de chaîne. Ce n'est pas
| > possible nativement en VB.
|
| Oui et bien en rusant, il suffit de créer deux
tableaux, dans un tu
| mets la variable chaîne et dans l'autre la
valeur, puis par
| correspondance tu obtiens ta valeur en
interrogeant la variable chaîne.
| Ce n'est peut être pas la meilleur solution mais
ça marche.
|
|