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

Variable d'indirection

3 réponses
Avatar
Stéphane Miqueu
Bonjour,
Je cherche à faire un truc tout simple.

Soit une liste de variables :
DIM cR1, cR2, cR3, cR4 as String

Je voudrais pouvoir y accéder au travers d'une boucle :

For i = 1 to 4 step 1
Debug.print "cR" & i
Next

Le problème est que le print me renvoie la chaine "cR1" mais pas le
contenu de la variable cR1. J'ai essayé avec la fonction Eval() mais là
ça plante.

Comment fait-on une indirection ?

3 réponses

Avatar
Jean-marc
"Stéphane Miqueu" wrote in message
news:
Bonjour,



Hello,

Je cherche à faire un truc tout simple.



OK.

Soit une liste de variables :
DIM cR1, cR2, cR3, cR4 as String



Oups!! Sais tu que seule cR4 est une string?
Toutes les autres sont des Variant => C'est mal ...

Je voudrais pouvoir y accéder au travers d'une boucle :

For i = 1 to 4 step 1
Debug.print "cR" & i
Next



hmm...

Le problème est que le print me renvoie la chaine "cR1" mais pas le
contenu de la variable cR1. J'ai essayé avec la fonction Eval() mais là
ça plante.



Comment fait-on une indirection ?



Ca s'appelle un tableau, et ça marche comme ça:

Dim cR(4) as String

For i = 1 To 4
debug.Print cR(i)
Next i

Pour affecter:
cR(1) = "toto"
cR(2) = "titi"
cR(3) = "tutu"
cR(4) = "tata"

--
Jean-marc
Avatar
Stéphane Miqueu
Jean-marc a écrit :
Soit une liste de variables :
DIM cR1, cR2, cR3, cR4 as String



Oups!! Sais tu que seule cR4 est une string?
Toutes les autres sont des Variant => C'est mal ...



C'était juste pour condenser l'écriture mais merci du conseil. Par
habitude je déclare mes variables en les typants une à une mais je ne
savais pas que cette syntaxe était authorisé.

Ca s'appelle un tableau, et ça marche comme ça:

Dim cR(4) as String

For i = 1 To 4
debug.Print cR(i)
Next i

Pour affecter:
cR(1) = "toto"
cR(2) = "titi"
cR(3) = "tutu"
cR(4) = "tata"



C'est exactement ce que j'ai fait. En fait j'adapte un programme depuis
un autre language qui permet de faire de l'indirection et je me
demandais si VB le permettait aussi.
Avatar
andre.araste
Bonjour

Déclaration de variables

Dim cR1, cR2, cR3, cR4 As String

Méfiez-vous quand même de cette façon de déclarer des variables. Seule la
dernière cR4 prend le Type String

Les 3 précédentes ne sont pas initialisées et prendront le Type
correspondant à la valeur qui leur sera affectée.

Pour vous en convaincre, faites ce test :

Private Sub Form_Load()
Dim cR1, cR2, cR3, cR4 As String
MsgBox VarType(cR1) ' Affiche 0 Non Initialisé
cR1 = 1254
MsgBox VarType(cR1) ' Affiche 2 Integer
cR1 = 12.56
MsgBox VarType(cR1) ' Affiche 5 Double
cR1 = "Bonjour !"
MsgBox VarType(cR1) ' Affiche 8 String
cR1 = 12.56
MsgBox VarType(cR1) ' Affiche 5 Double
cR1 = Null
MsgBox VarType(cR1) ' 1 Non valide
cR1 = Empty
MsgBox VarType(cR1) ' 0 Non Initialisé
End Sub

... mais jamais 8 qui est le code correspondant à String.

Ces déclarations relatives ne doivent pas contribuer à une bonne gestion de
la mémoire.
--
Bonne réception.

http://perso.wanadoo.fr/andre.araste/
Membre du Club Win's: http://www.clubwins.org
Avertissement: Je ne vends rien.



"Stéphane Miqueu" a écrit dans le message de news:

Jean-marc a écrit :
Soit une liste de variables :
DIM cR1, cR2, cR3, cR4 as String



Oups!! Sais tu que seule cR4 est une string?
Toutes les autres sont des Variant => C'est mal ...



C'était juste pour condenser l'écriture mais merci du conseil. Par
habitude je déclare mes variables en les typants une à une mais je ne
savais pas que cette syntaxe était authorisé.

Ca s'appelle un tableau, et ça marche comme ça:

Dim cR(4) as String

For i = 1 To 4
debug.Print cR(i)
Next i

Pour affecter:
cR(1) = "toto"
cR(2) = "titi"
cR(3) = "tutu"
cR(4) = "tata"



C'est exactement ce que j'ai fait. En fait j'adapte un programme depuis un
autre language qui permet de faire de l'indirection et je me demandais si
VB le permettait aussi.