XL 2016 ListView

Jujube

XLDnaute Nouveau
Bonjour, j'ai un sub RemplirGrille qui rempli très bien la listview mais si j'ajoute une condition pour avoir seulement les données d'un mois et d'une année en particulier
à ce moment, ma listview est vide et le total en bas de la listview est ok.

Merci beaucoup de l'attention que vous porter à cette demande
 

Pièces jointes

  • Budget.xlsm
    96 KB · Affichages: 11

ChTi160

XLDnaute Barbatruc
Bonjour jujube
Bonjour le Fil ,le Forum
j'ai modifié ainsi(Perfectible) et ça semble fonctionné
VB:
If Month(CDate(f.Cells(Ligne + 1, 2))) = 4 And Year(CDate(f.Cells(Ligne + 1, 2))) = 2019 Then   ' Lorsque j'ajoute une condition mon listview est vide mais le total des items est ok..
            .ListItems.Add , , c
            .ListItems(.ListItems.Count).ListSubItems.Add , , c.Offset(, 1)
            .ListItems(.ListItems.Count).ListSubItems.Add , , c.Offset(, 2)
            .ListItems(.ListItems.Count).ListSubItems.Add , , c.Offset(, 3)
jean marie
 

ChTi160

XLDnaute Barbatruc
Re
une autre approche (Perfectible)
VB:
Sub RemplirGrille()
'Application.ScreenUpdating = False
On Error Resume Next
Dim f As Worksheet
Dim Lr As Long
Dim Ligne As Integer
Dim c As Variant
Dim LstItem As MSComctlLib.ListItem
Dim LstVSitem As MSComctlLib.ListSubItem
Dim Col As Byte
Dim VCol
Set f = ThisWorkbook.Sheets("Factures")
With lstFactures
    .ListItems.Clear
        With .ColumnHeaders
             .Clear
                .Add , , "En-tête 1", 0, 0
                .Add , , "En-tête 2", 65, 1
                .Add , , "En-tête 3", 18, 2
                .Add , , "En-tête 4", 65, 1
                .Add , , "En-tête 5", 140, 0
                .Add , , "En-tête 6", 60, 1
                .Add , , "En-tête 7", 55, 1
                .Add , , "En-tête 8", 65, 1
                .Add , , "En-tête 9", 55, 1
                .Add , , "En-tête 10", 55, 1
                .Add , , "En-tête 11", 55, 1
                .Add , , "En-tête 12", 55, 1
                .Add , , "En-tête 13", 55, 1
                .Add , , "En-tête 14", 75, 1
                .Add , , "En-tête 15", 55, 1
                .Add , , "En-tête 16", 55, 1
                .Add , , "En-tête 17", 55, 1
                .Add , , "En-tête 18", 55, 1
                .Add , , "En-tête 19", 55, 1
                .Add , , "En-tête 20", 55, 1
                .Add , , "En-tête 21", 55, 1
                .Add , , "En-tête 22", 150, 0
                .Add , , "En-tête 23", 0, 1
                .Add , , "En-tête 24", 0, 1
                .Add , , "En-tête 25", 0, 1
                .Add , , "En-tête 26", 0, 1
                .Add , , "En-tête 27", 0, 1
                .Add , , "En-tête 28", 0, 1
                .Add , , "En-tête 29", 0
        End With
  
    .View = lvwReport
    .Gridlines = True
    .FullRowSelect = True  
        Lr = Range("A" & Rows.Count).End(xlUp).Row 
    For Each c In f.Range("A2:A" & Lr)
     If Lr = 1 Then Exit Sub      
      If Month(CDate(f.Cells(Ligne + 1, 2))) = 4 And Year(CDate(f.Cells(Ligne + 1, 2))) = 2019 Then   ' Lorsque j'ajoute une condition mon listview est vide mais le total des items est ok..
         Set LstItem = .ListItems.Add(, , c) 'On ajoute une Ligne
          With LstItem 'a partir de cette Ligne
            For Col = 1 To 28 'pour les Colonnes de 1 à 28
            VCol = IIf(Col > 4 And Col < 21, Format(c.Offset(, Col), "### ##0.00") & " $", c.Offset(, Col))'On récupére la valeur (formatée ou pas selon )
             Set LstVSitem = .ListSubItems.Add(, , VCol) 'On ajoute une Colonne
            Next Col 'Autre Colonne
         End With
        End If
         Ligne = Ligne + 1
    Next c
    .View = lvwReport
    .Gridlines = True
    .FullRowSelect = True
End With
Call Classer
On Error Goto 0
'Application.ScreenUpdating = True
End Sub
Tu pourrais passer par un tableau plutôt que via les Cellules(c.offset())
jean marie
 
Dernière édition:

Jujube

XLDnaute Nouveau
Bonjour ChTi160, cette procédure est bien, mais elle me cause un petit souci.
Elle me sort peut importe le mois ou l'année choisie la première ligne de ma feuille excel?
Merci à l'avance.

For Each c In f.Range("A2:A" & Lr)
If Lr = 1 Then Exit Sub
If Month(CDate(f.Cells(Ligne + 1, 2))) = 4 And Year(CDate(f.Cells(Ligne + 1, 2))) = 2019 Then ' Lorsque j'ajoute une condition mon listview est vide mais le total des items est ok..
Set LstItem = .ListItems.Add(, , c) 'On ajoute une Ligne
With LstItem 'a partir de cette Ligne
For Col = 1 To 28 'pour les Colonnes de 1 à 28
VCol = IIf(Col > 4 And Col < 21, Format(c.Offset(, Col), "### ##0.00") & " $", c.Offset(, Col))'On récupére la valeur (formatée ou pas selon )
Set LstVSitem = .ListSubItems.Add(, , VCol) 'On ajoute une Colonne
Next Col 'Autre Colonne
End With
End If
Ligne = Ligne + 1
Next c
 

Discussions similaires

Réponses
10
Affichages
339
Réponses
69
Affichages
4 K
Réponses
12
Affichages
522
Réponses
7
Affichages
734

Statistiques des forums

Discussions
312 177
Messages
2 085 973
Membres
103 073
dernier inscrit
MSCHOE16