OVH Cloud OVH Cloud

Vérification si l'un des fichiers choisi dans une list n'est pas dans une seconde list

2 réponses
Avatar
john.ambou
Bonjour,

J'ai une application comprenant 2 list box.
Une premi=E8re o=F9 l'on peut selectionner et la seconde qui est bloqu=E9.
Mon but est de faire une petite fonction de comparaison qui me permette
lors de l'appui sur l'une des lignes de la premiere list box de
verifier si le titre sur lequel j'ai cliqu=E9 n'est pas sur la seconde
list box.
Si le titre est existant, il faut l'afficher avec un msgbox.

Pourriez vous m'aidez ?

Merci
Johnson

2 réponses

Avatar
Picalausa François
Hello,

Tout dépend de la nature et de la quantité de données présentes dans une
listbox.
Pour une recherche simple, pas besoin de beaucoup de code, la listbox le
fait d'elle même:
Option Explicit

Private Const LB_FINDSTRING = &H18F
Private Const LB_FINDSTRINGEXACT = &H1A2

Private Const LB_OKAY = 0
Private Const LB_ERR = (-1)
Private Const LB_ERRSPACE = (-2)

Private Declare Function SendMessage _
Lib "user32" _
Alias "SendMessageA" _
( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any _
) _
As Long

Private Sub Form_Load()
Dim i As Long
Randomize Timer

For i = 0 To 25
List1.AddItem Chr$(65 + i)
If Int(Rnd * 2) Then
List2.AddItem Chr$(97 + i)
End If
Next i
End Sub

Private Sub List1_Click()
APIFind List2, List1.Text
End Sub

Private Sub APIFind(ListBox As ListBox, Text As String)
Dim Index As Long

'Effectue une recherche insensible à la casse à partir du premier
élement (-1)
Index = SendMessage(ListBox.hwnd, LB_FINDSTRINGEXACT, -1, ByVal Text)

'Si on a trouvé une occurence
If Not (Index = LB_ERR) Then
'Sélectionne l'entrée correspondante et affiche une boite de message
ListBox.ListIndex = Index
MsgBox ListBox.List(Index)
End If
End Sub

Néanmoins, cette solution sera peu performante pour un grand nombre d'items
dans la liste.
Dans cet exemple, puisque les entrées sont triées, une recherche
dichotomique (par exemple) serait généralement plus performante :

Private Sub Find(ListBox As ListBox, Text As String)
Dim RangeStart As Long
Dim RangeEnd As Long
Dim Index As Long

RangeStart = 0
RangeEnd = ListBox.ListCount
Index = (RangeStart + RangeEnd) 2

While (Index <> RangeStart)
'ListBox.List(Index) > Text
If StrComp(ListBox.List(Index), Text, vbTextCompare) = 1 Then
RangeEnd = Index
Else
RangeStart = Index
End If
Index = (RangeStart + RangeEnd) 2
Wend

' If StrComp(ListBox.List(Index), Text, vbTextCompare) = 0 Then
ListBox.ListIndex = Index
MsgBox ListBox.List(Index)
End If
End Sub

Donc la réponse dépend fortement du nombre et de la nature de tes données!

--
Picalausa François

a écrit dans le message de news:

Bonjour,

J'ai une application comprenant 2 list box.
Une première où l'on peut selectionner et la seconde qui est bloqué.
Mon but est de faire une petite fonction de comparaison qui me permette
lors de l'appui sur l'une des lignes de la premiere list box de
verifier si le titre sur lequel j'ai cliqué n'est pas sur la seconde
list box.
Si le titre est existant, il faut l'afficher avec un msgbox.

Pourriez vous m'aidez ?

Merci
Johnson
Avatar
john.ambou
Merci beaucoup