Recherche de valeurs a partir dans userform

toto -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,



Bonjour,
J'ai un userform dans lequel j'ai des texboxs vides. J'aimerai que lorsque je clique sur mon bouton de commande 1, une recherche soit effectuée pour trouver dans la colonne B de mon tableau Excel les cellules dans lesquelles est inscrit : « ok ». Pour toutes ces cellules, il faudrait que les valeurs de la colonne C soient reportées dans les textbox de mon userform.
Je suis un peu perdu...

Merci pour votre aide

Jérémie

3 réponses

pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 768
 
Bonjour,
Je suppose que tu n'as pas changé la propriété "Name" de tes Textbox, qu'ils ont tous un "N°" qui se "suivent" et que le 1er est nommé TextBox1 (A ADAPTER DANS LE CODE) :
TextBox1, TextBox2, textBox3 etc...
Avec une titite boucle par exemple :
Dim Lign As Long, DrLig As Long
Dim Cpt As Byte

Cpt = 1 'A ADAPTER : 1 serait le "n°" de ton 1er TextBox
With Sheets("Feuil1") 'A ADAPTER nom de ta feuille
    DrLig = .Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row
    For Lign = 1 To DrLig
        If UCase(.Cells(Lign, 2)) = "OK" Then
            Me.Controls("TextBox" & Cpt).Value = .Cells(Lign, 3)
            Cpt = Cpt + 1
        End If
    Next Lign
End With
0
toto
 
Merci, j'ai adapté, mais je n'arrive pas à mettre le compteur en place
textbox365

textbox369

textbox373

etc jusqu'a 393:

Exemple pour les 2 premieres boucles:

Private Sub CommandButton21_Click()

With Sheets("SECO")

If TextBox365 <> "" And TextBox366 <> "" Then

'boucle sur toutes les lignes pour retrouver la bonne ligne :

DrLig = .Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row
For Lign = 3 To DrLig

'si on trouve sur la même ligne la valeur des textbox 1, 2 dans les col B, C
If .Cells(Lign, 2) = TextBox365 And .Cells(Lign, 3) = TextBox366 Then
'alors en col F on mets la valeur de la combobox
.Cells(Lign, 6) = ComboBox1.Value
Exit For
End If
Next

End If

If TextBox369 <> "" And TextBox370 <> "" Then

'boucle sur toutes les lignes pour retrouver la bonne ligne :

DrLig = .Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row
For Lign = 3 To DrLig

'si on trouve sur la même ligne la valeur des textbox 1, 2 dans les col B, C
If .Cells(Lign, 2) = TextBox369 And .Cells(Lign, 3) = TextBox370 Then
'alors en col F on mets la valeur de la combobox
.Cells(Lign, 6) = ComboBox2.Value
Exit For
End If
Next


End If
End With
Calculate
End Sub
0
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 768
 
Bonjour,
Essaye une boucle comme celle ci :
[Code non testé, c'est pour te donner une piste...]
Private Sub CommandButton21_Click() 
Dim i As Byte 
Dim Cpt As Integer 
Dim Lign As Long, DrLig As Long 

Cpt = 365 
For i = 1 to 8 
    With Sheets("SECO")  
        If Me.Controls("TextBox" & Cpt) <> "" And Me.Controls("TextBox" & Cpt + 1) <> "" Then  
            DrLig = .Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row  
            For Lign = 3 To DrLig 
                If .Cells(Lign, 2) = Me.Controls("TextBox" & Cpt) And .Cells(Lign, 3) = Me.Controls("TextBox" & Cpt + 1) Then  
                    .Cells(Lign, 6) = Me.Controls("ComboBox" & i).Value  
                    Exit For  
                End If  
            Next Lign 
        End If  
    End With 
Cpt = Cpt + 4 
Next i 
End Sub
0
toto
 
Super cela marche pour la prmeiere ligne.mais j'ai apporté une modif pke j'ai trois textbox pour chaque ligne, (comme dans le code ci dessous).
Du coup mon texbox box 4 sera la prochaine valeur colonne B, la textbox5:prochaine valeur C , etc qd on trouvera une ligne avec :"OK".
J'arrive pas a adapter.
Voici mon code pour le moment:

Merci pôur l'aide

Private Sub CommandButton3_Click()
Dim Lign As Long, DrLig As Long

With Sheets("SECO")
DrLig = .Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row
For Lign = 1 To DrLig
If UCase(.Cells(Lign, 6)) = "OK" Then
Me.Controls("TextBox1").Value = .Cells(Lign, 2)
Me.Controls("TextBox2").Value = .Cells(Lign, 3)
Me.Controls("TextBox3").Value = .Cells(Lign, 4)

End If
Next Lign



End With

End Sub
0
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 768
 
j'ai apporté une modif pke j'ai trois textbox pour chaque ligne Et tu comptais le dire quand???
SCROGNEUGNEU!
Private Sub CommandButton3_Click() 
Dim Lign As Long, DrLig As Long 
Dim Cpt As Integer

Cpt = 1
With Sheets("SECO") 
    DrLig = .Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row 
    For Lign = 1 To DrLig 
        If UCase(.Cells(Lign, 6)) = "OK" Then 
            Me.Controls("TextBox" & Cpt).Value = .Cells(Lign, 2) 
            Cpt = Cpt + 1
            Me.Controls("TextBox" & Cpt).Value = .Cells(Lign, 3) 
            Cpt = Cpt + 1
            Me.Controls("TextBox" & Cpt).Value = .Cells(Lign, 4) 
            Cpt = Cpt + 1
        End If 
    Next Lign 
End With 
End Sub
0
toto
 
Parfait cela marche très bien.
Mais est-il possible que lorsque j'ai une valeur dans les texbox, si j'ai un combobox pour chaque ligne de mon userform et que je choisi entre la valeur A, B ou C, celle ci soit enregistrée dans le tableau excel dans la colonne E de la ligne correspondante?

Merci pour ton aide
0
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 768
 
Oui.
A ADAPTER : les "numéros" des textbox et de la combobox ainsi que les cellules...
'Si Les textbox sont remplis
If TextBox1 <> "" And textBox2 <> "" And textBox3 <> ""
    'boucle sur toutes les lignes pour retrouver la bonne ligne :
    With Sheets("SECO") 
        DrLig = .Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row 
        For Lign = 1 To DrLig 
            'si on trouve sur la même ligne la valeur des textbox 1, 2, 3 dans les col B, C, D
            If .Cells(Lign, 2) = TextBox1 Ans .Cells(Lign, 3) = TextBox2 And .Cells(Lign, 4) = TextBox3 Then
                'alors en colE on mets la valeur de la combobox
                .Cells(Lign, 5) = Combobox1
                Exit For
            End If
        Next
    End With
End If
0