[RESOLU] Repérer les 5 articles qui ont la plus grande récurrence dans une liste

JacKrauser

XLDnaute Nouveau
Salut à tous !
J'aurai besoin de votre aide concernant la collecte de plusieurs informations concernant une liste.
J'ai en effet en colonne H une liste d'article composée de 3 types différents :
- commençant par "X",
- commentçant par "Y",
- le reste.
En colonne J je dispose de l'année de commande des articles.

J'aimerai créer un top 5 des articles X de 2010 qui sont les plus récurents dans ma liste,
idem pour les 5 qui commencent par Y de 2010, idem dans les restants de 2010.
Et encore les mêmes trois top 5 que précédemment mais pour 2011.

Si possible j'aimerai éviter les macros, sauf si celà s'avère nécessaire !

Merci d'avance pour le temps que vous voudrez bien accorder pour moi !
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Repérer les 5 articles qui ont la plus grande récurrence dans une liste

Bonjour le fil :),
J'ai fini par trouver :p
J'ai des doutes sur une solution par formule :rolleyes:...
Ou alors, c'est du tri manuel, et un peu de bidouille derrière :D...
Vu que le forum était coupé hier, j'ai un peu travaillé dessus (via VBA, parce qu'en formule, je n'y suis pas arrivé :eek:) :
Code:
' MonDico par JB
Function JacKrauser(PlageType As Range, PlageDate As Range, MonType As String, MaDate As String, MaPosition As Byte) As String
Dim MonDico, I As Integer, Désignations, Nombres, J As Byte
If PlageType.Columns.Count > 1 Or PlageDate.Columns.Count > 1 Or PlageType.Count <> PlageDate.Count Then
    JacKrauser = "Erreur!"
    Exit Function
End If
Set MonDico = CreateObject("Scripting.Dictionary")
For I = 1 To PlageType.Count
    If PlageDate(I) = MaDate Then
        Select Case MonType
            Case "X", "Y"
                If Left(PlageType(I), 1) = MonType Then
                    MonDico(PlageType(I).Value) = MonDico(PlageType(I).Value) + 1
                End If
            Case Else
                If Left(PlageType(I), 1) <> "X" And Left(PlageType(I), 1) <> "Y" Then
                    MonDico(PlageType(I).Value) = MonDico(PlageType(I).Value) + 1
                End If
            End Select
    End If
Next I
Désignations = MonDico.Keys
Nombres = MonDico.Items
For J = 1 To MaPosition
    For I = LBound(Désignations) To UBound(Désignations)
        If Nombres(I) = Application.WorksheetFunction.Large(Nombres, 1) Then
            JacKrauser = Désignations(I)
            Nombres(I) = 0
            Exit For
        End If
    Next I
Next J
End Function
Bonne journée :cool:
 

Pièces jointes

  • Top 5.xlsm
    22.1 KB · Affichages: 64

Statistiques des forums

Discussions
312 428
Messages
2 088 346
Membres
103 821
dernier inscrit
Lorient56