XL 2013 Compter et classer ordre décroissant éléments dictionary

erics83

XLDnaute Impliqué
Bonjour,

A nouveau inspiré par les excellents tutos de JB, je cherche à compter et classer par ordre décroissant. J'ai pris un classeur test de JB où le but est de créer une liste à partir des éléments d'une colonne séparés par ";", une liste se crée et je cherche à compter le nombre de fois où est "pépé", par exemple et ensuite de classer la liste des sommes par ordre décroissant....

J'ai essayé avec
VB:
 Application.Sum(d1.items)
mais cela ne fonctionne pas....

Merci pour votre aide
 

Pièces jointes

  • TransformeTableauBD2sommedécroissant.xls
    33 KB · Affichages: 9
Dernière édition:

dysorthographie

XLDnaute Accro
Bonsoir,
VB:
Sub test()
Const adChar = 129, adInteger = 3
Dim Rs As Object: Set Rs = CreateObject("ADODB.Recordset")
Rs.Fields.Append "Mots-Clefs", adChar, 50
Rs.Fields.Append "NB", adInteger
Rs.Open
 With Rs
For Each c In Range("b2:b" & [b65000].End(xlUp).Row)
    a = Split(c.Value, ";")
 
    For Each m In a
        .Filter = "[Mots-Clefs]='" & Trim(m) & "'"
        If .EOF Then .AddNew
        ![Mots-Clefs] = Trim(m)
        !NB = !NB + 1
        .Update
        .MoveFirst
        Next m
  
  Next c
  .Filter = "": .MoveFirst: .Sort = "NB desc, [Mots-Clefs] ASC"
End With
[E2].CopyFromRecordset Rs
Rs.Close: Set Rs = Nothing
End Sub
 
Dernière édition:

laurent950

XLDnaute Accro
Bonsoir,

Selon le principe Boisgontier

VB:
Sub transforme()
  Set d1 = CreateObject("scripting.dictionary")
  For Each c In Range("b2:b" & [b65000].End(xlUp).Row)
    a = Split(c.Value, ";")
    For Each m In a: d1(Trim(m)) = d1(Trim(m)) + 1: Next m
  Next c
  [E2].CurrentRegion.Offset(1).ClearContents: [F14].ClearContents
  [E2].Resize(d1.Count) = Application.Transpose(d1.Keys)
  [F2].Resize(d1.Count) = Application.Transpose(d1.Items)
  [E2].CurrentRegion.Offset(, 1).Sort key1:=[F2], Order1:=2, Header:=xlYes
  [F14] = Application.Sum(d1.Items)
End Sub
 
Dernière édition:

dysorthographie

XLDnaute Accro
Ici la clé est Mots_Clefs et NB l'item c'est sur NB qu'on trie de façon décroissante! ce que SortedList et ArrayList ne font pas
Mots-ClefsNB
arbre
10​
cloture
10​
fleurs
10​
herbe
10​
Maman
5​
Mamie
5​
Papa
5​
Pépé
5​
chaise
3​
nape
3​
table
3​
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
Bonjour robert
ben un petit tri bulbule alors comme ça vite fait
VBA/Formule matricielle
demo2.gif


VB:
Sub test()
    x = in_order_TableauBul([A1:B11].Value, 2)
    [D1].Resize(UBound(x), UBound(x, 2)) = x
End Sub


Function in_order_TableauBul(tabl, col, Optional sens = 0)
    Dim i#, e#, x#
    If TypeName(tabl) = "Range" Then tabl = tabl.Value
    ReDim temp(UBound(tabl, 2))
    For i = 1 To UBound(tabl)
        For e = i + 1 To UBound(tabl)
            Select Case sens
            Case 0
                If tabl(e, col) > tabl(i, col) Then
                    For x = 1 To UBound(tabl, 2): temp(x) = tabl(i, x): tabl(i, x) = tabl(e, x): tabl(e, x) = temp(x): Next
                End If
            Case 1
                If tabl(e, col) < tabl(i, col) Then
                    For x = 1 To UBound(tabl, 2): temp(x) = tabl(i, x): tabl(i, x) = tabl(e, x): tabl(e, x) = temp(x): Next
                End If
            End Select
        Next
    Next
    in_order_TableauBul = tabl
End Function


on peu même des l'ors faire une fonction qui reprendrait le tableau avec les doublons du post 1 et faire tout d'un coup

il y a aussi ma fonction quick sort sur tableau 2 Dim (dans les deux sens ) sur colonne X aussi eventuellement pour les grands tableaux
 

Discussions similaires

Statistiques des forums

Discussions
312 166
Messages
2 085 899
Membres
103 025
dernier inscrit
sr86