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
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
	 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		