Determiner nombre récurrents

Bonjour,

j'ai un tableau avec plusieurs cellules comportant un chiffre. Ce chiffre représente un produit.

Quelqu'un saurait-il comment déterminer les 5 chiffres (produits) les plus récurrents?

merci pour vos conseils

15ref-prod.xlsx (8.05 Ko)

Bonjour,

Un chiffre est un caractère permettant entre autres d'écrire des nombres.

Un nombre est une valeur numérique représentée par un symbole composé de chiffres.

Bonjour MFerrand,

pourrais-tu être plus explicite je ne comprends pas.

Et par quel moyen je pourrais déterminer mes 5 valeurs les plus récurrentes?

Mon propos était de t'inciter à éviter la confusion chiffres / nombres...

Pour ce qui est de ton problème, je ne vois pas de solution en une seule formule... mais tu auras intérêt à attendre que tous les intervenants formuleux de haut niveau aient pris connaissance de ton problème et se soient lancés dans l'élaboration de solution.

Pour contribuer au débat je te livre quelques pistes :

- Je calculerais d'abord dans une cellule le nombre de valeurs différentes du tableau :

=SOMMEPROD(1/NB.SI($A$1:$E$9;$A$1:$E$9))

Formule classique de ce calcul (elle pourra te resservir), elle donne 30 dans ton cas.

- Ensuite, je listerais ces valeurs différentes dans un colonne, formule de ce type (à placer en ligne 2 en laissant la cellule ligne 1 de la colonne vide) :

=SI(LIGNE()-1<=$J$1;MIN(SI($A$1:$E$9>G1;$A$1:$E$9));"")

Cette formule est matricielle (validée par Ctrl+Maj+Entrée).

Elle liste les valeurs dans l'ordre croissant (à cause du MIN en excluant les valeurs inférieures ou égales à la précédente).

La mise sous condition que ligne -1 (parce qu'on commence ligne 2) soit inférieur ou égal au nombre total de valeurs qu'on a calculé ailleurs, vise à ce que plus rien ne soit affiché lorsque toutes les valeurs ont été listées (ça afficherait 0).

Ayant les valeurs dans une seule colonne, on pourra plus facilement trouver une formule pour répondre à ta question...

Pour ma part, je me suis lancée dans l'étude de cette liste, en calculant en regard le nombre d'apparitions dans le tableau (NB.SI...) et à partir de là le RANG de chaque valeur...

Donc lorsque tu demandes les 5 valeurs les plus récurrentes, cela voudrait donc dire que si on les classe par nombre d'occurrences décroissant dans le tableau, tu voudrais les 5 premières...

Or en définissant le rang, on constate qu'il y en à 2 de rang 1 (ex-aequo) et ensuite on passe donc au rang 3 où l'on dénombre 11 valeurs à ce rang !

Il faut donc savoir si tu veux au plus les 5 premières valeurs, dans ce cas l'on ne peut t'en fournir que 2, ou si tu veux les valeurs des rangs 1 à 5, auquel cas on doit t'en fournir 13...

Si j'ai le temps, je travaillerai sur une fonction personnalisée pour fournir le résultat par une seule formule, mais je vais suivre la discussion formules...

Cordialement.

Bonjour

@de barros

@MFerrand

et le Forum

J'ai voulu contribuer à la resolution de cette question avec deux formules matricielles (Ctrl + Maj + Entrée) et avec la Fonction Personnalisée (dans mon Archive, je sais pas le nom de l'auteur (c'était en anglais))

Voir le fichier en joint.

1ere formule en H2 ( les series de données A1:E9)

=SIERREUR(MODE(SI(($A$1:$E$9<>"")*(NB.SI(H$1:H1;$A$1:$E$9)=0);$A$1:$E$9));"")

si on n'utilisait pas la fontion SIERREUR la formule donnerait les valeurs de l'erreur #NA pour les series de données ayant aucune repetition.

Pour que l'on puisse obtenir tous les valeurs uniques meme s'il n y a aucune repetition , avec l'elargissement de la premiere formule

en rajoutant la fonction de MIN

2eme formule en I2

=SIERREUR(MODE(SI(($A$1:$E$9<>"")*(NB.SI(I$1:I1;$A$1:$E$9)=0);$A$1:$E$9));MIN(SI(($A$1:$E$9<>"")*(NB.SI(I$1:I1;$A$1:$E$9)=0);$A$1:$E$9)))

et la fonctionne personnalisée :

Function ModeT(Plage As Range, NbRept As Long)
    Dim cell As Range
    Dim d As Object
    Dim WF As WorksheetFunction
    Dim compte As Long
    Dim X As Long
    Dim Y As Long
    Dim DataA As Variant
    Dim DataB As Variant

    Application.Volatile True

    Set d = CreateObject("Scripting.Dictionary")
    Set WF = WorksheetFunction

    ReDim List(1 To 2, 1 To 1)

    For Each cell In Plage
        If cell.Value <> "" Then
            If cell.Height <> 0 Then
                If Not d.Exists(cell.Value) Then
                    compte = compte + 1
                    d.Add cell.Value, 1
                    ReDim Preserve List(1 To 2, 1 To compte)
                    List(1, compte) = cell.Value
                    List(2, compte) = WF.CountIf(Plage, cell.Value)
                End If
            End If
        End If
    Next

    For X = LBound(List, 2) To UBound(List, 2)
        For Y = X + 1 To UBound(List, 2)
            If List(2, X) < List(2, Y) Then
                DataA = List(1, Y)
                DataB = List(2, Y)
                List(1, Y) = List(1, X)
                List(2, Y) = List(2, X)
                List(1, X) = DataA
                List(2, X) = DataB
            End If
        Next
    Next

    ModeT = List(1, NbRept)
End Function

en utilisant de cette fonction en K2

=ModeT($A$1:$E$9;LIGNES($1:1))

Cordialement

8mode-sa.xlsm (21.80 Ko)

Rapide, simple et complet !

J'avais un vieux souvenir d'un sujet approchant mais un peu différent où les essais d'utilisation de MODE n'avaient pas fourni le résultat escompté... J'avais tort de vouloir prendre une autre orientation. C'est bien la solution la plus directe et logique.

Bonne journée Sakman !

MFerrand a écrit :

Rapide, simple et complet !

J'avais un vieux souvenir d'un sujet approchant mais un peu différent où les essais d'utilisation de MODE n'avaient pas fourni le résultat escompté... J'avais tort de vouloir prendre une autre orientation. C'est bien la solution la plus directe et logique.

Bonne journée Sakman !

Bonjour,

Merci MFerrand.

à toi aussi Bravo. J'ai simplement evolué ta formule proposée, avec l'utilisation de fonction de MODE.

Bonne journée

Je n'ai pas été au bout de la méthode initiée (comme elle passait par un relais...) pour m'orienter vers une fonction personnalisée...

Mais même plus besoin non plus, celle que tu as fournie est parfaite ! Mon souci reste de classer ces références (avec pas mal d'autres d'ailleurs) pour pouvoir les retrouver facilement...

Bonne journée.

Rechercher des sujets similaires à "determiner nombre recurrents"