Ajout de données dans une ListView [Résolu]

Messages postés
12
Date d'inscription
mardi 9 septembre 2008
Statut
Membre
Dernière intervention
18 août 2009
- - Dernière réponse : PCPT
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
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
Afficher la suite 

10 réponses

Meilleure réponse
Messages postés
1231
Date d'inscription
vendredi 16 novembre 2007
Statut
Membre
Dernière intervention
16 juin 2009
1
3
Merci
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 />

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 191 internautes nous ont dit merci ce mois-ci

Commenter la réponse de lillith212
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
29
3
Merci
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 

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 191 internautes nous ont dit merci ce mois-ci

Commenter la réponse de PCPT
Messages postés
1231
Date d'inscription
vendredi 16 novembre 2007
Statut
Membre
Dernière intervention
16 juin 2009
1
0
Merci
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 />
Commenter la réponse de lillith212
Messages postés
12
Date d'inscription
mardi 9 septembre 2008
Statut
Membre
Dernière intervention
18 août 2009
0
Merci
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.
Commenter la réponse de Noose123
Messages postés
1231
Date d'inscription
vendredi 16 novembre 2007
Statut
Membre
Dernière intervention
16 juin 2009
1
0
Merci
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 />
Commenter la réponse de lillith212
Messages postés
12
Date d'inscription
mardi 9 septembre 2008
Statut
Membre
Dernière intervention
18 août 2009
0
Merci
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.
Commenter la réponse de Noose123
Messages postés
12
Date d'inscription
mardi 9 septembre 2008
Statut
Membre
Dernière intervention
18 août 2009
0
Merci
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
Commenter la réponse de Noose123
Messages postés
1231
Date d'inscription
vendredi 16 novembre 2007
Statut
Membre
Dernière intervention
16 juin 2009
1
0
Merci
Désolée de ne pas avoir su te donner une piste ou une réponse...

S.L.B.
<hr />
Commenter la réponse de lillith212
Messages postés
12
Date d'inscription
mardi 9 septembre 2008
Statut
Membre
Dernière intervention
18 août 2009
0
Merci
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
Commenter la réponse de Noose123
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
29
0
Merci
bien :)

n'oublie pas de valider la ou les bonnes réponses
bonne continuation
Commenter la réponse de PCPT