Recherche selon 3 ComboBox et affichage dans TextBox

Bonjour tout le monde, aprés 4 jours à me creuser la tête, je me tourne vers vous pour de l'aide.

J'ai un UserForm contenant 3 ComboBox en cascade alimentés par les colonnes A, B et C. ( Jusque là, ça fonctionne )

J'ai 7 TextBox et un bouton "Rechercher".

Je voudrais que selon le choix des 3 ComboBox, sachant que je n'ai qu'une ligne possible selon les choix, le contenu de la cellule de la colonne D s'affiche dans le TextBox1, la cellule de la colonne E dans le TextBox2 et ainsi de suite jusqu'au TextBox7.

J'ai parcouru pas mal de sujets sur les forums mais je n'arrive pas à le faire.

Quelqu'un pourrait il m'aider ?

Pour plus de clarté, je joint un fichier test.

Merci d'avance.

75test1.xlsm (24.13 Ko)

BONJOUR

Private Sub BtnRecherche_Click()
    Dim Ligne As Integer

    'ton code fonctionne bien mais t a oublie de mentionner :
     'Dim Ws As Worksheet
      Set Ws = Worksheets("Tableau")

    With Worksheets("Tableau")
    For Ligne = 3 To Range("A" & Rows.Count).End(xlUp).Row
      If .Range("A" & Ligne) <> "" Then
        If Me.ComboBox1 = Ws.Range("A" & Ligne) And Me.ComboBox2 = Ws.Range("B" & Ligne) And Me.ComboBox3 = Ws.Range("C" & Ligne) Then
            Me.TextBox1 = Ws.Range("D" & Ligne).Value
            Me.TextBox2 = Ws.Range("E" & Ligne).Value
            Me.TextBox3 = Ws.Range("F" & Ligne).Value
            Me.TextBox4 = Ws.Range("G" & Ligne).Value
            Me.TextBox5 = Ws.Range("H" & Ligne).Value
            Me.TextBox6 = Ws.Range("I" & Ligne).Value
            Me.TextBox7 = Ws.Range("J" & Ligne).Value
        End If
      End If
    Next Ligne
  End With
End Sub

vous pouvez aussi faire comme ca :

Private Sub Recherche()
    Dim Ligne As Integer

    'ton code fonctionne bien mais t a oublie de mentionner :
     'Dim Ws As Worksheet
      Set Ws = Worksheets("Tableau")
   With Worksheets("Tableau")
    For Ligne = 3 To Range("A" & Rows.Count).End(xlUp).Row
      If .Range("A" & Ligne) <> "" Then
        If Me.ComboBox1 = Ws.Range("A" & Ligne) And Me.ComboBox2 = Ws.Range("B" & Ligne) And Me.ComboBox3 = Ws.Range("C" & Ligne) Then
            Me.TextBox1 = Ws.Range("D" & Ligne).Value
            Me.TextBox2 = Ws.Range("E" & Ligne).Value
            Me.TextBox3 = Ws.Range("F" & Ligne).Value
            Me.TextBox4 = Ws.Range("G" & Ligne).Value
            Me.TextBox5 = Ws.Range("H" & Ligne).Value
            Me.TextBox6 = Ws.Range("I" & Ligne).Value
            Me.TextBox7 = Ws.Range("J" & Ligne).Value
        End If
      End If
    Next Ligne
  End With
End Sub

puis ajouter :

Private Sub ComboBox3_Change()
Recherche
End Sub

 Private Sub ComboBox1_Change()
    'Remplissage Combo2
    Alim_Combo 2, ComboBox1.Value
    Recherche
End Sub 
 Private Sub ComboBox2_Change()
    'Remplissage Combo3
    Alim_Combo 3, ComboBox2.Value
    Recherche
End Sub

et suprimmer le bouton de recherche

Bonjour Amir et merci pour votre réponse.

Je ne comprends pas, quand je rajoute "Dim Ws As Worksheet" sous "Dim Ligne As Integer" lorsque je lance l'UserForm, je rempli mes ComboBox et je clique sur le bouton mais ça ne m'affiche toujours pas les données dans les TextBox.

J'ai donc copié votre code modifié, c'est pareil.

Cela fonctionne bien chez vous ?

bonsoir

DESOLE Je me sui trompe

Option Explicit
Dim Ws As Worksheet
Dim NbLignes As Integer
Dim Ws As Worksheet  ' : est déjà déclarée en dehors du code des procédures (Function, Sub …) .
'Les variables de module doivent être déclarées à l'extérieur des procédures dans le module.
'Elles ' existent tant que le module est chargé et sont visibles dans toutes les procédures du module.
' Donc ' sont accessibles pour tout les autre code (sub ….end sub)

Alors votre code fonctionne bien mais vous avez oublie de mentionner a l intérieur de code de bouton :

Private Sub BtnRecherche_Click()
    Dim Ligne As Integer

    With Worksheets("Tableau")

    ' For Ligne = 3 To Ws.Range("A" & Rows.Count).End(xlUp).Row
    ' ajouer "Ws"   devant Range("A" & Rows.Count).End(xlUp).Row comme ca :
    For Ligne = 3 To Ws.Range("A" & Rows.Count).End(xlUp).Row
    ' parce que  Range("A" & Rows.Count).End(xlUp).Row concerne la fuille active
      If .Range("A" & Ligne) <> "" Then
        If Me.ComboBox1 = Ws.Range("A" & Ligne) And Me.ComboBox2 = Ws.Range("B" & Ligne) And Me.ComboBox3 = Ws.Range("C" & Ligne) Then
            Me.TextBox1 = Ws.Range("D" & Ligne).Value
            Me.TextBox2 = Ws.Range("E" & Ligne).Value
            Me.TextBox3 = Ws.Range("F" & Ligne).Value
            Me.TextBox4 = Ws.Range("G" & Ligne).Value
            Me.TextBox5 = Ws.Range("H" & Ligne).Value
            Me.TextBox6 = Ws.Range("I" & Ligne).Value
            Me.TextBox7 = Ws.Range("J" & Ligne).Value
        End If
      End If
    Next Ligne
  End With
End Sub

Mais utilisez un de ces deux code :

Private Sub BtnRecherche_Click()
    Dim Ligne As Integer
    With Worksheets("Tableau")
    For Ligne = 3 To .Range("A" & Rows.Count).End(xlUp).Row
      If .Range("A" & Ligne) <> "" Then
        If Me.ComboBox1 = .Range("A" & Ligne) And Me.ComboBox2 = .Range("B" & Ligne) And Me.ComboBox3 = .Range("C" & Ligne) Then
            Me.TextBox1 = .Range("D" & Ligne).Value
            Me.TextBox2 = .Range("E" & Ligne).Value
            Me.TextBox3 = .Range("F" & Ligne).Value
            Me.TextBox4 = .Range("G" & Ligne).Value
            Me.TextBox5 = .Range("H" & Ligne).Value
            Me.TextBox6 = .Range("I" & Ligne).Value
            Me.TextBox7 = .Range("J" & Ligne).Value
        End If
      End If
    Next Ligne
  End With
End Sub

ou :

Private Sub BtnRecherche_Click()
    Dim Ligne As Integer
      For Ligne = 3 To Ws.Range("A" & Rows.Count).End(xlUp).Row
      If Ws.Range("A" & Ligne) <> "" Then
        If Me.ComboBox1 = Ws.Range("A" & Ligne) And Me.ComboBox2 = Ws.Range("B" & Ligne) And Me.ComboBox3 = Ws.Range("C" & Ligne) Then
            Me.TextBox1 = Ws.Range("D" & Ligne).Value
            Me.TextBox2 = Ws.Range("E" & Ligne).Value
            Me.TextBox3 = Ws.Range("F" & Ligne).Value
            Me.TextBox4 = Ws.Range("G" & Ligne).Value
            Me.TextBox5 = Ws.Range("H" & Ligne).Value
            Me.TextBox6 = Ws.Range("I" & Ligne).Value
            Me.TextBox7 = Ws.Range("J" & Ligne).Value
        End If
      End If
    Next Ligne
 End Sub

vous pouver faire aussi

'

Un grand merci Amir, après 4 jours de prise de tête.

Effectivement je n'était pas loin mais je ne l'aurais certainement pas trouvé.

Merci encore.

suis sur un problème un peu similaire...peux tu partager ton fichier avec les changements ?

Merci..

Bonjour,

Réalisé en 10 mn avec un programme générique

Ceuzin

Rechercher des sujets similaires à "recherche combobox affichage textbox"