"Besoin de vous", chercher un mot dans toute une listeview, sans arreter après l

Résolu
bdgta Messages postés 63 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 8 septembre 2008 - 25 févr. 2006 à 17:09
bdgta Messages postés 63 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 8 septembre 2008 - 26 févr. 2006 à 18:05
Bonjour, voici le code que j'ai créé

Dim Item As ListItem
Dim rech As String
rech = Textrechercher.Text
If Textrechercher.Text = Empty Then GoTo fin
Set Item = List.FindItem(rech, lvwText, lvwPartial)
If Item Is Nothing Then

Set Item = List.FindItem(rech, lvwSubItem, lvwPartial)

If Item Is Nothing Then
MsgBox "Ce film ou ... n'existe pas"
Else
MsgBox "Le film ou ... : " + rech + " a été trouvé"
Item.EnsureVisible 'montre la ligne contenant le mot
Item.ForeColor = &HFF& 'montre le mot en rouge
Item.Selected = True ' Selectionne la ligne.

End If
Else
MsgBox "Le film ou ... : " + rech + " a été trouvé"
Item.EnsureVisible 'montre la ligne contenant le mot
Item.ForeColor = &HFF& 'montre le mot en rouge
Item.Selected = True ' Selectionne la ligne
End If

fin:


J'aimerais savoir, comment fait t'on pour ne pas arreter la recherche après le premier resultat concluant, pour chercher dans toute la liste sur plusieurs collonnes ?

Je possede une variable qui calcule le nombre d'occurrences(lignes).

Merci de votre aide.

Est-il possible de chercher un bout de mot, ex: tapez "long" et trouver la ligne "le long voyage" ?
A voir également:

7 réponses

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
26 févr. 2006 à 15:05
ça commence à venir,

mais pour la première colonne il faudrait aussi poursuivre la recherche

j'aurais fait 2 traitements séparés pour lvText et lvwSubItem





For i = 1 to List.ListItems.Count

Set Item = List.FindItem(rech, lvwText, i, lvwPartial)



If Item Is Nothing Then
Exit For

Else

MsgBox "Le film ou ... : " + rech + " a été trouvé"

Item.EnsureVisible

Item.ForeColor = &HFF&

Item.Selected = True

i = Item.Index

End If



Next i



For i = 1 to List.ListItems.Count


Set Item = List.FindItem(rech, lvwSubItem, i, lvwPartial)





If Item Is Nothing Then


MsgBox "Ce film ou ... n'existe pas"


Exit For


Else


MsgBox "Le film ou ... : " + rech + " a été trouvé"


Item.EnsureVisible

' ici on sait pas dans quelle colonne

' Item.ListSubItems(???).ForeColor = vbRed


Item.ForeColor = &HFF&


Item.Selected = True


i = Item.Index


End If





Next i


Daniel
3
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
26 févr. 2006 à 15:53
et pour trouver un bout de chaîne n'importe où

il faut laisser tomber FindItem

ça permet en plus de sélectionner la colonne





Dim n As Long

Dim i As Long

Dim j As Integer

Dim Item As ListItem



For i = 1 To List.ListItems.Count



Set Item = List.ListItems(i)

If InStr(1, Item.Text, rech, vbTextCompare) > 0 Then

Item.Selected = True

Item.ForeColor = vbRed

n = n + 1

End If

For j = 1 To List.ColumnHeaders.Count - 1

If
InStr(1, Item.SubItems(j), rech, vbTextCompare) > 0 Then

Item.Selected = True

Item.ListSubItems(j).ForeColor = vbRed

n = n + 1

End If

Next

Next

If n > 0 Then

MsgBox "Le film ou ... : " + rech + " a été trouvé"

End If


Daniel
3
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
25 févr. 2006 à 18:36
Salut,

déjà il te manque un paramètre, l'index à partir de où se fait la recherche

commencer la recherche avec i = 1

et ensuite si trouvé, refaire une nouvelle recherche avec i = item.index + 1

etc... jusqu'à épuisement



Dim i As Integer

i = 1

Set Item = List.FindItem(rech, lvwSubItem, i, lvwPartial)




pas possible de trouver un morceau de chaîne en plein milieu,

il faudrait changer de méthode, balayer tous les subitems, et faire la recherche avec Instr().


Daniel
0
bdgta Messages postés 63 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 8 septembre 2008
26 févr. 2006 à 14:34
Je viens de faire ceci, peut tu y jeter un coup d'oeil.

Dim Item As ListItem
Dim rech As String
Dim i As Integer
i = 1
rech = Textrechercher.Text
If Textrechercher.Text = Empty Then GoTo fin
Set Item = List.FindItem(rech, lvwText, lvwPartial)
If Item Is Nothing Then
Debut:
If i >= lblNbDivX.Caption Then GoTo fin
Set Item = List.FindItem(rech, lvwSubItem, i, lvwPartial)

If Item Is Nothing Then
MsgBox "Ce film ou ... n'existe pas"
Else
MsgBox "Le film ou ... : " + rech + " a été trouvé"
Item.EnsureVisible 'montre la ligne contenant le mot
Item.ForeColor = &HFF& 'montre le mot en rouge
Item.Selected = True ' Selectionne la ligne.
i = Item.Index + 1
GoTo Debut
End If
Else
MsgBox "Le film ou ... : " + rech + " a été trouvé"
Item.EnsureVisible 'montre la ligne contenant le mot
Item.ForeColor = &HFF& 'montre le mot en rouge
Item.Selected = True ' Selectionne la ligne
End If

fin:

Merci de ton aide.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bdgta Messages postés 63 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 8 septembre 2008
26 févr. 2006 à 14:55
Non, c'est bon, je viens de faire ceci, est-ce bon? Merci.

Dim Item As ListItem
Dim rech As String
Dim i As Integer
i = 1
rech = Textrechercher.Text
If Textrechercher.Text = Empty Then GoTo fin
Set Item = List.FindItem(rech, lvwText, lvwPartial)
If Item Is Nothing Then
Debut:

Set Item = List.FindItem(rech, lvwSubItem, i, lvwPartial)

If Item Is Nothing Then
If i >= 2 Then GoTo fin
MsgBox "Ce film ou ... n'existe pas"
Else
MsgBox "Le film ou ... : " + rech + " a été trouvé"
Item.EnsureVisible 'montre la ligne contenant le mot
Item.ForeColor = &HFF& 'montre le mot en rouge
Item.Selected = True ' Selectionne la ligne.
i = Item.Index + 1
If i >= lblNbDivX.Caption Then GoTo fin
GoTo Debut
End If
Else
MsgBox "Le film ou ... : " + rech + " a été trouvé"
Item.EnsureVisible 'montre la ligne contenant le mot
Item.ForeColor = &HFF& 'montre le mot en rouge
Item.Selected = True ' Selectionne la ligne
End If

fin:
0
bdgta Messages postés 63 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 8 septembre 2008
26 févr. 2006 à 17:19
oh merci beaucoup

Sympa !!!
0
bdgta Messages postés 63 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 8 septembre 2008
26 févr. 2006 à 18:05
Voici le code que j'ai mis grace à toi,
pour que tu es un aperçu de ce que jai fait grace à ton aide.

Encore merci.

Private Sub Rechercher_Click()
Dim Item As ListItem
Dim rech As String
Dim i, cpt As Integer
Dim n As Long
Dim k As Long
Dim j As Integer
Dim Item2 As ListItem

i = 1
cpt = 0
rech = Textrechercher.Text
If Textrechercher.Text = Empty Then GoTo fin
For i = 1 To List.ListItems.Count
Set Item = List.FindItem(rech, lvwText, i, lvwPartial)

If Item Is Nothing Then
Exit For
Else
Item.EnsureVisible
Item.ForeColor = &HFF&
Item.Selected = True
i = Item.Index
cpt = cpt + 1
End If

Next i

For i = 1 To List.ListItems.Count
Set Item = List.FindItem(rech, lvwSubItem, i, lvwPartial)

If Item Is Nothing Then
Exit For
Else

Item.EnsureVisible
' ici on sait pas dans quelle colonne
' Item.ListSubItems(???).ForeColor = vbRed
Item.ForeColor = &HFF&
Item.Selected = True
i = Item.Index
cpt = cpt + 1
End If

Next i


For k = 1 To List.ListItems.Count

Set Item2 = List.ListItems(k)
If InStr(1, Item2.Text, rech, vbTextCompare) > 0 Then
Item2.Selected = True
Item2.ForeColor = vbRed
n = n + 1
End If
For j = 1 To List.ColumnHeaders.Count - 1
If InStr(1, Item2.SubItems(j), rech, vbTextCompare) > 0 Then
Item2.Selected = True
Item2.ListSubItems(j).ForeColor = vbRed
n = n + 1
End If
Next
Next
If n > 0 Or cpt > 0 Then
MsgBox "Le film ou ... : " + rech + " a été trouvé"
Else
MsgBox "Il n'y a aucune réponse"
End If
fin:
End Sub



A la prochaine
0
Rejoignez-nous