Problème avec 2 listview

Résolu
Signaler
Messages postés
131
Date d'inscription
jeudi 21 mai 2009
Statut
Membre
Dernière intervention
18 mars 2012
-
Messages postés
131
Date d'inscription
jeudi 21 mai 2009
Statut
Membre
Dernière intervention
18 mars 2012
-
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

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
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)
Messages postés
131
Date d'inscription
jeudi 21 mai 2009
Statut
Membre
Dernière intervention
18 mars 2012

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.
Messages postés
131
Date d'inscription
jeudi 21 mai 2009
Statut
Membre
Dernière intervention
18 mars 2012

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.