combinaison de chiffre

seydou86

XLDnaute Occasionnel
bonjour a tous

est ce possible , facilement , de savoir si des combinaison sortent plusieurs fois.


dans l'ordre , ou le désordre. peu importe.
 

Pièces jointes

  • plusieur fois.xlsx
    30.8 KB · Affichages: 64
  • plusieur fois.xlsx
    30.8 KB · Affichages: 64

Jocelyn

XLDnaute Barbatruc
Re : combinaison de chiffre

Bonjour le Forum,
Bonjour seydou86, Victor21:), CISCO:),

Victor je n'ai pas compris la même chose que toi.

CISCO je ne trouve pas les même résultat que toi peux tu regarder mon fichier (en colonne A j'ai fais un test VRAI faux par rapport a la combinaison de la ligne 4 et ce test semble me donner le même résultat que ma formule chez moi pour la ligne 4 résultat 9 chez toi résultat 19) et me dire.

Merci d'avance

Cordialement
 

Pièces jointes

  • combinaison-de-chiffre.xlsx
    45.5 KB · Affichages: 62

seydou86

XLDnaute Occasionnel
Re : combinaison de chiffre

Merci a vous trois

Victor21 , je pense que tu n'avait pas compris , je voulais parler des combinaison de 5 chiffres.
en toute logique , le 1-2-3-4-5 doit etre le plus frequent

en recherchant de cette sorte , le fichier de Jocelyn est correct.

comment je doit faire pour l'appliquer a mes fichier ?

Merci
 

Chris401

XLDnaute Accro
Re : combinaison de chiffre

Bonjour

Même résultat que Jocelyn avec la matricielle suivante :

Code:
=SOMME(N(FREQUENCE(SI(NB.SI(DECALER($D$4:$H$793;LIGNE($D$4:$H$793)-LIGNE($D$4:$H$4);;1);D4:H4);LIGNE($D$4:$H$793));LIGNE($D$4:$H$793))=COLONNES(D4:H4)))
Cordialement
Chris
 

CISCO

XLDnaute Barbatruc
Re : combinaison de chiffre

Bonjour

Bonjour le Forum,
Bonjour seydou86, Victor21:), CISCO:),

CISCO je ne trouve pas les même résultat que toi peux tu regarder mon fichier ... et me dire.

Merci d'avance

Cordialement

Ma proposition n'est pas bonne. Cela parce que CHERCHE(1;truc) renvoie un nombre aussi bien pour truc=1 (CHERCHE(1;1) renvoie 1) que pour truc=15 (CHERCHE(1;15) renvoie 1), et aussi pour truc=21 (CHERCHE(1;21) renvoie 2). Dans cet exemple, les 2 derniers cas renvoient une valeur numérique, alors qu'ils ne conviennent pas.
Donc, ce n'était pas une bonne idée de passer par cette fonction.

@ plus
 

CISCO

XLDnaute Barbatruc
Re : combinaison de chiffre

Rebonjour

Pour reprendre l'exemple précédent, en cherchant ";1;" au lieu de 1, dans ";truc;" au lieu de truc, cela fonctionne, mais c'est longuet. La proposition de Chris401 est plus astucieuse.

@ plus
 

Pièces jointes

  • plusieur fois.xlsx
    37.7 KB · Affichages: 48
  • plusieur fois.xlsx
    37.7 KB · Affichages: 45

CISCO

XLDnaute Barbatruc
Re : combinaison de chiffre

Bonsoir

Si tu tiens absolument à faire plus court, tu peux faire avec
Code:
=SOMME(--(FREQUENCE(SI(NB.SI(DECALER($D$1:$H$1;LIGNE($3:$792);;1);D4:H4);LIGNE($4:$793));LIGNE($4:$793))=5))
en matriciel, donc à valider avec les touches Ctrl+maj+entrer.
C'est la méthode proposée par Chris401, en un peu moins polyvalent.

@ plus
 

job75

XLDnaute Barbatruc
Re : combinaison de chiffre

Bonjour à tous,

Cette macro, dans le code dela feuille, permet de créer 2 noms définis :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [T]) Is Nothing Then Exit Sub
Dim tablo, ncol%, a&(), b&(), d As Object, decal&, i&, lig, x$, j%
tablo = [T] 'matrice, plus rapide
ncol = UBound(tablo, 2)
ReDim a(1 To UBound(tablo))
ReDim b(1 To UBound(tablo))
Set d = CreateObject("Scripting.Dictionary")
decal = [T].Row - 1
With Application
  For i = 1 To UBound(tablo)
    lig = .Index(tablo, i, 0)
    x = ""
    For j = 1 To ncol
      x = x & " " & .Small(lig, j) 'PETITE.VALEUR
    Next
    If d.exists(x) Then
      a(i) = i + decal
      If b(d(x)) = 0 Then b(d(x)) = d(x) + decal
    Else: d(x) = i: End If
  Next
End With
ThisWorkbook.Names.Add "PremiereLigneDoublon", b 'nom défini
ThisWorkbook.Names.Add "AutreLigneDoublon", a 'nom défini
End Sub
Elle s'exécute quand on modifie le tableau.

Les 2 noms ainsi définis sont utilisés dans 2 MFC colorant les doublons :

- en rose pour la 1ère ligne doublon d'un groupe de doublons

- en jaune pour les autres lignes.

Nota : à cause des MFC sur D:H ne pas fusionner D2:H2.

Fichier joint.

Bonne soirée.
 

Pièces jointes

  • plusieur fois(1).xlsm
    42.1 KB · Affichages: 41

CISCO

XLDnaute Barbatruc
Re : combinaison de chiffre

Bonsoir à tous, bonsoir Job75

Pour continuer avec des formules, en un peu plus court, toujours en I4 et toujours en matriciel
Code:
SOMME(--(FREQUENCE(SI(ESTNUM(EQUIV(D$4:H$793;D4:H4;0));LIGNE($4:$793));LIGNE($4:$793))=5))

@ plus
 

job75

XLDnaute Barbatruc
Re : combinaison de chiffre

Re,

Chez moi (Win 8 - Excel 2013) la macro de mon post #12 s'exécute en un peu moins de 0,6 seconde.

Si le nombre de lignes est multiplié par 10 (7900), la durée est multipliée par 100 (60 secondes).

A+
 

job75

XLDnaute Barbatruc
Re : combinaison de chiffre

Bonjour le fil, le forum,

Ce fichier (2) est bien meilleur :

- je n'utilise plus Application.Index qui plombait les durées d'exécution

- la macro Quick sort est la plus rapide pour trier

- pour les tableaux a et b il faut impérativement des vecteurs colonnes s'il y a un grand nombre de lignes

- les MFC sont bien plus simples.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim P As Range, nlig&, ncol%, decal&, a%(), b%(), d As Object, i&, lig, x$, j%
Set P = [deb].CurrentRegion
nlig = P.Rows.Count
If Intersect(Target, P.Resize(nlig + 1)) Is Nothing Then Exit Sub
ncol = P.Columns.Count
decal = P.Row - 1
ReDim a(1 To nlig + decal, 1 To 1): ReDim b(1 To nlig + decal, 1 To 1)
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To nlig
  lig = P.Rows(i)
  tri lig, 1, ncol
  x = ""
  For j = 1 To ncol
    x = x & " " & lig(1, j)
  Next
  If d.exists(x) Then
    a(i + decal, 1) = 1
    b(d(x), 1) = 1
  Else: d(x) = i + decal: End If
Next
ThisWorkbook.Names.Add "PremiereLigneDoublon", b 'nom défini
ThisWorkbook.Names.Add "AutreLigneDoublon", a 'nom défini
End Sub

Sub tri(a, gauc, droi)      ' Quick sort
Dim ref, g, d, temp
ref = a(1, (gauc + droi) \ 2)
g = gauc: d = droi
Do
    Do While a(1, g) < ref: g = g + 1: Loop
    Do While ref < a(1, d): d = d - 1: Loop
    If g <= d Then
      temp = a(1, g): a(1, g) = a(1, d): a(1, d) = temp
      g = g + 1: d = d - 1
    End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub
Durée d'exécution sur 790 lignes => 0,05 seconde.

Durée d'exécution sur 7900 lignes => 0,26 seconde.

Durée d'exécution sur 79000 lignes => 3,8 secondes.

Bonne journée.
 

Pièces jointes

  • plusieur fois(2).xlsm
    42.3 KB · Affichages: 39
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 345
Membres
102 868
dernier inscrit
JJV