Découpage et recherche de répétitions de combinaisons à partir d'une liste

11classeur-test.xlsm (38.52 Ko)

Bonjour à tous,

J'ai un petit souci au niveau du code. J'ai une ligne de numéros, appelée origine dans gestion de nom sous (l'onglet formules) qui contient 36 numéros (ligne B2-AK2). À partir de cette ligne de numéros, j'essai de trouver des combinaisons de 10 numéros ou moins dans le tableau de 31 combinaisons de 20 numéros (B4-U31). Mon code ne tient compte que des 22 premiers numéros et ignore les numéros suivants en X2-AK2. Ce qui me donne moins de combinaisons et fausse les données dans la grille de droite. Je n'arrive pas à corriger le problème. Merci de votre aide.

Bonjour,

Remplacez

                match_array = Rw2.Value

par

                match_array = Rw1.Value

Cdlt

Bonjour Arturo,

Effectivement cela me donne les 36 numéros de ma ligne B2 mais ne les découpe plus en combinaison de 10 numéros dans ma grille de droite.

J'ai ajouté le nombre possible de combinaisons dans la colonne A, dans le fichier ci-joint, pour une meilleure compréhension sur ce que je recherche à effectuer. Je devrais avoir au moins 19 combinaisons de 10 numéros ou plus dans mon tableau de droite au lieu de seulement 4 avec mon algorithme actuel. Je n'arrive pas à modifier mon code pour qu'il utilise les 36 numéros de ma ligne B2 et qu'il les traduise en 19 combinaisons dans le tableau de droite avec les numéros correspondant.

13classeur-test.xlsm (39.83 Ko)

Bonjour,

Pas le courage de déchiffrer votre code, je préfère le reprendre en entier, si ça vous convient:

Sub Repet()
    Dim i As Long, j As Long, Col_Dest As Long
    Application.ScreenUpdating = False
    Range("AN2:AZZ31").ClearContents
    For i = 4 To 31 'de la ligne 4 à 31
        If Cells(i, "A") >= Range("Y12").Value Then
            Col_Dest = 53 ' première colonne de destination: BA
            For j = 2 To 21 'de la colonne B à la colonne U
                On Error Resume Next
                If Not IsError(Application.Match(Cells(i, j), Range("A2:AK2"), 0)) Then
                    Cells(i, Col_Dest) = Cells(i, j)
                    Col_Dest = Col_Dest + 1
                End If
            Next j
        End If
    Next i
End Sub

Cdlt

Oui, c'est tout à fait cela. Code beaucoup plus simple.

Merci

Si vous préférez l'utilisation d'un tableau à 2 dimensions

Sub Repet2()
    Dim i As Long, j As Long, Col_Dest As Long
    Application.ScreenUpdating = False
    Range("AN2:AZZ31").ClearContents
    Col_Dest = 53 ' première colonne de destination: BA
    For i = 4 To 31 'de la ligne 4 à 31
        Tablo = Range(Cells(i, "B"), Cells(i, "U"))
        n = 0
        If Cells(i, "A") >= Range("Y12").Value Then
            For j = 2 To 21 'de la colonne B à la colonne U
                On Error Resume Next
                If Not IsError(Application.Match(Cells(i, j), Range("A2:AK2"), 0)) Then
                    Tablo(i, j) = Cells(i, j)
                    n = n + 1
                End If
            Next j
            Range(Cells(i, Col_Dest), Cells(i, Col_Dest + n - 1)).Value = Tablo
        End If
    Next i
End Sub

Les deux me conviennent parfaitement. Merci

Peut-on respecter l'ordre des numéros de la ligne B2 malgré l'ordre croissant des numéros dans le tableau? Autrement dit, si le 9 est avant le 3 sur la ligne B2, il demeure avant le 3 dans le tableau de droite et ainsi de suite. Pas dans un autre descendant mais qui respect l'ordre de la ligne b2. J'ai essayé de modifier le code en ce sens mais sans succès. Merci

Bonjour,

il suffit d'appliquer une petite inversion, comme ceci:

Sub Repet()
    Dim i As Long, j As Long, Col_Dest As Long
    Application.ScreenUpdating = False
    Range("AN2:AZZ31").ClearContents
    For i = 4 To 31 'de la ligne 4 à 31
        If Cells(i, "A") >= Range("Y12").Value Then
            Col_Dest = 53 ' première colonne de destination: BA
            For j = 2 To 37 'de la colonne B à la colonne AK
                On Error Resume Next
                If Not IsError(Application.Match(Cells(2, j), Range(Cells(i, "B"), Cells(i, "U")), 0)) Then
                    Cells(i, Col_Dest) = Cells(2, j)
                    Col_Dest = Col_Dest + 1
                End If
            Next j
        End If
    Next i
End Sub

Cdlt

Oui, tout à fait cela. Merci.

Rechercher des sujets similaires à "decoupage recherche repetitions combinaisons partir liste"