Ajout de données dans une ListView

Résolu
Noose123 Messages postés 12 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 18 août 2009 - 10 déc. 2008 à 13:34
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 10 déc. 2008 à 16:58
Bonjour,

J'ai un tableau dans une feuille excel, et j'aimerais bien pouvoir afficher le contenu de ce tableau dans une ListView.
Est-ce que quelqu'un peut me dire comment je dois faire  ?

j'ai une boucle FOR qui parcourt le tableau jusqu'à la dernière ligne, et c à la fin de cette boucle que je veux transferer les donnees du classeur vers ma listview

Merci

10 réponses

lillith212 Messages postés 1229 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 16 juin 2009
10 déc. 2008 à 14:25
Ok..
Je suis pas pro en vba mais une idée comme ca en passant, pourquoi ne pas selectionner les données et les remettre dans une feuille d'un classeur excel???
Ca contourne le problème car la j'ai pas d'idée...

S.L.B.
<hr />
3
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 48
10 déc. 2008 à 14:54
salut,



<hr />
'    MODIFIER FACILEMENT LE CONTENU D'UNE CELLULE D'UNE
LISTVIEW
'    http://www.codyx.org/snippet_modifier-facilement-contenu-cellule-listview_543.aspx#1707
'    Posté par [ 401740 PCPT ] le 19/01/2008
<hr />




Function 
SetListViewValue(
ByRef 
oLV 
As 
ListView,
ByVal
lRow
As Long
, lCol
As Long
, vValue
As Variant
)
As Boolean


'   oLV          : la
ListView


'   lRow         : numéro de ligne.
commence 0 = header


'   lCol         : numéro de
colonne. commence à 1

    SetListViewValue = False
    With oLV
        If (lRow >= 0) And (lCol >= 1) Then
            If (lRow <= .ListItems.Count)
And (lCol <=
.ColumnHeaders.Count) Then
                If lRow = 0 Then 'header
                    .ColumnHeaders.Item(lCol).Text = CStr(vValue)
                ElseIf lCol = 1 Then '1ère
colonne
                    .ListItems(lRow).Text
= CStr(vValue)
                Else 'les autres
colonnes
                    .ListItems(lRow).SubItems(lCol - 1) = CStr(vValue)
                End If
                SetListViewValue = True
            End If
        End If
    End With
End Function





'----------------------------------------------------------------



'Remarques :


'fonction inverse ici
:
'http://www.codyx.org/snippet_recuperer-facilement-contenu-cellule-listview_513.aspx











<hr />
'    AJOUTER UNE COLONNE À UNE LISTVIEW À PARTIR D'UNE COLLECTION (ET
ALTERNER LES FORECOLOR)
'    http://www.codyx.org/snippet_ajouter-colonne-listview-partir-collection-alterner-forecolor_318.aspx#1015
'    Posté par [ =401740 PCPT ] le 02/03/2007
<hr />




Private Sub 
AddColumn(LV 
As 
ListView, oCol
As
Collection, Header
As String
, Width
As Long
,
Optional
Color1
As
OLE_COLOR = vbBlack,
Optional
Color2
As
OLE_COLOR =
vbRed)

    Dim Litem As ListItem, i As Integer, j As Integer, lCol As OLE_COLOR
    i = LV.ColumnHeaders.Count
    
    If i = 0 Then
'       caption/name
        LV.ColumnHeaders.Add 1, , Header
        LV.ColumnHeaders(1).Width = Width
        For i = 1 To oCol.Count
            Set Litem = LV.ListItems.Add(, ,
oCol.Item(i))
            lCol = IIf(i And 1, Color1, Color2)
            LV.ListItems(i).ForeColor = lCol
        Next i
    Else
'       value, on ajoute une
colonne et on la remplie
        LV.ColumnHeaders.Add , , Header
        LV.ColumnHeaders(i + 1).Width = Width
        For j = 1 To oCol.Count
            Set Litem = LV.ListItems.Item(j)
            Litem.SubItems(i) = Trim$(oCol.Item(j))
            lCol = IIf(j And 1, Color1, Color2)
            Litem.ListSubItems(i).ForeColor = lCol
        Next j
    End If
End Sub

'   EXEMPLE D'UTILISATION
Private Sub Form_Load()
    Dim c1 As New Collection
    Dim c2 As New Collection
    With ListView1
        .LabelEdit = lvwManual
        .FullRowSelect = True
        .View = lvwReport
        .GridLines = True
    End With
    
    c1.Add "voici": c1.Add "une": c1.Add "première": c1.Add "colonne"
    Call AddColumn(ListView1, c1, "Colonne
1", 800)
    c2.Add "et voici": c2.Add "une": c2.Add "deuxième": c2.Add "colonne"
    Call AddColumn(ListView1, c2, "Colonne
2", 900, &H8000&, &HFF0000)
    Set c2 = Nothing
    Set c1 = Nothing
End Sub







++


Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
3
lillith212 Messages postés 1229 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 16 juin 2009
10 déc. 2008 à 13:39
Bonjour,

A chaque fois que ta boucle parcours ton tableau ajoute le contenu dans ta listbox...

for....
   listbox.additem(contenu de ta cellule)
Next

S.L.B.
<hr />
0
Noose123 Messages postés 12 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 18 août 2009
10 déc. 2008 à 13:53
Le probleme c que j ai pas une listbox mais ListView,
et si je fais     listView.ListItems.Add (Cells(i, 1)), par exemple, ca ne marche pas.

Mon tableau va de A à F, et il y a plus de 40000 lignes... (le fichier est mis à jour automatiquement, et il y a une centaine de lignes qui s ajoute a chaque fois).

Ce que je veux c pouvoir afficher tout ce tableau dans la ListView, j'ai essayé et ca ne marche pas.
0

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

Posez votre question
lillith212 Messages postés 1229 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 16 juin 2009
10 déc. 2008 à 14:01
Re:
en fait tu veux pouvoir voir l'ensemble de tes données soit en icone, list ou détail?
Je comprends pas trop l'interet de ta listview...
sinon as tu essayé la méthode Add pour ajouter un objet columnHeader à la collection columnHeaders???

S.L.B.
<hr />
0
Noose123 Messages postés 12 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 18 août 2009
10 déc. 2008 à 14:17
Ben j'ai ma ListView sur une winform, et quand je presse sur un bouton, les données de la feuille excel qui m'interessent vont etre ajoutees a la listview.
(je sais pas si tu arrive bien a me comprendre)

Si je fais ca, c'est parceque au final l'utilisateur ne pourra accéder qu a la winform, et il faut donc que je ressorte les infos importantes du tableau dans cette listview...
(quand il clique sur le bouton, ca enleve les lignes inutiles et ca copie dans la listview que les "données importantes"), qui seront  réutilisées plus tard.
0
Noose123 Messages postés 12 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 18 août 2009
10 déc. 2008 à 14:39
Ok je pense que je vais opter pour cette solution car je vais gentiment commencer a m arracher les cheveux. lol

Merci quand meme d'avoir essayé de m'aider

Bonne journée
0
lillith212 Messages postés 1229 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 16 juin 2009
10 déc. 2008 à 14:41
Désolée de ne pas avoir su te donner une piste ou une réponse...

S.L.B.
<hr />
0
Noose123 Messages postés 12 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 18 août 2009
10 déc. 2008 à 16:15
Merci Beaucoup PCPT,

J'ai enfin réussi à remplir ma ListView en m'aidant avec ton exemple même si mon code est un peu plus simpliste, ca m'a bcp aidé

je met ci dessous mon code au cas ou :

'Nettoyage de la ListView
lvInfo.ColumnHeaders.Clear
lvInfo.ListItems.Clear
index_lv = 1
        
'Alimentation des en-têtes
lvInfo.ColumnHeaders.Add , , "N° Série", 40, lvwColumnLeft
lvInfo.ColumnHeaders.Add , , "Date / Heure", 90, lvwColumnLeft
lvInfo.ColumnHeaders.Add , , "Etat", 60, lvwColumnLeft
               
'Remplissage de la ListView

Vnumligne = Cells(2, 1).End(xlDown).Row
For i = 2 To Vnumligne
    'si la 4eme cellule = Vide
    If ActiveWorkbook.ActiveSheet.Cells(i, 4).Value <> "Vide" Then
        txtA = ActiveWorkbook.ActiveSheet.Cells(i, 1).Value
        lvInfo.ListItems.Add , , CStr(txtA)
       
        txtB = ActiveWorkbook.ActiveSheet.Cells(i, 2).Value
        lvInfo.ListItems(index_lv).ListSubItems.Add , , CStr(txtB)
       
        txtC = ActiveWorkbook.ActiveSheet.Cells(i, 4).Value
        lvInfo.ListItems(index_lv).ListSubItems.Add , , CStr(txtC)
       
        index_lv = index_lv + 1
    End If
   
Next i
    'Affichage de la listView
    lvInfo.View = lvwReport

Merci encore et bonne fin de journée
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 48
10 déc. 2008 à 16:58
bien :)

n'oublie pas de valider la ou les bonnes réponses
bonne continuation
0