XL 2010 Utiliser Application.Sum d'items d'un dictionnaire

cathodique

XLDnaute Barbatruc
Bonsoir, Bonne Année 2021:),

Cela fait un bon bout de temps que je n'ai pas participé pour des raisons personnelles.
Ce soir, je viens solliciter votre précieuse aide. En essayant de mieux comprendre l'utilisation du dictionnaire sur le site de Boisgontier.
Je suis arrivé au lien ci-dessous:
http://boisgontierjacques.free.fr/pages_site/Dictionnaire.htm#DicoIndice

Juste au dessus de ce lien, il y avait ces lignes:

Utilisation de Sum,Average,Match,Max,Min avec le dictionnaire​


ttal = Application.Sum(d.items) donne la somme des items
Moy = Application.Average(d.items) donne la moyenne
p=Application.Match("toto",d.keys,0) donne la position de toto dans le dictionnaire

Cependant, je n'ai pas trouvé d'exemple d'utilisation de ces bouts de code. Auriez-vous un exemple pour Application.Sum(d.items).

En vous remerciant par avance.

Bonne soirée.
 
Solution
Bonjour @cathodique, @Staple1600,

Si tu tiens au dictionary, teste :
VB:
Sub test()
Dim dd, dc, i As Long, clef, elem
   Set dd = CreateObject("scripting.dictionary")
   Set dc = CreateObject("scripting.dictionary")
   For i = 2 To 15
      clef = Cells(i, 1)
      dd(clef) = dd(clef) + Cells(i, 2)
      dc(clef) = dc(clef) + Cells(i, 3)
   Next i
   Range("f:h").Clear
   Range("a1:c1").Copy Range("f1")
   Range("f2").Resize(dd.Count) = Application.Transpose(dd.keys)
   Range("g2").Resize(dd.Count) = Application.Transpose(dd.items)
   Range("h2").Resize(dd.Count) = Application.Transpose(dc.items)
   Range("g2:h2").Resize(dd.Count).Replace 0, "", lookat:=xlWhole
   Range("a2:c2").Copy...

Staple1600

XLDnaute Barbatruc
Re

=>cathodique
Oui il faut modifier pour que NomFichier corresponde au chemin du répertoire où est les classeur et au nom du classeur
(Le plus simple étant de le faire manuellement)
Si on part de ton exemple (en ne gardant sur la feuille que le tableau en A1:C15)
1) Dans une cellule vide (exemple F1), tu saisis Code
2) puis sur le ruban => Données/Consolider
3) Dans Références, tu sélectionnes ton tableau (à la souris)
4) Tu cliques sur Ajouter
5) Tu coches Ligne du haut et Colonne de gauche et tu cliques sur OK.

Ce qui donne par macro
Enrichi (BBcode):
Sub Consolider()
With Range("F1")
    .Value = "Code"
    .Consolidate _
       Sources:="'C:\Users\STAPLE\Documents\TESTS\[Application.Sum.xlsm]Feuil1'!R1C1:R15C3", _
        Function:=xlSum, _
        TopRow:=True, _
        LeftColumn:=True
    .CurrentRegion.Borders.Weight = 2 'ajout pour mise en formr
    .CurrentRegion.Columns.AutoFit
    .CurrentRegion.HorizontalAlignment = xlCenter
End With
End Sub
NB: Donc changer le contenu de Sources avant de lancer la macro.
 

Staple1600

XLDnaute Barbatruc
Re,

=>cathodique
Je viens juste de voir que mapomme avait édité son message où il évoque la consolidation.
Mais comme j'ai fait ceci dans VBE, je poste.
VB:
Sub TestConsolidation()
Consolider Range("F1"), Range("A1:C15")
End Sub
Private Sub Consolider(dr As Range, r As Range)
Dim strPath$
strPath = "'" & ThisWorkbook.Path & "\[" & ThisWorkbook.Name & "]" & [A1].Parent.Name & "'!" & r.Address(ReferenceStyle:=xlR1C1)
With dr
    .Value = "Code"
    .Consolidate _
        Sources:=strPath, _
        Function:=xlSum, _
        TopRow:=True, _
        LeftColumn:=True
    .CurrentRegion.Borders.Weight = 2 'ajout pour mise en formr
    .CurrentRegion.Columns.AutoFit
    .CurrentRegion.HorizontalAlignment = xlCenter
End With
End Sub
 

cathodique

XLDnaute Barbatruc
Re,

=>cathodique
Je viens juste de voir que mapomme avait édité son message où il évoque la consolidation.
Mais comme j'ai fait ceci dans VBE, je poste.
VB:
Sub TestConsolidation()
Consolider Range("F1"), Range("A1:C15")
End Sub
Private Sub Consolider(dr As Range, r As Range)
Dim strPath$
strPath = "'" & ThisWorkbook.Path & "\[" & ThisWorkbook.Name & "]" & [A1].Parent.Name & "'!" & r.Address(ReferenceStyle:=xlR1C1)
With dr
    .Value = "Code"
    .Consolidate _
        Sources:=strPath, _
        Function:=xlSum, _
        TopRow:=True, _
        LeftColumn:=True
    .CurrentRegion.Borders.Weight = 2 'ajout pour mise en formr
    .CurrentRegion.Columns.AutoFit
    .CurrentRegion.HorizontalAlignment = xlCenter
End With
End Sub
Merci beaucoup à vous deux. Je pense pouvoir m'en sortir pour la suite.
Dans le cas contraire, je reviendrai à la charge 🤣.
Bon après-midi :)
 

Statistiques des forums

Discussions
312 519
Messages
2 089 267
Membres
104 083
dernier inscrit
hecko