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.
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