Combinaison de nombre

Bonjour,

Sur mon tableur j'ai besoin de déterminer les séries de nombres qui se répètent dans une même colonne. Le problème est que avec 30 série de chiffre environs dans chaque cellule (de 0 a 99)je ne veux pas juste voir les les doublons (e peux le faire avec Ctrl+F), s'il y en a dedans qui sont different je ne sais pas comment trouver les nombres se répétant le plus possible. Je voudrais repérer les cellules ou meme serie de nombre sur la meme colonne Exp

  • 10-20-41-53-54-12-85-45-99-97-12.. etc.......
  • 10-20-41-53-54-12-85-60-99-1-12....
  • 10-20-41-53-54-12-85-45-2-12....

Donc serait t'il possible d'isoler par exemple les nombres 10-20-41-53-54-12 par une formule, qui sont les seul a se répéter a l'intérieur de la cellule sur une même colonne et mélangés a beaucoup d'autre nombre comme les numero 97-1-2 qui eux ne m'intéresse pas a chercher ?

Pour info tous les numéros sont dans 1 cellule, forcement avec le nombre elles débordent sur cellule, mais s'il le faut je peux les mettre dans 1 cellule séparé, mais il en faudrait alors vraiment beaucoup sur la même ligne ?

Bonjour,

Je ne suis pas sûr d'avoir tout compris !

Tu veux trouver le nombre qui apparaît le plus dans une série de nombres se trouvant dans une même cellule ?

Ici, avec une fonction perso à utiliser en matricielle (elle retourne un tableau à deux éléments) après avoir sélectionné deux cellules sur la même ligne :

Function MaxDoublon(Cel As Range) As Long()

    Dim Dico As Object
    Dim Cle As Variant
    Dim T As Variant
    Dim I As Long
    Dim Max(1 To 2) As Long

    Set Dico = CreateObject("Scripting.Dictionary")

    T = Split(Cel, "-")

    For I = 0 To UBound(T): Dico(T(I)) = Dico(T(I)) + 1: Next I

    For Each Cle In Dico.Keys

        If Dico(Cle) > Max(2) Then Max(1) = Cle: Max(2) = Dico(Cle)

    Next Cle

    MaxDoublon = Max

End Function

Tu sélectionnes deux cellules, mettons B1 et C1 puis dans la barre de formule, tu colles la formule suivante :

=MaxDoublon(A1)

où A1 contient la série. Tu auras comme résultat en B1 le nombre le plus présent et en C1 le nombre de fois que ce nombre (ou chiffre bien sûr) apparaît dans la série

Bonjour à tous,

moi j'ai compris que tu voulais tous ceux présents dans toutes les cellules.

A mettre dans un module standard.

Syntaxe :

=doublons(A2:A4)
Function doublons(pl As Range) As String
    Dim c As Range
    Dim dictLig, dictTout, datas, tmp, lig As Long, i As Long, k
    Set dictLig = CreateObject("Scripting.Dictionary")
    Set dictTout = CreateObject("Scripting.Dictionary")
    datas = pl.Value
    For lig = 1 To UBound(datas)
        tmp = Split(datas(lig, 1), "-")
        For i = 0 To UBound(tmp)
            If tmp(i) <> "" Then
                dictLig(tmp(i)) = tmp(i)
            End If
        Next i
        For Each k In dictLig.keys
            If dictTout.exists(k) Then dictTout(k) = dictTout(k) + 1 Else dictTout(k) = 1
        Next k
    Next lig
    For Each k In dictTout.keys
        If dictTout(k) = pl.Count Then doublons = doublons & "-" & k
    Next k
    doublons = Mid(doublons, 2)
    Set dictLig = Nothing
    Set dictTout = Nothing
End Function

Tu avais un doublon (12) dans chaque cellule.

Ca oblige un traitement particulier pour le compter qu'une fois. Si c'était une erreur on peut simplifier un peu.

eric

Bonjour Eric,

Bon, c'est un peu ce que je me doutais, je n'ai pas bien saisie la demande

Bonjour,

Merci a vous, je suis un novice en Excel je c'est faire copier coller, mettre des formule = A..:A...)etc

le basic en somme, alors les infos ci dessous par exemple, cest un peu du chinois pour l'instant:

Pourriez m'expliquer plus en detail ce que je dois faire avec ces infos.

Function doublons(pl As Range) As String

Dim c As Range

Dim dictLig, dictTout, datas, tmp, lig As Long, i As Long, k

Set dictLig = CreateObject("Scripting.Dictionary")

Set dictTout = CreateObject("Scripting.Dictionary")

datas = pl.Value

For lig = 1 To UBound(datas)

tmp = Split(datas(lig, 1), "-")

For i = 0 To UBound(tmp)

If tmp(i) <> "" Then

dictLig(tmp(i)) = tmp(i)

End If

Next i

For Each k In dictLig.keys

If dictTout.exists(k) Then dictTout(k) = dictTout(k) + 1 Else dictTout(k) = 1

Next k

Next lig

For Each k In dictTout.keys

If dictTout(k) = pl.Count Then doublons = doublons & "-" & k

Next k

doublons = Mid(doublons, 2)

Set dictLig = Nothing

Set dictTout = Nothing

End Function

En reponse a THEZE

Tu veux trouver le nombre qui apparaît le plus dans une série de nombres se trouvant dans une même cellule ? Oui, j'ai mis tous les numéros a partir de C4 (les numéros étant nombreux je l'ai ai separer par un signe - comme 45-98-45-95 dans la même cellule, du coup elle débordent sur D4,E4,F4,G4, je pars sur l'idée d'une colonne car ils sont tous dans C4,C5,C6,C7,C8 etc)

Pour la formule =MaxDoublon(A1) je penses comprendre quelle est la différence avec=doublons(A2:A4) ?

Pour Eriic,

La comprendre tres bien la formule

=doublons(A2:A4) mais la longue serie d'infos ca j'ai besoin de precision ?

Alt-F11 pour ouvrir VBE, l'éditeur de VBA (Visual Basic pour Application).

Clic-droit sur le projet de ton classeur à gauche, puis : 'Insertion / Module'

Il apparait à droite, y coller tout le texte de la macro.

La fonction personnalisée sera disponible dans tes feuilles.

eric

bonjour

je crois qu'il faut utiliser MODE dans une matrice vituelle issue de l'extraction des differentes valeurs

ou alors avec Frequence (matrice extraite, ligne(1:99) qui va renvoyer un nb pour chaque pour chaque val

il suffira avec Grande . valeur de recuperer les 10 premières

le plus dur est de concocter la matrice des valeurs

Rechercher des sujets similaires à "combinaison nombre"