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