Variable dynamique ou variable dans variable [Résolu]

BadFog 6 Messages postés jeudi 4 août 2005Date d'inscription 22 juin 2006 Dernière intervention - 8 août 2005 à 17:44 - Dernière réponse : cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention
- 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.
Afficher la suite 

6 réponses

Meilleure réponse
mrdep1978 402 Messages postés jeudi 25 novembre 2004Date d'inscription 7 juin 2009 Dernière intervention - 8 août 2005 à 19:01
3
Merci
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

Merci mrdep1978 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Meilleure réponse
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 8 août 2005 à 19:04
3
Merci
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/

Merci cs_DARKSIDIOUS 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Gobillot 3140 Messages postés vendredi 14 mai 2004Date d'inscription 31 mars 2015 Dernière intervention - 8 août 2005 à 17:52
0
Merci
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
BadFog 6 Messages postés jeudi 4 août 2005Date d'inscription 22 juin 2006 Dernière intervention - 8 août 2005 à 18:19
0
Merci
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.
Gobillot 3140 Messages postés vendredi 14 mai 2004Date d'inscription 31 mars 2015 Dernière intervention - 8 août 2005 à 18:30
0
Merci
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
BadFog 6 Messages postés jeudi 4 août 2005Date d'inscription 22 juin 2006 Dernière intervention - 8 août 2005 à 18:40
0
Merci
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.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.