Salut la foule
j'essaie désepérément d'affecter par une boucle, des valeurs à des noms de variables contenus dans un tableau.
en gros, je créé un userform dont le nbr de TextBox est variable, pour renseigner des valeurs et faire ensuite un calcul savant et alambiqué
jusque la tout va bien, ça fonctionne pour ce que j'ai besoin d'en faire.
la ou ca coince, c'est que le nbr de TextBox étant variable (mais connu à l'avance), je voudrais pouvoir affecter les valeurs renseignées dans les textbox à des variables dans un tableau contenant les noms de ces variables
pour illustrer, un petit exemple qui reprend l'architecture de mon usine à gaz
avec un userform (UserForm1) contenant un form avec 7 textbox et 1 label
on tape des valeurs dans les textbox et le calcul s'affiche directement dans le label
le traitement se fait dans un module de classe (ClasseTxtbox)
la vraie question c'est comment remplacer
ça :
a = ConvTxt(.TextBox1)
b = ConvTxt(.TextBox2)
c = ConvTxt(.TextBox3)
d = ConvTxt(.TextBox4)
...
x = ConvTxt(.TextBox24)
y= ConvTxt(.TextBox25)
z = ConvTxt(.TextBox26)
par un truc du genre ça (mais qui marche...) :
varTBL = [{"a" , "b", "c", "d", ...,"x", "y", "z"}]
For i = 1 To .Controls.Count-1 ' /!\ .Controls(0) doit etre .label1 /!\
varTBL(i ) = ConvTxt(.Controls(i).text)
Next
à vot' bon coeur...
j'essaie désepérément d'affecter par une boucle, des valeurs à des noms de variables contenus dans un tableau.
en gros, je créé un userform dont le nbr de TextBox est variable, pour renseigner des valeurs et faire ensuite un calcul savant et alambiqué
jusque la tout va bien, ça fonctionne pour ce que j'ai besoin d'en faire.
la ou ca coince, c'est que le nbr de TextBox étant variable (mais connu à l'avance), je voudrais pouvoir affecter les valeurs renseignées dans les textbox à des variables dans un tableau contenant les noms de ces variables
pour illustrer, un petit exemple qui reprend l'architecture de mon usine à gaz
avec un userform (UserForm1) contenant un form avec 7 textbox et 1 label
on tape des valeurs dans les textbox et le calcul s'affiche directement dans le label
le traitement se fait dans un module de classe (ClasseTxtbox)
la vraie question c'est comment remplacer
ça :
a = ConvTxt(.TextBox1)
b = ConvTxt(.TextBox2)
c = ConvTxt(.TextBox3)
d = ConvTxt(.TextBox4)
...
x = ConvTxt(.TextBox24)
y= ConvTxt(.TextBox25)
z = ConvTxt(.TextBox26)
par un truc du genre ça (mais qui marche...) :
varTBL = [{"a" , "b", "c", "d", ...,"x", "y", "z"}]
For i = 1 To .Controls.Count-1 ' /!\ .Controls(0) doit etre .label1 /!\
varTBL(i ) = ConvTxt(.Controls(i).text)
Next
à vot' bon coeur...
VB:
'UserForm1'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim TxtboxCollection As New Collection
Private Sub UserForm_Initialize()
For Each Ctrl In Me.Controls
If TypeOf Ctrl Is MSForms.TextBox Then
Set ClsTxtbox = New ClasseTxtbox
With TxtboxCollection
.Add ClsTxtbox: Set .Item(.Count).Txtbox = Ctrl
End With
End If
Next
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#########################################################
'ClasseTxtbox''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Public WithEvents Txtbox As MSForms.TextBox
Private Sub Txtbox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 44, 46
If Len(Txtbox.text) = 0 Then Txtbox.text = "0"
KeyAscii = 44
Case 48 To 57
DoEvents
Case Else
KeyAscii = 8
End Select
End Sub
Private Sub Txtbox_Change()
With UserForm1
varTBL = [{"a" , "b", "c", "d", "e", "f", "g"}]
For i = 1 To .Controls.Count -1
varTBL(i ) = ConvTxt(.Controls(i).text)
Next
a = ConvTxt(.TextBox1)
b = ConvTxt(.TextBox2)
c = ConvTxt(.TextBox3)
d = ConvTxt(.TextBox4)
e = ConvTxt(.TextBox5)
f = ConvTxt(.TextBox6)
g = ConvTxt(.TextBox7)
.Label1 = a+b-c*d*e/2+f-g ' <- c'est juste pour l'ex
End With
End Sub
Private Function ConvTxt(Txt) As Double
ConvTxt = CDbl(IIf(Txt = "", 0, Txt))
End Function
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''