chaine d' "indirection" dans VBA ???? Help !

R

rémi

Guest
bonjour,

Quelqu'un peux il me dire s'il existe une fonction ds vb pour désigner indirectement une variable à l'aide d'une chaine de caractères ?? (fonction existante - et trés utile - en turbo pascal)

Exemple :

Je cherche à remplacer ceci :

R1.Caption = Cells(a, 17 + (2 * 1)).Value
R2.Caption = Cells(a, 17 + (2 * 2)).Value
R3.Caption = Cells(a, 17 + (2 * 3)).Value
R4.Caption = Cells(a, 17 + (2 * 4)).Value
R5.Caption = Cells(a, 17 + (2 * 5)).Value
R6.Caption = Cells(a, 17 + (2 * 6)).Value
R7.Caption = Cells(a, 17 + (2 * 7)).Value
R8.Caption = Cells(a, 17 + (2 * 8)).Value
R9.Caption = Cells(a, 17 + (2 * 9)).Value
R10.Caption = Cells(a, 17 + (2 * 10)).Value
R11.Caption = Cells(a, 17 + (2 * 11)).Value
R12.Caption = Cells(a, 17 + (2 * 12)).Value

par ceci :

For n = 1 To 12
#("R"&cstr(n)).Caption = Cells(a, 17 + (2 * n)).Value
Next n

où #("R"&cstr(n)) devrait désigner R1 à R12 en fonction de n....


NB: n'ai aucune idée de la syntaxe sous vb... je reproduit ici la syntaxe de la chaine d'indirection sur Ti92 - 89
 
M

michel

Guest
bonjour Remi

je ne suis pas sur que cela repondra totalement à ta demande mais , ci dessous un exemple pour lequel j'ai remplacé R par un Label .
le principe est d'effectuer une boucle sur les objets cible ( MSForms.label dans l'exemple )


Private Sub UserForm_Initialize()
Dim Ctrl As Control
Dim val As Byte
Dim n As Byte
Dim a as Byte

a=1

For Each Ctrl In UserForm1.Controls
If TypeOf Ctrl Is MSForms.Label Then
n = n + 1
Ctrl = Cells(a, 17 + (2 * n))
End If
Next

End Sub


bonne soirée
michel
lapin4.gif
 
S

sylsyl

Guest
Salut tout le monde,

voici une autre methode inspiree de celle de Michel au cas ou tu aurais d'autres labels que R1,...,R21

for n = 1 To 12
userform1.Controls("R" & n) = Cells(a, 17 + (2 * n))
next n

A++, Sylsyl.
 

Discussions similaires

Statistiques des forums

Discussions
312 489
Messages
2 088 855
Membres
103 979
dernier inscrit
bderradji