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

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

J

JacKrauser

Guest
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 modification par un modérateur:
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

- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Retour