OVH Cloud OVH Cloud

Variables indirectes sous VBA Access

8 réponses
Avatar
yvon-plancade
Bonjour,

Je n'ai pas trouvé trace dans la documentation VBA d'ACCESS de la
possibilité d'utiliser l'adressage indirect (mettre une nom de variable dans
une variable). Cette fonctionnalité est elle "oubliée" dans VBA, ou bien
n'ai je pas su la dénicher?
Merci de votre aide.

Decaplan

8 réponses

Avatar
Jessy Sempere [MVP]
Bonjour

Que veux-tu dire par mettre un nom de variable dans une variable ???

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"yvon-plancade" a écrit dans le message de
news:437a8a60$0$20183$
Bonjour,

Je n'ai pas trouvé trace dans la documentation VBA d'ACCESS de la
possibilité d'utiliser l'adressage indirect (mettre une nom de variable
dans

une variable). Cette fonctionnalité est elle "oubliée" dans VBA, ou bien
n'ai je pas su la dénicher?
Merci de votre aide.

Decaplan




Avatar
yvon-plancade
Bonjour,

Voilà pratiquement mon pb:
Ci-dessous une liste d'instruction VBA :
Dim A as string, B as string

A="Tonton"
B="A"
Ma question: Existe-t-il un opérateur qui ayant B comme opérande me
restituerait comme résultat: Tonton ?

Soit: opérateur_que_je_cherche(B)=Tonton
Suis-je clair?

Merci de votre aide.

Decapaln



"Jessy Sempere [MVP]" a écrit dans le message de
news: 437af933$
Bonjour

Que veux-tu dire par mettre un nom de variable dans une variable ???

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"yvon-plancade" a écrit dans le message de
news:437a8a60$0$20183$
Bonjour,

Je n'ai pas trouvé trace dans la documentation VBA d'ACCESS de la
possibilité d'utiliser l'adressage indirect (mettre une nom de variable
dans

une variable). Cette fonctionnalité est elle "oubliée" dans VBA, ou bien
n'ai je pas su la dénicher?
Merci de votre aide.

Decaplan








Avatar
Dan
Salut Yvon,

ça ressemble à une table avec 2 champs, non ?

A+ Dan
Avatar
yvon-plancade
Bonjour,

C'est vrai dans le cas où le contenu du champ n'est pas une expression
(c'est le cas de mon exemple).

Mon besoin réel est un peu plus exigeant puisque le contenu du champ est une
expression texte contenant des variables (qu'il convient donc d'évaluer
lorsque j'extraie l'expression).

Mon besoin est donc le suivant: J'exécute PP qui fait appel à x reprises à
SP ('2 dans mon exemple)

SUB PP

SP("V1+' EST '+V2","Le ciel","bleu")

SP("V1+V2","J'aime ","la montagne")

END SUB



SUB SP(R as string,V1 as string, V2 as string) 'R est une
chaîne texte représentant une fonction texte de V1 et de V2.

'R doit être évalué (pour obtenir le texte d'une requête par exemple)

Debug.print opérateur_que_je_cherche(R) doit restituer: Le ciel est bleu

Debug.print opérateur_que_je_cherche(R) doit restituer: J'aime la montagne

END SUB

Merci

Decaplan

"Dan" a écrit dans le message
news:<437c40f2$0$20140$...

Salut Yvon,



ça ressemble à une table avec 2 champs, non ?



A+ Dan








"Dan" a écrit dans le message de news:
437c40f2$0$20140$
Salut Yvon,

ça ressemble à une table avec 2 champs, non ?

A+ Dan



Avatar
Eric
Bonjour,

Avec la fonction Eval(), il doit être possible de s'en sortir, non ?
Il te faudrait utiliser des fonctions et non directement des variables
pour V1 et V2
Sous réserve d'avoir bien compris.

Un truc du genre à peaufiner:

Function v1(unechaine As String)
v1 = unechaine
End Function

Function v2(unechaine As String)
v2 = unechaine
End Function

Function sp(operateur As String, unechaine As String, unechaine2 As String)
Dim pos1 As Integer, pos2 As Integer, operation As String
Dim op1 As String, op2 As String
pos1 = InStr(operateur, "'")
pos2 = InStrRev(operateur, "'")
op1 = "v1(""" & unechaine & """)"
operation = Mid(operateur, pos1 + 1, pos2 - pos1 - 1)
op2 = "v2(""" & unechaine2 & """)"
sp = Eval(op1) & operation & Eval(op2)
End Function

Sur tes exemples :
Sub PP()
Debug.Print sp("v1() & ' EST ' & v2()", "le ciel", "bleu")
Debug.Print sp("v1() & ' ' & v2()", "j'aime", "la montagne")
End Sub

retourne :
le ciel EST bleu
j'aime la montagne

Bonjour,

C'est vrai dans le cas où le contenu du champ n'est pas une expression
(c'est le cas de mon exemple).

Mon besoin réel est un peu plus exigeant puisque le contenu du champ est une
expression texte contenant des variables (qu'il convient donc d'évaluer
lorsque j'extraie l'expression).

Mon besoin est donc le suivant: J'exécute PP qui fait appel à x reprises à
SP ('2 dans mon exemple)

SUB PP

SP("V1+' EST '+V2","Le ciel","bleu")

SP("V1+V2","J'aime ","la montagne")

END SUB



SUB SP(R as string,V1 as string, V2 as string) 'R est une
chaîne texte représentant une fonction texte de V1 et de V2.

'R doit être évalué (pour obtenir le texte d'une requête par exemple)

Debug.print opérateur_que_je_cherche(R) doit restituer: Le ciel est bleu

Debug.print opérateur_que_je_cherche(R) doit restituer: J'aime la montagne

END SUB

Merci

Decaplan

"Dan" a écrit dans le message
news:<437c40f2$0$20140$...


Salut Yvon,




ça ressemble à une table avec 2 champs, non ?




A+ Dan







"Dan" a écrit dans le message de news:
437c40f2$0$20140$

Salut Yvon,

ça ressemble à une table avec 2 champs, non ?

A+ Dan







--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr


Avatar
Eric
re,

Eventuellement, en utilisant les pointeurs sur les adresses mémoire de
tes variables, mais là je décroche. Il faut utiliser les fonctions non
documentées StrPtr, VarPtr ...
(La seule que j'ai utilisée est StrPtr pour savoir si,dans une InputBox,
on a appuyé sur Annuler au lieu de OK sans saisie)
Je te mets quelques liens où ces fonctions sont expliquées
- en Anglais
http://www.codeproject.com/useritems/UB_Pointers_In_VB.asp
http://www.codeproject.com/vbscript/how_to_do_pointers_in_visual_basic.asp
- en Français
http://vbfrance.com/code.aspx?IDx44

Bonjour,

Avec la fonction Eval(), il doit être possible de s'en sortir, non ?
Il te faudrait utiliser des fonctions et non directement des variables
pour V1 et V2
Sous réserve d'avoir bien compris.

Un truc du genre à peaufiner:

Function v1(unechaine As String)
v1 = unechaine
End Function

Function v2(unechaine As String)
v2 = unechaine
End Function

Function sp(operateur As String, unechaine As String, unechaine2 As String)
Dim pos1 As Integer, pos2 As Integer, operation As String
Dim op1 As String, op2 As String
pos1 = InStr(operateur, "'")
pos2 = InStrRev(operateur, "'")
op1 = "v1(""" & unechaine & """)"
operation = Mid(operateur, pos1 + 1, pos2 - pos1 - 1)
op2 = "v2(""" & unechaine2 & """)"
sp = Eval(op1) & operation & Eval(op2)
End Function

Sur tes exemples :
Sub PP()
Debug.Print sp("v1() & ' EST ' & v2()", "le ciel", "bleu")
Debug.Print sp("v1() & ' ' & v2()", "j'aime", "la montagne")
End Sub

retourne :
le ciel EST bleu
j'aime la montagne


Bonjour,

C'est vrai dans le cas où le contenu du champ n'est pas une expression
(c'est le cas de mon exemple).

Mon besoin réel est un peu plus exigeant puisque le contenu du champ
est une expression texte contenant des variables (qu'il convient donc
d'évaluer lorsque j'extraie l'expression).

Mon besoin est donc le suivant: J'exécute PP qui fait appel à x
reprises à SP ('2 dans mon exemple)

SUB PP

SP("V1+' EST '+V2","Le ciel","bleu")

SP("V1+V2","J'aime ","la montagne")

END SUB



SUB SP(R as string,V1 as string, V2 as string) 'R est
une chaîne texte représentant une fonction texte de V1 et de V2.

'R doit être évalué (pour obtenir le texte d'une requête par exemple)

Debug.print opérateur_que_je_cherche(R) doit restituer: Le ciel est bleu

Debug.print opérateur_que_je_cherche(R) doit restituer: J'aime la
montagne

END SUB

Merci

Decaplan

"Dan" a écrit dans le message
news:<437c40f2$0$20140$...


Salut Yvon,





ça ressemble à une table avec 2 champs, non ?





A+ Dan








"Dan" a écrit dans le message de
news: 437c40f2$0$20140$

Salut Yvon,

ça ressemble à une table avec 2 champs, non ?

A+ Dan









--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr



Avatar
yvon-plancade
Bonjour,

J'ai fait des tentatives avec la fonction Eval mais elles n'étaient pas
aussi élaborées que ce que tu me proposes.
Je vais donc creuser dans le sens de ton idée.
Grand merci.

Decaplan


"Eric" a écrit dans le message de news:

Bonjour,

Avec la fonction Eval(), il doit être possible de s'en sortir, non ?
Il te faudrait utiliser des fonctions et non directement des variables
pour V1 et V2
Sous réserve d'avoir bien compris.

Un truc du genre à peaufiner:

Function v1(unechaine As String)
v1 = unechaine
End Function

Function v2(unechaine As String)
v2 = unechaine
End Function

Function sp(operateur As String, unechaine As String, unechaine2 As
String)
Dim pos1 As Integer, pos2 As Integer, operation As String
Dim op1 As String, op2 As String
pos1 = InStr(operateur, "'")
pos2 = InStrRev(operateur, "'")
op1 = "v1(""" & unechaine & """)"
operation = Mid(operateur, pos1 + 1, pos2 - pos1 - 1)
op2 = "v2(""" & unechaine2 & """)"
sp = Eval(op1) & operation & Eval(op2)
End Function

Sur tes exemples :
Sub PP()
Debug.Print sp("v1() & ' EST ' & v2()", "le ciel", "bleu")
Debug.Print sp("v1() & ' ' & v2()", "j'aime", "la montagne")
End Sub

retourne :
le ciel EST bleu
j'aime la montagne

Bonjour,

C'est vrai dans le cas où le contenu du champ n'est pas une expression
(c'est le cas de mon exemple).

Mon besoin réel est un peu plus exigeant puisque le contenu du champ est
une expression texte contenant des variables (qu'il convient donc
d'évaluer lorsque j'extraie l'expression).

Mon besoin est donc le suivant: J'exécute PP qui fait appel à x reprises
à SP ('2 dans mon exemple)

SUB PP

SP("V1+' EST '+V2","Le ciel","bleu")

SP("V1+V2","J'aime ","la montagne")

END SUB



SUB SP(R as string,V1 as string, V2 as string) 'R est une
chaîne texte représentant une fonction texte de V1 et de V2.

'R doit être évalué (pour obtenir le texte d'une requête par exemple)

Debug.print opérateur_que_je_cherche(R) doit restituer: Le ciel est bleu

Debug.print opérateur_que_je_cherche(R) doit restituer: J'aime la
montagne

END SUB

Merci

Decaplan

"Dan" a écrit dans le message
news:<437c40f2$0$20140$...


Salut Yvon,




ça ressemble à une table avec 2 champs, non ?




A+ Dan







"Dan" a écrit dans le message de news:
437c40f2$0$20140$

Salut Yvon,

ça ressemble à une table avec 2 champs, non ?

A+ Dan







--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr




Avatar
yvon-plancade
Merci encore.
Decaplan

"Eric" a écrit dans le message de news:

re,

Eventuellement, en utilisant les pointeurs sur les adresses mémoire de tes
variables, mais là je décroche. Il faut utiliser les fonctions non
documentées StrPtr, VarPtr ...
(La seule que j'ai utilisée est StrPtr pour savoir si,dans une InputBox,
on a appuyé sur Annuler au lieu de OK sans saisie)
Je te mets quelques liens où ces fonctions sont expliquées
- en Anglais
http://www.codeproject.com/useritems/UB_Pointers_In_VB.asp
http://www.codeproject.com/vbscript/how_to_do_pointers_in_visual_basic.asp
- en Français
http://vbfrance.com/code.aspx?IDx44

Bonjour,

Avec la fonction Eval(), il doit être possible de s'en sortir, non ?
Il te faudrait utiliser des fonctions et non directement des variables
pour V1 et V2
Sous réserve d'avoir bien compris.

Un truc du genre à peaufiner:

Function v1(unechaine As String)
v1 = unechaine
End Function

Function v2(unechaine As String)
v2 = unechaine
End Function

Function sp(operateur As String, unechaine As String, unechaine2 As
String)
Dim pos1 As Integer, pos2 As Integer, operation As String
Dim op1 As String, op2 As String
pos1 = InStr(operateur, "'")
pos2 = InStrRev(operateur, "'")
op1 = "v1(""" & unechaine & """)"
operation = Mid(operateur, pos1 + 1, pos2 - pos1 - 1)
op2 = "v2(""" & unechaine2 & """)"
sp = Eval(op1) & operation & Eval(op2)
End Function

Sur tes exemples :
Sub PP()
Debug.Print sp("v1() & ' EST ' & v2()", "le ciel", "bleu")
Debug.Print sp("v1() & ' ' & v2()", "j'aime", "la montagne")
End Sub

retourne :
le ciel EST bleu
j'aime la montagne


Bonjour,

C'est vrai dans le cas où le contenu du champ n'est pas une expression
(c'est le cas de mon exemple).

Mon besoin réel est un peu plus exigeant puisque le contenu du champ est
une expression texte contenant des variables (qu'il convient donc
d'évaluer lorsque j'extraie l'expression).

Mon besoin est donc le suivant: J'exécute PP qui fait appel à x reprises
à SP ('2 dans mon exemple)

SUB PP

SP("V1+' EST '+V2","Le ciel","bleu")

SP("V1+V2","J'aime ","la montagne")

END SUB



SUB SP(R as string,V1 as string, V2 as string) 'R est une
chaîne texte représentant une fonction texte de V1 et de V2.

'R doit être évalué (pour obtenir le texte d'une requête par exemple)

Debug.print opérateur_que_je_cherche(R) doit restituer: Le ciel est
bleu

Debug.print opérateur_que_je_cherche(R) doit restituer: J'aime la
montagne

END SUB

Merci

Decaplan

"Dan" a écrit dans le message
news:<437c40f2$0$20140$...


Salut Yvon,





ça ressemble à une table avec 2 champs, non ?





A+ Dan








"Dan" a écrit dans le message de news:
437c40f2$0$20140$

Salut Yvon,

ça ressemble à une table avec 2 champs, non ?

A+ Dan









--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr