Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

[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:

Victor21

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

Re,

Merci à vous également d'avoir partagé votre solution, comme il est de règle dans un forum d'entr'aide.
 

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
J'ai des doutes sur une solution par formule ...
Ou alors, c'est du tri manuel, et un peu de bidouille derrière ...
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é ) :
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
 

Pièces jointes

  • Top 5.xlsm
    22.1 KB · Affichages: 64
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…