Totalisation valeur SubItems suivant Items Identiques dans une ListView

  • Initiateur de la discussion Initiateur de la discussion YANN-56
  • 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 !

YANN-56

XLDnaute Barbatruc
Bonsoir à ceux qui passeront par là,

Je patine grave dans ce que je cherche à faire!
Il y a certainement des "Step + ou - " qui se perdent!!!.. Et Vlan pends ça dans la tronche! 🙁

Mais je ne sais pas faire...

Tant pis pour le "puéril" de ce que j'ai tenté de faire avec mon Bouton1 de l'USF,
mais je l'ai laissé pour mieux montrer là où je voulais en arriver dans le Classeur joint.

Mon clavier va exploser; et c'est par respect pour lui que je fais appel à vous.
(C'est sa petite souris qui me l'a suggéré 🙂)

Ils se joignent à moi pour vous en remercier par avance.

Yann
 

Pièces jointes

Re : Totalisation valeur SubItems suivant Items Identiques dans une ListView

Bonsoir,
Code:
Private Sub CommandButton1_Click()
Dim d As Object, Ta, Tb() As Variant, x As Long, i As Long, j As Long
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To ListView1.ListItems.Count
    v = ListView1.ListItems(i).Text
    If Not d.exists(v) Then d.Add v, v
Next i
x = 1
Ta = d.items
For i = 0 To UBound(Ta)
    For j = 1 To ListView1.ListItems.Count
        If ListView1.ListItems(j) = Ta(i) Then
            ReDim Preserve Tb(1 To 2, 1 To x)
            Tb(1, x) = ListView1.ListItems(j)
            Tb(2, x) = CDbl(Tb(2, x)) + CDbl(ListView1.ListItems(j).SubItems(1))
        End If
    Next
    x = x + 1
Next
Range(Cells(5, 7), Cells(UBound(Tb, 2) + 4, 8)) = Application.Transpose(Tb)

End Sub
Je ne vois pas trop l'intérêt de passer par la listview mais bon...
Pense tu que de mettre tes lignes de code sur une seule ligne contribue à en améliorer la clarté ? d'autant qu'il semble que ça en ralentit l'execution et non l'inverse.
A+
kjin
 
Re : Totalisation valeur SubItems suivant Items Identiques dans une ListView

Bonsoir Kjin,

Merci d'avoir regardé, et de m'avoir répondu.

Je dois avouer qu'il y a là plein d'ordres VBA dépassant ma compétence.
"Set d = CreateObject("Scripting.Dictionary")" et "ReDim Preserve". 😕

Quant aux "UBound" et "Transpose", bien qu'étant totalement fermé aux fonctions d'Excel
dont je ne sais pas me servir, je vais certainement pouvoir adapter à ce que je sais faire.

Je ne vois pas trop l'intérêt de passer par la listview mais bon...
Pense tu que de mettre tes lignes de code sur une seule ligne contribue à en améliorer la clarté ?
d'autant qu'il semble que ça en ralentit l'execution et non l'inverse.

La listView est issue d'une appli que j'ai en construction et dont l'utilité est,
à ce que je pense indubitable par la gestion d'un grand nombre de données
récupérées dans les Subitems.
Ici je passe par une feuille pour l'exemple, mais en réalité ce sont des éléments
préalablement enregistrés dans les propriétés de fichiers créés...

J'utilise beaucoup les ":" pour réduire mon nombre de lignes dans mes codes.
cela me permet de réduire ce qui n'est qu'accessoire dans leur construction.
Il me reste ainsi plus de place sur mon écran pour ajouter des lignes vierges ou des:
'=========================
Mais si tu me dis que cela risque de ralentir l'exécution,
je vais avoir du mal à tester, mais je vais y réfléchir.

Ne doutant pas que ta solution soit la bonne, comme d'habitude 🙂,
je vais m'y atteler.

Encore Merci à toi.

Yann
 
Re : Totalisation valeur SubItems suivant Items Identiques dans une ListView

Bonjour à ceux qui passeront par ici,
et particulièrement à Kjin, au cas où il me lise.

Je reste persuadé qu'il y a plus à la portée d'un modeste utilisateur de VBA que je suis!

Je fais donc un P'tit "UP".

Ceci n'enlevant rien à la pertinence de l'aide de Kjin.

Amicalement

Yann
 
Re : Totalisation valeur SubItems suivant Items Identiques dans une ListView

Re

Finalement avec mes vieux ustensiles, j'ai cuisiné une autre sauce:

Code:
Private Sub CommandButton1_Click()
LIGNE_FEUILLE = 5

 For i = 1 To Me.ListView1.ListItems.Count
 On Error Resume Next ' (Pour ne pas d'aller au-delà du nombre d'Items avec le "+1")
 
 CHIFFRE_JOUR = CHIFFRE_JOUR + CDbl(Me.ListView1.ListItems(i).ListSubItems(1).Text)
 
    If Me.ListView1.ListItems(i).Text <> Me.ListView1.ListItems(i + 1).Text Then

      ActiveSheet.Cells(LIGNE_FEUILLE, 7).Value = Me.ListView1.ListItems(i).Text
      ActiveSheet.Cells(LIGNE_FEUILLE, 8).Value = CHIFFRE_JOUR
      CHIFFRE_JOUR = 0
      LIGNE_FEUILLE = LIGNE_FEUILLE + 1
   
    End If
 
 Next i

End Sub

C'est sans doute niveau "Classe élémentaire",
mais cela va bien dans ce que je cherchais à faire.
(Tout en restant attentif à plus simple!!!)

Je joins le Classeur modifié, au cas où il puisse servir à quelqu'un

Amicalement

Yann
 

Pièces jointes

Dernière édition:
- 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

Retour