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

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

Pierrot93

XLDnaute Barbatruc
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
@+
 

microclic

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

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote