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

Messages postés
1884
Date d'inscription
samedi 1 avril 2006
Dernière intervention
20 novembre 2007
- 11 oct. 2007 à 21:59 - Dernière réponse :
Messages postés
1884
Date d'inscription
samedi 1 avril 2006
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 />
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Dernière intervention
24 septembre 2014
- 11 oct. 2007 à 22:07
3
Merci
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

Merci cs_casy 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de cs_casy
Meilleure réponse
Messages postés
1884
Date d'inscription
samedi 1 avril 2006
Dernière intervention
20 novembre 2007
- 11 oct. 2007 à 22:14
3
Merci
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 />

Merci chaibat05 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de chaibat05
Meilleure réponse
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
- 11 oct. 2007 à 22:57
3
Merci
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 ?

Merci jmfmarques 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de jmfmarques
Meilleure réponse
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
- 11 oct. 2007 à 23:30
3
Merci
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++

Merci BruNews 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de BruNews
Messages postés
1884
Date d'inscription
samedi 1 avril 2006
Dernière intervention
20 novembre 2007
- 12 oct. 2007 à 00:20
0
Merci
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 />
Commenter la réponse de chaibat05
Messages postés
1884
Date d'inscription
samedi 1 avril 2006
Dernière intervention
20 novembre 2007
- 12 oct. 2007 à 00:24
0
Merci
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 />
Commenter la réponse de chaibat05

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.