Variable dynamique ou variable dans variable

Résolu
BadFog Messages postés 6 Date d'inscription jeudi 4 août 2005 Statut Membre Dernière intervention 22 juin 2006 - 8 août 2005 à 17:44
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 8 août 2005 à 19:04
Bonjour,

Ne trouvant aucune info sur le net sur ce problème (en tout cas dans ce langage), je suppose que ce n'est pas possible en VB mais voici ma question.

Peut-on accéder à la valeur d'une variable dont le nom est contenu dans une autre variable.
Exple :
Current_Year = 2005
Année_Courante = "Current_Year"


En utilisant la variable Année_Courante, je voudrais récupérer la valeur 2005.

Merci

Pascal D.

6 réponses

mrdep1978 Messages postés 402 Date d'inscription jeudi 25 novembre 2004 Statut Membre Dernière intervention 7 juin 2009 7
8 août 2005 à 19:01
J'ai peut-être qqe chose qui peut t'aider :
(j'ai fait ça en VBA car j'ai uniquement Excel sous la main, mais à part le nom des événements, ça ne devrait rien changer si tu es en VB6)
J'ai mis une Form (UserForm), un bouton (CommandButton1) et une TextBox (TextBox1)
Dans les références du projet, j'ai ajouté Microsoft Script Control 1.0 (msscript.ocx) qui permet d'interpréter du code saisi dynamiquement
Il suffit de cliquer sur le bouton que tu as mis sur la feuille

Option Explicit


Private Sub CommandButton1_Click()
Call test
End Sub


Private Sub UserForm_Initialize()
TextBox1.Text = """variation"" & vblf & Current_Year"
End Sub


Private Sub test()
'Objet ScriptControl
Dim l_Script As New ScriptControl
Dim Current_Year As String
Dim l_text As String
Current_Year = 2005
'Définit le language de dév à interpréter
l_Script.Language = "VBScript"
'Nécessaire de faire le AddCode car les variables current_year et Current_Year sont différentes (l'une est interprétée et l'autre fait partie du code VB"Standard")
l_Script.AddCode "current_year=" & Current_Year
"Interpréte le code écrit dans la textbox et stocke le résultat dans l_Text
l_text = l_Script.Eval(TextBox1.Text)
'La preuve de ce que j'ai dit auparavant
MsgBox l_text
'Détruit l'objet
Set l_Script = Nothing
End Sub
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
8 août 2005 à 19:04
Ce que tu cherche à faire, c'est utiliser des pointeurs en VB si je
comprends bien. Or, VB n'est pas vraiment spécialiste en la matière !



Le plus simple : passe par des collections qui stockeront tes données,
et avec lesquelles tu pourras utiliser des clés comme dans une table de
hachage.

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
3
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
8 août 2005 à 17:52
ce que tu veux faire est impossible, les noms de variables disparaissent, après compil il ne reste plus que des adresses

là ça marche:

Année_Courante = Current_Year

Daniel
0
BadFog Messages postés 6 Date d'inscription jeudi 4 août 2005 Statut Membre Dernière intervention 22 juin 2006
8 août 2005 à 18:19
Merci mais cela ne m'avance pas. C'est possible en C, en PHP, peut-être même en java et je n'ai pas d'autre moyen.


Mon problème est qu'à partir d'une table de paramètres, je dois ajouter un nombre inconnu de contrôles dont le libellé est dans cette même table, libellé qui contient lui-même des noms de paramètres.
Exemple :

<CAPTION></CAPTION>

----

Cod_Parm |
Num_Value |
Char_Value |

----

Budget_Year,
2006,
2006,
----

Current_Year,
2005,
2005,
----

Last_Year,
2004,
2004,
----

Ent_Col_CA,
35,
"Variation" & vblf & Last_Year & " - " & Current_Year,
----

Ent_Col_CA,
30,
"Dont CA" & vblf & "Promotions",
----

Ent_Col_CA,
25,
"Prévisions" & vblf & Budget_Year,
----

Ent_Col_CA,
20,
"Projection" & vblf & Current_Year,
----

Ent_Col_CA,
15,
"Budget" & vblf & Current_Year,
----

Ent_Col_CA,
10,
"A fin Août" & vblf & Current_Year,
----

Ent_Col_CA,
5,
"Réalisé" & vblf & Last_Year,
<TFOOT></TFOOT>

Sachant que les valeurs de Current_Year et Last_Year sont dèjà connues car déjà lues dans le fichier et affectées à des variables du même nom.

Bien sûr, je pourrais pour chaque paramètre contenu dans le libellé, rechercher à nouveau sa valeur dans le fichier mais cela multiplie les lectures inutilement.

Faute de mieux, il faudra pourtant bien m'en satisfaire.

Pascal D.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
8 août 2005 à 18:30
je ne sais pas si j'ai tout compris.

en fonction du contenu qui se trouve dans Libellé, il faut tester tous les cas possible.





Select Case libellé

Case "Current_Year": Année_Courante = Current_Year

Case "Budget_Year": Année_Courante = Budget_Year

Case "Last_Year": Année_Courante = Last_Year

End Select


Daniel
0
BadFog Messages postés 6 Date d'inscription jeudi 4 août 2005 Statut Membre Dernière intervention 22 juin 2006
8 août 2005 à 18:40
Tester tous les cas possibles équivaut à tester en "dur" dans le programme et donc à perdre tous les bénéfices de libellés paramétrables.

Ma seule solution consiste une fois le libellé récupéré et découpé afin d'isoler les parties textes (encadrées de douvble-quotes) et les parties paramètres, d'exécuter des requêtes sélection pour chaque paramètre trouvé tel que :


1/ alimentation d'une array à partir des libellés lus
2/ pour chaque libellé, concaténation des parties textes et des paramèters :
exple pour Ent_Col_CA valeur 5 (que l'on apellera Control1)
si part1 = "Réalisé"
part2=vblf
part3 = Last_Year
rst.open "Select Num_Value from paramètres where cod_parm = " & part3, cnn
Control1.caption = part1 & vblf & rs!Num_Value

J'aurais préféré pourvoir faire simplement
Control1.caption = part1 & vblf & function(part3) (fonction qui me restituerait la valeur de la variable dont le nom est passé en paramètre).

Pascal D.
0
Rejoignez-nous