ListView et DataBodyRange

Bonjour,

Quelqu'un a-t-il un exemple de remplissage d'un Listview sur la base d'un Tableau Structuré :

Pour l'instant je passe par un Array intermédiaire entre DataBodyRange pour remplir les ListItemsAdd et ListSubItemsAdd,

mais cela me semble un peu "lourd"... (parce que je suis obligé par "Value").

Mon code actuel :

Private Sub InitDataLVw() 'contenu de la lvStock
Dim Tbl, L&, C%
   Tbl = TDatS.DataBodyRange.Value
   With lvStock
     .ListItems.Clear
     For L = 1 To UBound(Tbl, 1)
       .ListItems.Add , , Format(Tbl(L, 1), "P\0000")
       For C = 2 To UBound(Tbl, 2)
         If C = 4 Then
            .ListItems(.ListItems.Count).ListSubItems.Add , , Format(Tbl(L, C), "F\0000")
         Else
             .ListItems(.ListItems.Count).ListSubItems.Add , , Tbl(L, C)
         End If
       Next
     Next
   End With
End Sub

Je soupçonne qu'on doit pouvoir passer directement par DataBodyRange et ".Text" mais je coince un peu...

Merci

Bonjour cher expert Galopin, as-tu un petit fichier ?

On doit pouvoir passer par TDatS.ListColumns(C).DataBodyRange.Value, à tester !

Bonjour,

sans doute un code de ce genre :

Private Sub InitDataLVw() 'contenu de la lvStock
    Dim L&, C%
    Dim ligne As ListItem

    With lvStock
        .View = lvwReport

        .ColumnHeaders.Clear
        For C = 1 To TDats.ListColumns.Count
            .ColumnHeaders.Add , , TDats.ListColumns(C), .Width / TDats.ListColumns.Count
        Next C

        .ListItems.Clear
        For L = 1 To TDats.ListRows.Count
            Set ligne = .ListItems.Add(, , Format(TDats.ListColumns(1).DataBodyRange.Rows(L).Value, "P\0000"))
            For C = 2 To TDats.ListColumns.Count
                If C = 4 Then
                    ligne.ListSubItems.Add , , Format(TDats.ListColumns(C).DataBodyRange.Rows(L).Value, "F\0000")
                Else
                    ligne.ListSubItems.Add , , TDats.ListColumns(C).DataBodyRange.Rows(L).Value
                End If
            Next C
        Next L
    End With

End Sub

... as-tu un petit fichier ?

Euh... J'ai un un fichier KOLOSSAL !

Je ne pense pas que ça apportera grand chose que je le mette... et faire une maquette... bof, bof...

Pour l'instant je suis sur un prototype un peu à la FRANQUIN, mais je verrai si vraiment je suis dans l'impasse et si j'arrive à finaliser l'ensemble.

thev :

En gros la question c'était de ne pas passer par ".Value" mais par ".Text" pour éviter tous les Format(...) inhérents à un Array

Pour l'instant j'en suis là et ça semble tenir la route :

Private Sub InitDataLVw() 'contenu de la lvStock
    Dim L&, C%
    Dim ligne As ListItem
    With lvStock
        .ListItems.Clear
        For L = 1 To TDatS.ListRows.Count
            Set ligne = .ListItems.Add(, , TDatS.ListColumns(1).DataBodyRange.Rows(L).Text)
            For C = 2 To TDatS.ListColumns.Count
                If C = 4 Then
                    ligne.ListSubItems.Add , , TDatS.ListColumns(C).DataBodyRange.Rows(L).Text
                Else
                    ligne.ListSubItems.Add , , TDatS.ListColumns(C).DataBodyRange.Rows(L).Text
                End If
            Next C
        Next L
    End With
End Sub

Mais j'aurai bien voulu décortiquer un truc "pro" histoire de me coucher un peu moins bête...

Merci.

A+

Bonjour,

attention quand même que si un utilisateur réduit trop la colonne, avec .Text tu récupèreras des ####.

Peut-être ajouter un .AutoFit si tu n'es pas le seul utilisateur.

eric

Ok merci.

Bonsoir,

Pour ma culture personnelle, quelle est la différence entre .Value et .Texte ? Valeur contenue dans la cellule ou valeur affichée ?

Merci et bonne soirée

.value est la valeur réelle, celle que tu vois dans la barre d'édition (sauf exceptions comme les dates, les booléens).

.Text dépend du format choisi et de la largeur des colonnes, c'est ce que tu lis dans la cellule.

Par exemple .Value 1.1754874 a pour .Text 1.20 (pour format 2 décimales), ou bien pourrait être 1.1755 selon la taille de la police et la largeur de la colonne (même en format standard).

eric

Merci eriiic pour ta science et les explications, c'est très instructif !

Rechercher des sujets similaires à "listview databodyrange"