1 pièce(s) jointe(s)
Recherche multicritere via userform et affichage listbox
Bonjour à tous et merci d'avance pour votre aide
J'ai réalisé un petit tableau d'exemple avec quelques noms, prénoms et numéro
J'ai un Userform qui contient une Combobox pour le choix du critère de recherche et un textbox afin de saisir ce que l'on recherche.
Ca marche très bien pour les champs NOM et PRENOM, de sorte que par exemple :
- si l'on choisi NOM dans la Combo et tape "DU" dans la textbox il alimente la listbox avec DUPONT DURANT et DUPOND
- si l'on choisi NOM dans la Combo et tape "OND" dans la textbox il alimente la listbox avec DUPOND
il prend donc en compte en guise de recherche tout ce qui est contenu dans la textbox
Le hic c'est que ça ne marche pas du tout pour le champs NUMERO, enfin ça marche seulement si on tape le numéro exact, j'aimerai trouver la même praticité de recherche qu'avec les champs PRENOM ET NOM comme par exemple :
- si l'on choisi NUMERO dans la Combo et tape "56" dans la textbox il alimente la listbox avec les lignes DUPONT car le numéro = 5123456 et DUPOND car le numéro = 5652533
Ci-dessous le code et en Fichier joint le doc excel
Il doit s'agir d'une histoire de format, à voir peut être avec la fonction LIKE Vba, j'ai tenté de m'en servir mais sans succès
Je pense que c'est un cas simple pour certain d'entre vous mais j'avoue que je sèche ! Merci
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
Private Sub UserForm_Initialize()
ComboBox1.List = WorksheetFunction.Transpose(Feuil1.Range("A1:C1")) ' on alimente en colonne la combobox1 avec les valeurs des intitulés de colonne _
du tableau de la feuille
End Sub
Private Sub CommandButton1_Click()
Sheets("SOURCE").Select
Range("I3").Select
Sheets("SOURCE").Range("I4") = ComboBox1.Value ' j'affecte le critere de recherche à la celulle I4
Sheets("SOURCE").Range("I5") = CStr("*" & TextBox1.Value & "*") ' et j'affecte le contenu de recherche à la cellule I5
Call FILTRERPOURLISTBOX 'je lance un filtre pécial
ListBox1.RowSource = Feuil1.Range("M4:O20").Address(external:=True) 'et j'alimente la listbox1 avec le resultat du filtre special
End Sub
Sub FILTRERPOURLISTBOX()
Sheets("SOURCE").Select
Range("A1:C20").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
"I4:I5"), CopyToRange:=Range("M4:O4"), Unique:=False
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub |