Moteur de recherche avec sélection de la ligne trouvée

  • Initiateur de la discussion Initiateur de la discussion Fab51
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Fab51

XLDnaute Nouveau
Bonjour à tous,

Je suis actuellement entrain de construire un glossaire pour un projet en SI. Pour faciliter la recherche de mot par les utilisateurs, j'ai construit un moteur de recherche sur la base d'un développement que j'ai trouvé sur ce forum.

Contexte :

Voici le fonctionnement de ce moteur : Dès que l'utilisateur clique sur "rechercher", une userform apparait avec deux textbox et une listview qui affiche de manière dynamique les résultats en fonction des mots entrés dans les textbox. Chaque textbox corresponde à une colonne du tableau où la recherche est effectuée. Ce tableau comprend 3 colonnes en tout.

Résultat recherché :

Actuellement, lorsque je clique sur un résultat de la listview, la cellule où se trouve le résultat est sélectionnée. Je désire que ce soit plutôt la ligne du résultat qui soit sélectionnée. Quelles sont les modifications à apporter dans mon code :

Private Sub ListBox1_Click()
Sheets("Glossaire").Cells(recherche.ListBox1.List(recherche.ListBox1.ListIndex, 2), 1).Select
End Sub

Private Sub TextBox1_Change()
Call chercher(TextBox1.Value, 1)
End Sub

Private Sub TextBox2_Change()
Call chercher(TextBox2.Value, 2)
End Sub

Public Sub chercher(rech, c) ' recherche d'une chaine
Dim sel As Object
Dim valide As Boolean
Dim i As Integer
Dim l As Long
Dim n As Integer
l = 2: n = 0
recherche.ListBox1.Clear
With Sheets("Glossaire")
If rech = "" Then Exit Sub
Do
Set sel = .Cells.Find(What:=rech, After:=.Cells(l, c), _
LookIn:=xlValues, LookAt:=xlPart, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False)
If sel Is Nothing Then Exit Do
If sel.Column <> c Then Exit Do
If sel.Row <= l Then Exit Do
l = sel.Row
valide = True
For i = 1 To 1
If recherche.Controls("TextBox" & i).Value <> "" _
And InStr(1, LCase(.Cells(l, i).Value), LCase(recherche.Controls("TextBox" & i).Value)) = 0 Then valide = False
Next i
If valide Then
recherche.ListBox1.AddItem _
(.Cells(l, 1).Value & " " & "- " & _
.Cells(l, 2).Value)
recherche.ListBox1.List(n, 2) = sel.Row
n = n + 1
End If
Loop
End With
End Sub

Private Sub UserForm_Click()

End Sub



Merci par avance pour vos réponses...
 
Re : Moteur de recherche avec sélection de la ligne trouvée

Bonjour Fab

A tout hasard, peut être en remplacant :

Code:
Sheets("Glossaire").Cells(recherche.ListBox1.List(recherche.ListBox1.ListIndex, 2), 1).Select

par :

Code:
Sheets("Glossaire").Cells(recherche.ListBox1.List(recherche.ListBox1.ListIndex, 2), 1).EntireRow.Select

bon après midi
@+
 
Re : Moteur de recherche avec sélection de la ligne trouvée

à KJIN :

Bonjour Kjin, j'ai étudié ton fichier fab51 qui correspond parfaitement à ce que je cherche.
Cependant, j'ai beau l'adapter à ma base de données, rien ne s'affiche
dans ton exemple tu a 3 colonnes et tu commence par la cel A2
dans mon cas j'ai 21 colonnes et je veux commencer par la B2 en faisant des recherches à partir des 6 premieres colonnes (toi tu fais une recherche à partir des 2 premières).
Merci de m'éclairer, je dois rendre un fichier avant semaine prochaine.
Encore bravo pour ce module de recherche.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
578
Réponses
10
Affichages
440
Réponses
2
Affichages
334
  • Question Question
Microsoft 365 Problème de date
Réponses
5
Affichages
231
Réponses
4
Affichages
444
Réponses
5
Affichages
272
Retour