Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
 
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:
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
 
Notre forum d’entraide est 100 % gratuit et le restera.
Aucune formation payante, aucun fichier à acheter, rien à vendre. Mais comme tout site, nous devons couvrir nos frais pour continuer à vous accompagner.
Soutenez-nous en souscrivant à un compte membre : c’est rapide, vous choisissez simplement votre niveau de soutien et le tour est joué.

Je soutiens la communauté et j’accède à mon compte membre

Discussions similaires

Réponses
5
Affichages
470
Réponses
64
Affichages
358
Réponses
69
Affichages
5 K
Réponses
12
Affichages
726
Réponses
7
Affichages
1 K
  • Question Question
Microsoft 365 Frame sur Userform
Réponses
34
Affichages
2 K
Retour