Vous en conviendrez, c'est un peu ... fastidieux. d'ou l'idée d'une boucle.
J'ai donc renommé mes Textbox de Textbox_A en Textbox1, Textbox_B en Textbox2, ect ect
Puis remplacer le code précédent par une boucle For Next
For t = 1 to 29
TextBox(t).Text = Cells(i + 2, t)
Next t
Mais cela ne marche pas.
et je ne comprend pas pourquoi.
J'ai testé avec la
syntaxe TextBox &t.Text = Cells(i + 2, t)et meme
TextBox (&t).Text = Cells(i + 2, t)
theflolyon
Messages postés11Date d'inscriptionmardi 8 juillet 2008StatutMembreDernière intervention27 février 2010 21 juil. 2008 à 11:29
Alors pour répondre au post de Youpi :
l'erreur générée est : "erreur de compilation Sub ou Function non définie" en me surlignant textbox(t)
dans ma boucle.
de plus j'ai testé ton code, et cela ne marche pas en l'état. en fait il ne valide pas le code suivant (écrit en rouge)
For Each ctl As Control In Me.Controls
J'ai testé avec la syntaxe suivante
For Each ctl As Control In Userform1
marche pas non plus
... Toujours apprendre, jamais dépendre ...
youpiyoyo
Messages postés539Date d'inscriptionvendredi 6 juin 2003StatutMembreDernière intervention14 juillet 2010 21 juil. 2008 à 11:36
désolé alors, ce code fonctionne avec vb.net, en .net TextBox(indice) ne fonctionne pas.
si tu les noms de tes textbox sont textbox1, textbox2,etc...
pourquoi tu ne ferais pas:
dim txtName as string = "textbox"
for i as int16=0 to 29
me.controls(txtName+trim(val(i))).text=cells(indice,i)
next
tu peux essayer un trycast aussi
je prefere largement ma premiere solution, je trouve ca casse gue**e cette solution, regarde en vb6 ce qui est possible.
youpi :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 21 juil. 2008 à 11:42
salut,
tu peux te faire une petite routine, du genre....
Private Function GetIndexTB(ByRef oTB As Object) As Integer
If LenB(oTB.Name) > 14 Then
If LeftB$(oTB.Name, 14) = "TextBox" Then
GetIndexTB = MidB(oTB.Name, 15)
End If
End If
End Function
et tu boucles avec each, du genre...
Dim oCtrl As Object, iIndex As Integer, iRow As Integer
iRow = i + 2
For Each oCtrl In Me.Controls
If TypeOf oCtrl Is TextBox Then
iIndex = GetIndexTB(oCtrl)
If (iIndex > 0) And (iIndex < 30) Then
oCtrl.Text = Cells(iRow, iIndex)
End If
Next oCtrl
Set oCtrl = Nothing
++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 21 juil. 2008 à 11:46
pas d'index en VBA...
j'avais préparé du code, en parallèle de PCPT...
tant pis, je le place quand même ^^
Private Sub CommandButton1_Click()
Dim oCtl As Object
Dim nCol As Long
Dim sKey As String
'# On enumére les controles, un par un
For Each oCtl In Me.Controls
'# On ne consière que les TextBoxes
If TypeOf oCtl Is MsForms.TextBox Then
'# On teste le début du nom du controle
If Left$(oCtl.Name, 8) = "TextBox_" Then
'# Ce qui suit, dans le nom, est l'indice de la colonne à lire
sKey = Mid$(UCase$(oCtl.Name), 9)
'# On calcule l'indice de la colonne concernée
nCol = Asc(sKey) - 64
If Len(sKey) = 2 Then
nCol = nCol * 26 + Asc(Mid$(sKey, 2, 1)) - 64
End If
'# au final, on place dans le textbox la valeur lue dans la ligne active
'# et de la colonne dont on vient de calculer l'indice
oCtl.Text = Cells(Selection.Row, nCol)
End If
End If
Next oCtl
End Sub
zen69
Messages postés584Date d'inscriptionjeudi 28 décembre 2006StatutMembreDernière intervention29 avril 20101 21 juil. 2008 à 16:58
En fait tes text box sont mal nommé... pour rendre le tout plus propre tu deverais utilisé le meme nom pour chaque textbox et attribuer un index a chaque text box... qui correpond a une ligne dans excel
de sorte que textBox(index</gras>rownumber)
Comme ca tu peux faire une boucle facilement et proprement