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 Sub

Là 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 I

Toutefois 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 Sub

Bien 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
    Next

contrô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 I

Merci à 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

Rechercher des sujets similaires à "simplification code"