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 FunctionTu 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 FunctionTu 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