Vérification si l'un des fichiers choisi dans une list n'est pas dans une seconde list
2 réponses
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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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 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
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
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 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
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
<john.ambou@free.fr> a écrit dans le message de news:
1153122940.873726.109820@m73g2000cwd.googlegroups.com...
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.
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 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
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.