Comparer 2 listbox

Résolu
cs_Fripouil Messages postés 175 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 8 mai 2017 - 15 mai 2008 à 01:41
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 - 16 mai 2008 à 03:19
Comment comparer 2 listbox qui contiennent presque les même données et indiquer quelles données ne sont pas présentes dans les 2 ?

J' ai essayé plein de codes mais impossible de faire dire lesquelles manque.

Merci de votre aide.

Fripouil

11 réponses

Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
16 mai 2008 à 03:19
Fais bien attention d'utiliser les bons types lorsque tu compares.

Une ListBox contiens des Object, pas des String. Donc si tu test avec Contains, ça test si les objets sont les mêmes et pas si le texte affiché est le même.

Donc par ex tu met dans une des liste les valeur 100, 101, 102 et 103 en Integer et dans l'autre "101" et "103" en String, ca ne trouvera pas de coresspondances.

Et aussi lorsque tu parcours les Items, il faut spéificer le bon type.
Lorsque tu ajoute des Item à la ListBox par l'éditeur Visual Basic, ça t'ajoute des String. Donc les tests se font de la facon suivante:

     For Each item As String In ListBox1.Items
            If Not ListBox2.Items.Contains(item) Then
                ListBox3.Items.Add(item)
            End If
     Next

car si tu fais If Not ListBox2.Items.Contains(item) Then mais que tu déclare Item en Integer, il ne trouvera aucune correspondance dans ListBox2, car celle-ci ne contient que des String.

Fais aussi attention lorsque tu ajoute des classes. Le test comparera alors l'instance de la classe, et non son contenu. (2 instances d'une même classes et affichant le même texte dans la ListBox ne seront donc pas reconnu comme étant les mêmes)
3
lillith212 Messages postés 1229 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 16 juin 2009
15 mai 2008 à 05:41
Salut,

Idée possible : tu stockes tes valeurs dans 2 recordsets dynamiques, ensuite tu fais une moulinette pour comparer et tu stocke ton résultat la où tu as besoin. genre

Tant que pas rs1.eof 
   tant que pas rs2.eof   
      si rs1.valeur = rs2.valeur alors
         boleen = true
         variable = rs1.valeur
         exit tantque
      sinon
         boleen = false
         rs2.movenext
      fin si
   fin tant que
   rs1.movenext
fin tantque

Bonne prog

SLB

---------------------------------------------------------------
Il faut beaucoup donner pour recevoir un tout petit peu...
---------------------------------------------------------------
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 mai 2008 à 07:27
place dans List3 les elements qui sont dans List1 mais pas dans List2
place dans List4 les elements qui sont dans List2 mais pas dans List1


Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Const LB_FINDSTRINGEXACT As Long = &H1A2

Private Sub Form_Load()
Dim i As Long
For i = 0 To List1.ListCount - 1
If SendMessage(List2.hwnd, LB_FINDSTRINGEXACT, -1, ByVal List1.List(i)) = -1 Then
List3.AddItem List1.List(i)
End If
Next i

For i = 0 To List2.ListCount - 1
If SendMessage(List1.hwnd, LB_FINDSTRINGEXACT, -1, ByVal List2.List(i)) = -1 Then
List4.AddItem List2.List(i)
End If
Next i
End Sub
0
cs_Fripouil Messages postés 175 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 8 mai 2017
15 mai 2008 à 10:56
Merci à vous,

mais dans ton code Rendfield, j' ai une expression attendue sur ByVal et je ne trouve pas comment m' en débarrasser.

Je suis sous vb2008 c' est peut être pour ça ?

Fripouil
0

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

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 mai 2008 à 11:10
ca viens bien de ça...
j'ai pas vérifié que tu jouais en .Net....
0
cs_Fripouil Messages postés 175 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 8 mai 2017
15 mai 2008 à 12:03
Aurais tu une parade à ce niveau là ? 

Fripouil
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 mai 2008 à 12:05
je crois que l'on peut tester Items.Contains ....
0
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
15 mai 2008 à 16:49
Salut

For each item as TypeDeLitem in ListBox1.Items
    If Not ListBox2.Items.Contains(item) Then
       ' Item n'existe pas dans ListBox2
    End If
Next

For each item as TypeDeLitem in ListBox2.Items

    If Not ListBox1.Items.Contains(item) Then

       ' Item n'existe pas dans ListBox1

    End If

Next
0
cs_Fripouil Messages postés 175 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 8 mai 2017
16 mai 2008 à 01:04
Merci à tous encore mais

J' ai vraiment rien qui fonctionne.
J' ai beau mettre les codes dans tous les sens rien n' y fait.

A chaque fois, j' ai tout le contenu de la listbox qui est soit disant manquant.

Si j' ai dans ma listbox1 :

100
101
102
103

et dans listbox2 :

100
102

j' ai bien 101 et 103 qui est manquant !!!

Et bien non, il me dit 100,101,102,103 sont manquants dans listbox2

C est a se taper la tête contre les murs

Fripouil
0
cs_Fripouil Messages postés 175 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 8 mai 2017
16 mai 2008 à 01:27
Pour l' instant, j' ai trouvé une parade :

Dim

i
As
Long
Dim j
As
Long

For i = 0
To List_Etiquettes_01.Items.Count - 1

For j = 0
To List_Etiquettes_02.Items.Count - 1

If List_Etiquettes_01.Items.Contains(i) = List_Etiquettes_02.Items.Item(j)
Then
List_Etiquettes_01.Items.Remove(List_Etiquettes_02.Items.Item(j))

End
If
Next j

Next i
J' enléve tous les items identiques entre listbox1 et listbox2 de façon à ne laisser que celle qui n' apparaissent pas dans listbox2.

Je ne sais pas si ce code est trés "propre" mais ça ressemble à ce que je cherche à faire.

Fripouil
0
cs_Fripouil Messages postés 175 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 8 mai 2017
16 mai 2008 à 01:40
Oups je me suis trompé :

Au niveau de IF

c' est
IF blablabla = List_Etiquettes_02.items.contains(j) then

Fripouil
0
Rejoignez-nous