Problème avec 2 listview

Résolu
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012 - 19 janv. 2010 à 18:27
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012 - 21 janv. 2010 à 22:38
Bonsoir à vous,


J'ai un problème à résoudre avec 2 listview .


J'ai un listview1 avec des références dans la première colonne (ListView1.ListItems.Add) et dans la deuxième colonne ( ListView1.ListItems.Add(, , sel).SubItems(1)) du même listview j'ai des quantités (des chiffres de 0 à 10.)

J'ai également un deuxieme listview nommé listview2 avec les mêmes références que le listwiew1 dans la colonne1(ListView2.ListItems.Add) et dans la deuxième colonne ( ListView2.ListItems.Add(, , sel).SubItems(1)) j'ai des quantités (des chiffres de 0 à 10.)


Comment puisse-je faire pour afficher la quantité de la référence du listview 2 vers la troisième colonne de la listview1 de la même référence ?

Par contre si les références du listview2 n'existe pas dans le listview1 le mettre dans un listbox.


J'espère que je suis clair ?

Merci de votre aide.

3 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
19 janv. 2010 à 19:48
Salut
Méthode propre pour insérer des Items et des SubItems dans une ListView :
La première colonne est l'Item principal.
Les colonnes suivantes sont des SubItems. Ils sont indexés et appartiennent à l'Item.
On définit (soit par config, soit par code comme ici) le nombre de SubItems en définissant les Columns, la première étant l'Item, les suivantes, les SubItems.

Exemple d'utilisation propre :
    ' Définition des colonnes :
    With maListView1
        .ColumnHeaders.Clear
        .ColumnHeaders.Add 1, , "Item"
        .ColumnHeaders.Add 2, , "Sub 1"
        .ColumnHeaders.Add 3, , "Sub 2"
        .ColumnHeaders.Add 4, , "Sub 3"
    End With
    Dim monItem As ListItem
    ' Insertion d'un Item
    Set monItem = maListView1.ListItems.Add(, , "Item 1")
    ' Remplissage des SubItems
    monItem.SubItems(1) = "Item 1, SubItem 1"
    monItem.SubItems(2) = "Item 1, SubItem 2"
    monItem.SubItems(3) = "Item 1, SubItem 3"
    ' Item suivant
    Set monItem = maListView1.ListItems.Add(, , "Item 2")
    monItem.SubItems(1) = "Item 2, SubItem 1"
    monItem.SubItems(2) = "Item 2, SubItem 2"
    monItem.SubItems(3) = "Item 2, SubItem 3"
    ' Etc


Donc, pour énumérer les SubItems d'un Item, il faut d'abord pointer vers l'Item
    ' Exemple pour lister tous les SubItems 1 de notre LV
    Dim r As Long
    For r = 1 To maListView1.ListItems.Count
        Debug.Print maListView1.ListItems(r).SubItems(1)
    Next r


Dans ton cas, il te faudra :
- Lister chaque Item de ta LV2 = Boucle For-Next
- Pour chaque Item, rechercher dans la LV1 si l'Item existe = Une nouvelle boucle à faire, à l'intérieur de la première
- Quand tu l'auras trouvé, recopier le SubItem(1) de l'Item de LV2 vers le SubItem(2) de l'Item de LV1

Dim bTrouvé As Boolean
For
   bTrouvé = False
   For
      If ItemDeLV2 = ItemDeLV1 Then
         SubItem(2) de ItemDeLV1 = SubItem(1) de ItemDeLV2
         bTrouvé = True
         ' On suppose qu'il n'y a qu'un Item concerné par référence
         Exit For  ' on sort de la dernière boucle
      End If
   Next
   If Not bTrouvé Then
      ' Pas trouvé l'ItemDeLV2 dans la LV1
   End If
Next

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012
20 janv. 2010 à 22:48
Bonsoir Jack,

Merci pour ta réponse.

Voilà j'ai essayé de compléter ton code mais cela ne fonctionne pas comme je veux.

Peux-tu me dire si je suis dans la bonne voie.

Dim bTrouvé As Boolean
Dim n As Long
Dim r As Long

For r = 1 To ListView1.ListItems.Count
bTrouvé = False
For n = 1 To ListView2.ListItems.Count
If ListView2.ListItems.Add(n) = ListView1.ListItems.Add(r) Then
ListView2.ListItems.Add(n).SubItems(1) = ListView1.ListItems.Add(r).SubItems(2)
bTrouvé = True
' On suppose qu'il n'y a qu'un Item concerné par référence
Exit For ' on sort de la dernière boucle
End If
Next
If Not bTrouvé Then
ListView2.ListItems = List4
End If
Next


Merci d'avance.
0
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012
21 janv. 2010 à 22:38
Bonsoir Jack,

Désolé cela vient encore de moi, cela fonctionne très bien après la correction de mes erreurs.

Dim bTrouvé As Boolean
Dim n As Long
Dim r As Long

For r = 1 To ListView1.ListItems.Count
bTrouvé = False
For n = 1 To ListView2.ListItems.Count
If ListView2.ListItems(n) = ListView1.ListItems(r) Then
ListView1.ListItems(r).SubItems(2) = ListView2.ListItems(n).SubItems(1)
bTrouvé = True
' On suppose qu'il n'y a qu'un Item concerné par référence
Exit For ' on sort de la dernière boucle
End If
Next
If Not bTrouvé Then 'List4.List (n)
List4.AddItem ListView1.ListItems(r)

End If
Next



Un grand merci à toi.
0
Rejoignez-nous