Как совместить исследование двух поисковых полей? - PullRequest
0 голосов
/ 05 июня 2019

У меня есть список сотрудников и пользовательская форма для поиска в этом списке по нескольким полям.

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

Тем не менее, я думаю, что это может быть не лучшим решением, если у меня много экрана поиска, как в этом интерфейсе

photo]

Кажется, что я могу использовать метод "автофильтр" или передать диапазон в массив и перебрать его, передать диапазон в набор записей и создать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...