У меня есть список сотрудников и пользовательская форма для поиска в этом списке по нескольким полям.
Matric Apellido Nombre Avión
12 Burrow Irving F15
42 Nelson Howard A10
18 Krings Jack F18
Как совместить исследование двух (или более) поисковых полей?
Я попробовал следующий код, и я доволен им.
Вариант сравнения текста
' Méthode qui se déclanche lorsqu'on écris dans le champ du prénom
Private Sub name_reservist_Change()
ListBoxResults.Clear
If name_reservist <> "" Then searchresults
End Sub
' Méthode qui se déclanche lorsqu'on écris dans le champ du nom de famille
Private Sub surname_reservist_Change() 'www.blog-excel.com/creer-un-champ-de-recherche-vba
ListBoxResults.Clear
If surname_reservist <> "" Then searchresults
End Sub
' Méthode qui aggrège les résultats des recherches
Sub searchresults()
ListBoxResults.Clear
For ligne = 2 To Sheets("RECAP").Range("C1").End(xlDown).Row
If Sheets("RECAP").Cells(ligne, 4) Like "*" & name_reservist & "*" And Sheets("RECAP").Cells(ligne, 3) Like "*" & surname_reservist & "*" Then
ListBoxResults.AddItem Sheets("RECAP").Cells(ligne, 3) & " " & Sheets("RECAP").Cells(ligne, 4)
End If
Next
End Sub
Тем не менее, я думаю, что это может быть не лучшим решением, если у меня много экрана поиска, как в этом интерфейсе
Кажется, что я могу использовать метод "автофильтр" или передать диапазон в массив и перебрать его, передать диапазон в набор записей и создать sql. Однако я никогда не использовал эти методы.
Я впервые запускаю поисковую систему. Если у вас есть советы по дизайну браузера, мне интересно. Я знаю, что мои поиски не очень эффективны: например, когда я добавляю новый символ в поиск, я снова перебираю весь список.
Обновление
Я пытался обобщить со всеми ComboBox и TextBoxes:
' Méthode qui se déclenche lorsqu'on écrit dans le champ du prénom
Private Sub cboFunction_Change()
ListBoxResults.Clear
If cboFunction <> "" Then searchresults
End Sub
' Méthode qui se déclenche lorsqu'on écrit dans le champ du prénom
Private Sub txtNameReservist_Change()
' on vide la ListBox des résultats pour la mettre à jour
ListBoxResults.Clear
' Si le champ n'est pas vide on lance la méthode searchresults
If txtNameReservist <> "" Then searchresults
End Sub
...
' Méthode qui aggrège les résultats des recherches
Sub searchresults()
' on cherche à partir de la ligne 2 jusqu'au bout de la feuille
For ligne = 2 To Sheets("RECAP").Range("C1").End(xlDown).Row
' création des conditions
cond_function = Sheets("RECAP").Cells(ligne, 2) Like "*" & cboFunction & "*"
cond_surname = Sheets("RECAP").Cells(ligne, 3) Like "*" & txtSurnameReservist & "*"
cond_name = Sheets("RECAP").Cells(ligne, 4) Like "*" & txtNameReservist & "*"
cond_sex = Sheets("RECAP").Cells(ligne, 5) Like "*" & cboSexReservist & "*"
cond_rank = Sheets("RECAP").Cells(ligne, 6) Like "*" & cboRankReservist & "*"
cond_txtIncorporationNumberReservist = Sheets("RECAP").Cells(ligne, 7) Like "*" & cboRankReservist & "*"
...
' on teste si les cellules sont proches à droite ou à gauche des données écrites dans les champs de recherche
If cond_function And cond_surname And cond_name And cond_sex Then
' On remplit la ListBox des résultats avec les noms et prénom des personnels
ListBoxResults.AddItem Sheets("RECAP").Cells(ligne, 3) & " " & Sheets("RECAP").Cells(ligne, 4)
End If
Next
End Sub