Recherche dans une ListBox avec SendMessage....infructueuse ! [Résolu]

Signaler
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
-
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
-
salut,
je voudrais rechercher le contenu d' une TextBox dans une liste.
Pour cela j' ai declaré dans le module de ma feuille :
Private Declare Function SendMessage Lib _
"user32" Alias "SendMessageA" (ByVal hwnd _
As Long, ByVal wMsg As Integer, ByVal _
wParam As Integer, lParam As Any) As Long
Const LB_FINDSTRING = &H18F


-
Dans ma ListBox j' ai :
1
2
3
24
31
34
212
356
358


Dans ma procedure
Private Sub Text1_Validate( Cancel As Boolean)
    
     If SendMessage(lst.hwnd, LB_FINDSTRING, -1, Text1.Text) = -1 Then
        MsgBox " introuvable !"
        Cancel = True
     End If

End Sub


Si je recherche 35 par exemple, la recherche aboutit et il se pointe sur 356.
Et c' est pas le but.
Du coup, j' ai formaté mon texte.
000001
000002
000003
000024
000031
000034
000212
000356
000358


Private Sub Text1_Validate( Cancel As Boolean)
    Dim r As String
     r = Format$(Text1.Text, "000000")
    If SendMessage(lst.hwnd, LB_FINDSTRING, -1, r) = -1 Then
        MsgBox " introuvable !"
        Cancel = True
     End If
End Sub


J' ai refais le même test avec 35 = > le résultat est bon .
Mais avec le 2, le message est decevant => "Introuvable !"
En fait il renvoie toujours -1.


Question :
1° : j' ai raté quelque chose ?
2° :Quelle Const utiliser à la place de  LB_FINDSTRING = &H18F
(qui cherche le premier commençant par...), pour avoir une recherche exacte.
Ce qui m' évitera de formater et la liste et le texte entré ?


Merci de répondre et de ....trouver.







<hr />

I LIKE TO BE HERE WHEN I CAN


<hr />

6 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
Peut-etre trouveras-tu ta réponse ici --> 155 http://faq.vb.free.fr/index.php?question=155

A priori, il faut utiliser LB_FINDSTRINGEXACT = &H1A2

---- Sevyc64  (alias Casy) ---- <hr size ="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Salut Casy,
j' ai testé avec LB_FINDSTRINGEXACT  avant de visiter le lien => les choses ne se sont pas arrangées.
Je jette un coup d' oeil sur le lien (avant de m' absenter un moment) et je donne des nouvelles...plus tard.
Merci.

<hr />I LIKE TO BE HERE WHEN I CAN
<hr />
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Ben chez moi, pas de problème avec :

Const LB_FINDSTRING = &H18F
      Private Declare Function SendMessage Lib "User32" Alias "SendMessageA" _
         (ByVal hWnd As Long, ByVal wMsg As Integer, ByVal wParam As Integer, lParam As Any) As Long

Private Sub Command1_Click()
 MsgBox SendMessage(List1.hWnd, LB_FINDSTRING, -1, ByVal "00002")
End Sub


Private Sub Form_Load()
   List1.Clear
   List1.AddItem "00001"
   List1.AddItem "00023"
   List1.AddItem "00002"
   List1.AddItem "00032"
End Sub

mon msgbox me retourne bien l'indice 2....
Aurais-je mal compris le vrai problème ?
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
C'est bien LB_FINDSTRINGEXACT qu'il faut, ça recherche la 1ere occurence trouvée mais case insensitive, aucun besoin de formatage du texte.

ciao...
BruNews, MVP VC++
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
salut jmfmarques,salut BruNews,
désolé de n' avoir pas pu répondre à temps.
Effectivement, comme indiqué par BruNews ça marche avec
LB_FINDSTRINGEXACT et surtout avec ByVal.Sans ça ça marche pas.


Avec ma liste...


MsgBox SendMessage(lstEleves.hwnd, LB_FINDSTRINGEXACT, -1,  "356")
renvoie -1 => non trouvé
MsgBox SendMessage(lstEleves.hwnd, LB_FINDSTRINGEXACT, -1, ByVal "356")
renvoie 7 =>  trouvé.


Par contre , jmfmarques, avec LB_FINDSTRING
MsgBox SendMessage(lstEleves.hwnd, LB_FINDSTRINGEXACT, -1, ByVal "35")
s' arrête sur le 356 et renvoie 7 trouvé alors que 35 n' est pas dans la liste.

Merci les gars.


PS:jmfMarques, Content de te retrouver de nouveau,et bon retour
parmi nous.

Il faudra t' expliquer quand même. on ne s' absente pas comme ça sur un coup de tête !
 ... sauf si c' est personnel bien sûr.










Rien de fâcheux, j' espère.
<hr />I LIKE TO BE HERE WHEN I CAN
<hr />
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
c' est
MsgBox SendMessage(lstEleves.hwnd, LB_FINDSTRING, -1, ByVal "35")
qui s' arrête sur le 356 et renvoie 7 trouvé alors que 35 n' est pas dans la liste.
Erreur dans le  copier/coller !

<hr />I LIKE TO BE HERE WHEN I CAN
<hr />