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

[Résolu]
Signaler
Messages postés
63
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
8 septembre 2008
-
Messages postés
63
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
8 septembre 2008
-
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" ?

7 réponses

Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
29
ç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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 70 internautes nous ont dit merci ce mois-ci

Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
29
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 70 internautes nous ont dit merci ce mois-ci

Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
29
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
Messages postés
63
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
8 septembre 2008

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.
Messages postés
63
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
8 septembre 2008

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:
Messages postés
63
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
8 septembre 2008

oh merci beaucoup

Sympa !!!
Messages postés
63
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
8 septembre 2008

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