Recherche dans une ListBox avec SendMessage....infructueuse !

Résolu
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 - 11 oct. 2007 à 21:59
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 - 12 oct. 2007 à 00:24
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

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
11 oct. 2007 à 22:07
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
3
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
11 oct. 2007 à 22:14
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 />
3
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
11 oct. 2007 à 22:57
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 ?
3
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 oct. 2007 à 23:30
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++
3

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

Posez votre question
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
12 oct. 2007 à 00:20
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 />
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
12 oct. 2007 à 00:24
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 />
0