Somme colonne 1 listview

  • Initiateur de la discussion Initiateur de la discussion blord
  • Date de début Date de début

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 !

blord

XLDnaute Impliqué
Bonjour à tous,

J'essaie d'additionner la première colonne de ma listview avec le code suivant après avoir chargé la listview. J'obtient un code incompatibilité de type avec ce code : Comme je ne suis pas très familier avec le contrôle listview, je bloque sur cette erreur.

Code:
Sub LoadListView1()

'Load le listview avec les garanties existantes
    Dim i As Long
    Dim j As Integer, x As Integer
    Dim somme As Double
   
   
   With ListView1
    x = .ListItems.Count + 1
    .ListItems.Clear
    
    With .columnHeaders
        .Clear
        .Add , , "Temps", 50, lvwColumnLeft
        .Add , , "Projet", 200, lvwColumnLeft
        .Add , , "Détail", 200, lvwColumnLeft
        .Add , , "Détail", 1, lvwColumnLeft
    End With
 
    .View = 3
    .FullRowSelect = True
    .Gridlines = True
    .labeledit = 1
 
    For i = 2 To Sheets("DIM").Range("A65536").End(xlUp).Row
    If Left(Sheets("DIM").Cells(i, 1), 8) = 20100715 Then
        .ListItems.Add , , Format(Sheets("DIM").Cells(i, 2), "0.00")
        .ListItems(.ListItems.Count).ListSubItems.Add , , Sheets("DIM").Cells(i, 3)
        .ListItems(.ListItems.Count).ListSubItems.Add , , Sheets("DIM").Cells(i, 4)
        .ListItems(.ListItems.Count).ListSubItems.Add , , Sheets("DIM").Cells(i, 1)
    End If
    Next
    
    
    For j = 1 To .ListItems.Count
        somme = somme + CDbl(.ListItems(j).ListSubItems(.columnHeaders.Count - 1))
    Next j
    TextBoxHeuresDIM.Value = somme
    
    
    
    End With
End Sub

Merci pour vos conseils...

Blord
 
Re : Somme colonne 1 listview

Bonjour,
Tu as plusieurs solutions, additionner les cellules ou les items de la Lvw.
De plus pourquoi ne pas faire l'addition immédiatement plutôt que de faire une boucle supplémentaire et passer par un tableau plutôt que de boucler sur les cellules de la feuille
Code:
For i = 2 To Sheets("DIM").Range("A65536").End(xlUp).Row 'pourquoi pas un tableau
    If Left(Sheets("DIM").Cells(i, 1), 8) = 20100715 Then
        .ListItems.Add , , Format(Sheets("DIM").Cells(i, 2), "0.00")
        x = .ListItems.Count
        somme = somme + Sheets("DIM").Cells(i, 2) 'addition des cellules
        somme = somme + .ListItems(x) 'addition des items
        .ListItems(x).ListSubItems.Add , , Sheets("DIM").Cells(i, 3)
        .ListItems(x).ListSubItems.Add , , Sheets("DIM").Cells(i, 4)
        .ListItems(x).ListSubItems.Add , , Sheets("DIM").Cells(i, 1)
    End If
Next
TextBoxHeuresDIM.Value = somme
A+
kjin
 
Re : Somme colonne 1 listview

Bonjour blord, kjin et à ceux qui passeront par ici

Une astuce pour pouvoir faire les calculs avec les Items ou SubItems d'une listView:

Ajouter "*1" au ".Text"

Exemple:
.ListItems(.ListItems.Count).ListSubItems(2).Text * 1

A noter que si tu analyses des heures,
il te faut travailler en Dates numériques

Amicalement

Yann

RECTIF: Je n'avais pas vu le "CDbl"
 
Dernière édition:
Re : Somme colonne 1 listview

Re

Voici comment j'aurais procédé:

Code:
Sub LoadListView1()
'Load le listview avec les garanties existantes
    Dim i As Long
    Dim j As Integer, x As Integer
    Dim somme As Double
      
   With ListView1
    x = .ListItems.Count + 1
    .ListItems.Clear
    
    With .columnHeaders
        .Clear
        .Add , , "Temps", 50, lvwColumnLeft
        .Add , , "Projet", 50, lvwColumnLeft
        .Add , , "Détail", 50, lvwColumnLeft
        .Add , , "Détail", 100, lvwColumnLeft
        .Add , , "Détail", 50, lvwColumnLeft
    End With
 
    .View = 3: .FullRowSelect = True: .Gridlines = True: .labeledit = 1
 
    For i = 2 To Sheets("DIM").Range("A65536").End(xlUp).Row
    
    If Left(Sheets("DIM").Cells(i, 1), 8) = 20100715 Then
    somme = 0
        .ListItems.Add , , Format(Sheets("DIM").Cells(i, 2), "0.00")
        .ListItems(.ListItems.Count).ListSubItems.Add , , Sheets("DIM").Cells(i, 3)
        .ListItems(.ListItems.Count).ListSubItems.Add , , Sheets("DIM").Cells(i, 4)
        .ListItems(.ListItems.Count).ListSubItems.Add , , Sheets("DIM").Cells(i, 1)
        
               For j = 1 To 2 ' ADDITION DES SUBITEMS
               somme = somme + CDbl(.ListItems(.ListItems.Count).ListSubItems(j))
               Next j
               
     .ListItems(.ListItems.Count).ListSubItems.Add , , somme _
     + CDbl(.ListItems(.ListItems.Count)) ' FACULTATIF
       
     TOTAL_LIGNES = TOTAL_LIGNES + somme + CDbl(.ListItems(.ListItems.Count))
    End If
    
    Next i
        TextBox1.Value = TOTAL_LIGNES
  End With
  
End Sub

Si j'ai bien compris le sujet! Voir le test joint

Amicalement

Yann
 

Pièces jointes

Re : Somme colonne 1 listview

re,

Voici comment j'aurais procédé:

Code:
Sub LoadListView1()
'...
    For i = 2 To Sheets("DIM").Range("A65536").End(xlUp).Row
    
    If Left(Sheets("DIM").Cells(i, 1), 8) = 20100715 Then
    [COLOR="Blue"]somme = 0[/COLOR]
'...
     TOTAL_LIGNES = TOTAL_LIGNES + [COLOR="Blue"]somme[/COLOR] + CDbl(.ListItems(.ListItems.Count))

😕 qq chose m'échappe...

A+
kjin
 
Re : Somme colonne 1 listview

Bonjour Kjin, YANN-56, le Forum,

Merci pour les conseils,

Si j'ai bien compris la ligne : "somme = somme + Sheets("DIM").Cells(i, 2)" fait l'addition des cellules directement dans la feuille "DIM" tandis que la ligne : "somme = somme + .ListItems(x)" additionne les cellules des données chargées dans le listview.

Est-ce qu'il y a un avantage à utiliser l'une ou l'autre des méthodes ?

Merci !

Blord
 
Re : Somme colonne 1 listview

Bonjour Blord, Le fil,

Pourquoi ne pas laisser excel faire ce qu'il sait si bien et vite faire:

Code:
    With Sheets("DIM")
        Somme = Application.Sum(.Range("A2:A" & .Range("A65536").End(xlUp).Row))
    End With

A+
 
Dernière modification par un modérateur:
Re : Somme colonne 1 listview

re, salut Hasco 🙂
Si j'ai bien compris la ligne : "somme = somme + Sheets("DIM").Cells(i, 2)" fait l'addition des cellules directement dans la feuille "DIM" tandis que la ligne : "somme = somme + .ListItems(x)" additionne les cellules des données chargées dans le listview.
Ce qui revient au même !
Tu peux aussi filtrer la plage, utiliser une formule...
Avec un bout de fichier, ce serait mieux
Pourquoi ne pas laisser excel faire ce qu'il sait si bien et vite faire:
Ce n'est pas la somme de la colonne !
A+
kjin
 
Re : Somme colonne 1 listview

Bonjour à tous,

Merci Kjin pour les explications !

Hasco : comme Kjin l'a mentionné, ce n'est pas la somme de toute la colonne mais uniquement les valeurs chargées dans la listview... mais merci quand même pour le petit bout de code, je le garde en réserve pour d'autres besoins...

Blord
 
Re : Somme colonne 1 listview

A Kjin,

Si l'on ne remet pas la somme à zéro, on aura ajouté celle de la ligne précédente. 🙂

A ceux qui en parlent:

Au passage, je ne pige pas pourquoi s'obstiner à vouloir utiliser les formules d'Excel.

Ou alors, l'USF et sa ListView sont juste là pour faire joli! 😕

Amicalement

Yann
 
Re : Somme colonne 1 listview

.....

For j = 1 To .ListItems.Count
somme = somme + CDbl(.ListItems(j).ListSubItems(.columnHeaders.Count - 1))
Next j
TextBoxHeuresDIM.Value = somme



End With
End Sub
[/CODE]

L'Item correspond à la colonne 1
Les subitems aux autres colonne

Pour la somme de la colonne 1, tu ne dois pas passer par subItems


For j = 1 To .ListItems.Count
somme = somme + CDbl(.ListItems(j))
Next j
 
Re : Somme colonne 1 listview

Re Le fil,

Merci Kjin, Blord.

Ceci dit cela peut être Application.SumIF(......,20100715 ,....)

Yann à dit:
Au passage, je ne pige pas pourquoi s'obstiner à vouloir utiliser les formules d'Excel.

Ou alors, l'USF et sa ListView sont juste là pour faire joli

@Yann, au passage, je n'aime pas du tout le ton sur lequel tu dit cela.

@Pour les autres, les fonction; excel sont toujours plus rapides.

A+
 
Dernière modification par un modérateur:
Re : Somme colonne 1 listview

Re à tous,

Hasco, loin de moi l'idée d'être désagréable!
D'autant que j'ai bon souvenir des aides précieuses que tu m'as apportées.
J'ai bien trop de respect pour ta compétence.

Kjin, je ne sais que te répondre.
Je pense qu'en testant le classeur que j'ai joint ci-dessus, tu peux tester sans cette écriture.
Tu constateras alors l'erreur de calcul

Diantre! J'ai maintenant la trouille de m'être mal exprimé. 🙁

Amicalement

Yann
 
Re : Somme colonne 1 listview

Merci Kjin de m'avoir poussé à y regarder de plus près

Doublon inutile avec "somme" et " TOTAL_LIGNES"
(Sans doute un résidu de mes essais)

Pour blord, s'il s'intéresse à ma bidouille:

Voici la rectification:

Code:
Sub LoadListView1()
'Load le listview avec les garanties existantes
    Dim i As Long
    Dim j As Integer, x As Integer
    Dim somme As Double
      
   With ListView1
    x = .ListItems.Count + 1
    .ListItems.Clear
    
    With .columnHeaders:
        .Clear
        .Add , , "Temps", 50, lvwColumnLeft
        .Add , , "Projet", 50, lvwColumnLeft
        .Add , , "Détail", 50, lvwColumnLeft
        .Add , , "Détail", 100, lvwColumnLeft
    End With
 
    .View = 3: .FullRowSelect = True: .Gridlines = True: .labeledit = 1
 
    For i = 2 To Sheets("DIM").Range("A65536").End(xlUp).Row
    
    If Left(Sheets("DIM").Cells(i, 1), 8) = 20100715 Then
        .ListItems.Add , , Format(Sheets("DIM").Cells(i, 2), "0.00")
        .ListItems(.ListItems.Count).ListSubItems.Add , , Sheets("DIM").Cells(i, 3)
        .ListItems(.ListItems.Count).ListSubItems.Add , , Sheets("DIM").Cells(i, 4)
        .ListItems(.ListItems.Count).ListSubItems.Add , , Sheets("DIM").Cells(i, 1)
        
               For j = 1 To 2 ' ADDITION DES SUBITEMS
               somme = somme + CDbl(.ListItems(.ListItems.Count).ListSubItems(j))
               Next j
      
          somme = somme + CDbl(.ListItems(.ListItems.Count))
     
    End If
    
    Next i
        TextBox1.Value = somme
  End With
  
End Sub

Amicalement, et avec nouveau Classeur.

Yann
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
184
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
488
Réponses
3
Affichages
667
Réponses
10
Affichages
799
Réponses
5
Affichages
479
Retour