Affichage nombre de triplets

Bonjour,

J'ai une matrice de 50 colonnes et 2'000 lignes. Chaque ligne contient 5 nombres de 1 à 50 répartis dans les colonnes idoines, le 1 dans la colonne 1, le 10 dans colonne 10, etc…

Mon souhait est de pouvoir déterminer le nombre de tous les triplets (1, 2, 3… à 48, 49, 50) se trouvant dans cette matrice. Ce qui doit faire 20'000 combinaisons possibles de triplets.

Est-ce envisageable?...D'afficher ça dans un fichier?

Merci

Cordiaux messages

Jean-Pierre

Bonjour,

pas un petit fichier exemple à se mettre sous la dent ? (avec explication claire et résultat souhaité...)

P.

Bonjour,

Pour 50 nombres, cela fait 19600 combinaisons de 3 nombres...

Mais pour 5 nombres par ligne, cela fait 10 combinaisons à recenser par ligne, soit en effet 20000 pour 2000 lignes...

Tu ne fournis pas de modèle et tu n'indiques pas comment les classer : par ordre de combinaisons (1 2 3, 1 2 4, 1 2 5...) ou par nombre d'occurrences trouvé pour chacune ?

Cordialement.

Tiens ! j'avais oublié de valider ! Il y a deux heures que ce message attend !

Bonjour et merci pour vos réponses.

J'ai joint à ce message un fichier représentatif de mon souci. Ce n'est qu'un extrait, l'original contient plus de 60 colonnes.

Comme vous le constaterez, sur une ligne peuvent figurer plusieurs fois le même nombre.

J'ai essayé avec Sommeprod et des imbrications de Si et de ET...mais sans succès!

Le classement pourrait être du plus grand nombre de triplets au plus petit. Par exemple (1,2,3) 123...le triplet 1,2 3 est apparu 123 fois.

Peu importe la manière de l'écrire. Malgré mes faibles compétences, je devrais être en mesure d'adapter la solution le cas échéant.

Bien à vous et au plaisir de vous lire

Jean-Pierre

20triplets.xlsx (39.47 Ko)

Bonjour,

La réaction n'a pas été très rapide !

Je te rappelle la base de ta question initiale :

J'ai une matrice de 50 colonnes et 2'000 lignes. Chaque ligne contient 5 nombres de 1 à 50 répartis dans les colonnes idoines, le 1 dans la colonne 1, le 10 dans colonne 10, etc…

Tu sembles l'avoir quelque peu oubliée ! Et tu reviens avec une autre question, et en ajoutant que ton fichier réel comporte des éléments en plus...

Ce sont pas là de bonnes conditions pour travailler...

J'avais établi en attendant une procédure correspondant à ta question initiale, qu'il me restait à revoir pour affiner le tri...

Je la livre volontiers au cas où... mais je m'en tiendrai là pour ma part et laisse à d'autres le soin d'envisager ta nouvelle question.

Sub Triplets()
    Dim d As Object, T(), q(1 To 5), lgn, k, n%, i%, u%, v%, w%
    Set d = CreateObject("Scripting.Dictionary")
    Application.ScreenUpdating = False
    With Worksheets(1)
        n = .Cells.SpecialCells(xlCellTypeLastCell).Row
        For i = 1 To n
            lgn = .Cells(i, 1).Resize(, 50).Value
            For v = 1 To 5
                q(v) = WorksheetFunction.Large(lgn, 6 - v)
            Next v
            For u = 1 To 3
                For v = u + 1 To 4
                    For w = v + 1 To 5
                        k = q(u) & "|" & q(v) & "|" & q(w)
                        If d.exists(k) Then
                            d(k) = CInt(d(k)) + 1
                        Else
                            d(k) = 1
                        End If
                    Next w
                Next v
            Next u
        Next i
    End With
    ReDim T(d.Count, 3): n = 0
    For Each k In d.keys
        n = n + 1: T(n, 0) = k: T(n, 3) = CInt(d(k))
    Next k
    For u = 1 To n - 1
        For v = u + 1 To n
            If T(v, 3) > T(u, 3) Then
                For w = 0 To 3 Step 3
                    T(0, w) = T(v, w): T(v, w) = T(u, w): T(u, w) = T(0, w)
                Next w
            End If
        Next v
    Next u
    T(0, 0) = "Triplets": T(0, 3) = "Nb"
    For i = 1 To n
        k = Split(T(i, 0), "|")
        For v = 0 To 2
            T(i, v) = CInt(k(v))
        Next v
    Next i
    With Worksheets(2)
        .Range("A1").CurrentRegion.Clear
        With .Range("A1").Resize(n + 1, 4)
            .Value = T
            .HorizontalAlignment = xlCenter
            .Columns.ColumnWidth = 6
            With .Borders
                .LineStyle = xlContinuous: Weight = xlThin
            End With
            With .Rows(1).Font
                .Bold = True: .Italic = True
            End With
        End With
        .Range("A1:C1").Merge
        .Activate
    End With
End Sub

Cordialement.

Merci pour la réponse. Désolé du retard, j'étais sous terre...sans possibilité de contacts avec l'extérieur...sécurité oblige.

Bon week-end!

Rechercher des sujets similaires à "affichage nombre triplets"