Simplification d'un code
Bonjour cher Forum!
Pardonnez moi pour le titre du sujet je ne savais pas comment l'inscrire pour bien définir le besoin.
J'ai un code qui devient long du au nombre de TextBox dont je dois y faire inscrire de l'information automatique. Voici le code en question :
Private Sub ListBox1_Change()
On Error Resume Next
'CommandButton_Nouveau.Enabled = False
Dim Nom2 As Range
Dim X As Integer, LLigne As Integer
Dim Id As String
'EffacerLesTextBox
For X = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(X) = True Then
Id = ListBox1.List(X)
Debug.Print Len(Id) & " : " & Id
LLigne = ListBox1.ListIndex
Exit For
End If
Next X
For Each Nom2 In AireEntreprise
If CStr(Nom2) = Trim(Id) Then
TextBox_Index.Value = Nom2.Offset(0, 0)
TextBox2.Value = Nom2.Offset(0, 1)
'TextBox3.Value = Nom2.Offset(0, 3)
'TextBox4.Value = Nom2.Offset(0, 4)
'TextBox5.Value = Nom2.Offset(0, 5)
'TextBox6.Value = Nom2.Offset(0, 6)
'TextBox7.Value = Nom2.Offset(0, 7)
'TextBox8.Value = Nom2.Offset(0, 8)
'TextBox9.Value = Nom2.Offset(0, 9)
'TextBox10.Value = Nom2.Offset(0, 10)
'TextBox11.Value = Nom2.Offset(0, 12)
'TextBox12.Value = Nom2.Offset(0, 13)
End If
Next
End SubLà où sa devient long, et vous l'aurez deviné, c'est quand je vais chercher les valeurs pour les retranscrire dans chacune des TextBox. Au total j'ai TextBox1 jusqu'à 66. Pour remettre les TextBox vierge j'utilise un code qui fonctionne très bien soit :
For I = 1 To 66: Controls("TextBox" & I).Enabled = True: Next IToutefois je n'arrive pas à appliquer le même concept afin de l'intégrer dans le code plus haut. Savez-vous s'il existe une formulation qui me permettrait de réduire et simplifier le premier code ci-haut?
Merci d'avance à tous!
Bonsoir,
Créez un tableau avec les "références" utiles ; montab(i) = 1; montab(i+1)=3
puis une boucle For to next de i :
for i = 0 to 13
Contrôle("TextBox"&i+2") = Nom2.Offset(0, montab(i))
Next i
@ bientôt
LouReeD
Bonsoir LouReed,
J'essaie d'appliquer ton code, je n'ai toutefois jamais fait de tableau, j'ai comme l'impression que ça va beaucoup améliorer les choses! Voici ce que j'ai pensé que je devais faire :
Private Sub ListBox1_Change()
On Error Resume Next
'CommandButton_Nouveau.Enabled = False
Dim Nom2 As Range
Dim X As Integer, LLigne As Integer
Dim Id As String
Dim I As Integer
EffacerTextBox
For X = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(X) = True Then
Id = ListBox1.List(X)
Debug.Print Len(Id) & " : " & Id
LLigne = ListBox1.ListIndex
Exit For
End If
Next X
For Each Nom2 In AireEntreprise
If CStr(Nom2) = Trim(Id) Then
montab(I) = 1
montab(I + 1) = 3
For I = 0 To 66: Contrôle("TextBox " & I + 2) = Nom2.Offset(0, montab(I))
Next I
End If
Next
End SubBien entendu le code ne fonctionne pas, je ne sais pas si tu pourrais m'éclairé?
Bonjour,
plutôt qq chose comme ça
Dim tabl
For Each Nom2 In AireEntreprise
If CStr(Nom2) = Trim(ID) Then
tabl = Nom2.Resize(, 66)
For i = 0 To 65
Contrôle("TextBox " & i + 2) = Nom2.Offset(0, tabl(1, i+1))
Next i
End If
Nextcontrôle l'indice colonne de table, j'ai l'impression que ça pourrait être i+2
eric
Bonjour eriiic,
J'ai tenté ton code et ça semble vouloir fonctionner, toute fois en partie. Je joints mon fichier pour que tu puisses voir ce que ça fait. J'ouvre donc le UF_Appeloffre et je clique dans la ListBox1 la ligne test. Des informations sont entrée dans les TextBox, mais un peu n'importe comme tu pourras le constater et certaine TextBox entre la même information. Étrangement, quand je teste en écrivant autre chose dans le tableau DATA_AO, le code marche lui aussi différemment et va entrer des valeurs différente dans les TextBox...
Je suis là-dessus depuis hier et je n'arrive tout simplement à trouver le pourquoi de la chose!
Rebonjour!
Ouf franchement, je n'y arrive pas j'ai dû essayé toutes les combinaisons ça ne fonctionne vraiment pas... Est-ce que finalement quelqu'un avait trouvé la solution?
Bonjour,
je viens de jeter un oeil à ton fichier.
Je ne trouve pas 66 texbox (?)
On ne sait précisément quoi doit aller où...
On ne sait pas quelle manips faire pour provoquer l'erreur.
Il y a belle lurette que j'ai renoncé à extirper les renseignements un par un sur un forum...
Ca sera sans moi, je laisse ma place. Désolé.
eric
Bonjour,
Je comprends et merci pour ton aide.
Si je peux me permettre d'expliquer d'avantage, je recherche en cliquant sur la ListBox1 qu'il est chercher les informations dans la feuille DATA_AO et la retranscrive dans les TextBox. Même si il ne fait pas les TextBox au complet je pourrais me débrouiller avec le code de base, toutefois quand j'ai essayé selon de eriiic, il retranscrivait dans les TextBox, mais mal et tout dépendament de l'information qui se retrouvait dans la feuille DATA_AO (si c'Était un chiffre ou des lettres) ça ne retranscrivait pas de la même manière dans les TextBox.
J'ai déjà un UserForm sur un autre classeur qui fonctionne très bien, j'ai entrée chaque information une à la fois, mais je n'avais pas beaucoup de TextBox. Cette fois si vu que j'en ai beaucoup je me demandais s'il y avais moyen justement de créer une fonction For par exemple pour facilité l'entrée des données et ne pas faire 70 ligne de code pour chacune des TextBox.
Merci de votre aide encore une fois!
Bonjour à tous!
C'est pour informer que j'ai fini par trouver! C'était si simple, le code était tous simplement trop complexe et quand j'ai fini par le comprendre je suis arrivé au résultat souhaiter. Voici la solution :
For I = 1 To 6
Controls("TextBox" & I) = Nom2.Offset(0, I)
Next IMerci à tous!
Bonsoir,
Regardez bien votre code et le mien...
Sauf que le mien parlait d'un tableau avec des valeurs données car dans votre exemple les "Offset" n'étaient pas chronologique : 1 puis 3 etc...
@ bientôt
LouReeD