XL 2016 Comparaison de combinaison

Mathmath06

XLDnaute Nouveau
Bonjour à tous,

Je souhaiterai identifier les combinaisons de 4 chiffres (colonne J à M) qui contiennent les combinaisons de 3 chiffres (colonnes B à D) quel que soit l'ordre. J'ai essayé plusieurs formules à recopier vers le bas mais elles comparent chaque combinaison du tableau de gauche à la première du tableau de droite. Ca semble simple mais je n'y arrive pas... (quelque chose m'échappe :eek:). Donc savoir quelles combi ont 3 éléments en commun. Même en MFC je ne trouve pas.

Merci de vos (futures) idées !
Math
 

Pièces jointes

  • comparaison combinaisons.xlsx
    61.5 KB · Affichages: 5

chris

XLDnaute Barbatruc
Bonjour
Une proposition PowerQuery (intégré à Excel)

Les ID des combinaisons correspondant à leur position dans le tableau ; on peut éventuellement adapter pour mettre le numéro de ligne
Clic droit dans le résultat, Actualiser quand l'un des 2 tableaux sources évolue
 

Pièces jointes

  • comparaison combinaisons_PQ.xlsx
    74.8 KB · Affichages: 5

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour,

Avec une fonction personnalisée qui renvoie "ok" si la combinaison contient au moins une des combinaisons à gauche. Voir la formule en N4 (à recopier vers le bas) : =contient(J4:M4;$B$4:$D$244)

Le code de la fonction personnalisée :
VB:
Function Contient(Combi As Range, ListeCombi As Range) As String
Dim tcombi, tliste, i&, j&, k&, n&
   tcombi = Combi.Value: tliste = ListeCombi.Value
   For i = 1 To UBound(tliste)
      n = 0
      For j = 1 To UBound(tcombi, 2)
         For k = 1 To UBound(tliste, 2)
            If tliste(i, k) = tcombi(1, j) Then n = n + 1: Exit For
         Next k
      Next j
      If n = UBound(tliste, 2) Then Contient = "ok": Exit For
   Next i
End Function
 

Pièces jointes

  • Mathmath06- comparer combi- v1.xlsm
    37.2 KB · Affichages: 10

Mathmath06

XLDnaute Nouveau
Bonjour
Une proposition PowerQuery (intégré à Excel)

Les ID des combinaisons correspondant à leur position dans le tableau ; on peut éventuellement adapter pour mettre le numéro de ligne
Clic droit dans le résultat, Actualiser quand l'un des 2 tableaux sources évolue
bonjour Chris,
merci pour ta solution (j'avoue ne pas connaitre PowerQuery 😳). J'ai testé , il y a un petit décalage de 3/4 ligne dans la ligne d'identification du tableau des résultats, surement que tu es parti de la ligne 1 dans ta programmation. Après c'est efficace et aucune combi n'est omise. Ca oblige cependant à aller les identifier sur chaque ligne référencée. Je voulais (dans l'idéal) quelque chose de visuel qui permette une identification rapide. Un grand merci en tous les cas, Chris, pour le coup de main et la réponse rapide !
bonne journée
Math
 

Mathmath06

XLDnaute Nouveau
Bonjour,

Avec une fonction personnalisée qui renvoie "ok" si la combinaison contient au moins une des combinaisons à gauche. Voir la formule en N4 (à recopier vers le bas) : =contient(J4:M4;$B$4:$D$244)

Le code de la fonction personnalisée :
VB:
Function Contient(Combi As Range, ListeCombi As Range) As String
Dim tcombi, tliste, i&, j&, k&, n&
   tcombi = Combi.Value: tliste = ListeCombi.Value
   For i = 1 To UBound(tliste)
      n = 0
      For j = 1 To UBound(tcombi, 2)
         For k = 1 To UBound(tliste, 2)
            If tliste(i, k) = tcombi(1, j) Then n = n + 1: Exit For
         Next k
      Next j
      If n = UBound(tliste, 2) Then Contient = "ok": Exit For
   Next i
End Function
Bonjour Mapomme,

Merci pour ta réponse rapide qui correspond un peu mieux à mes espérances que celle (toute aussi efficace de Chris).
Ca fonctionne très bien. Y a t il une possibilité d'adapter la fonction "contient" pour l'utiliser également sur la colonne de 3 numéros et générer aussi la validation "OK"?
J'ai essayé de la dupliquer sur la colonne E sans grand succès vu que la fonction ne doit pas être adaptée à 3 vers 4 mais uniquement à 4 vers 3.
Le filtre sur les deux colonnes rendrait le tri plus "visuel" et permettrait d'identifier plus rapidement les combis concernées.

Merci !
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous :),

Une version VBA qui met indique pour chaque ligne de chaque tableau les lignes correspondantes dans l'autre tableau. Cliquer sur le bouton Hop !

Les numéros indiqués sont les numéros des lignes de la feuille et non des tableaux.

Le code est dans le module associé à la feuille "test" :
VB:
Sub ListageCorrespondance()
Dim tcombi, tliste, i&, j&, k&, m&, n&, arret As Boolean

   Application.ScreenUpdating = False
   If Me.FilterMode Then Me.ShowAllData
   Me.Rows.Hidden = False

   tcombi = Range("j4:n" & Cells(Rows.Count, "j").End(xlUp).Row)
   tliste = Range("b4:e" & Cells(Rows.Count, "b").End(xlUp).Row)
   For i = 1 To UBound(tcombi): tcombi(i, UBound(tcombi, 2)) = "": Next
   For i = 1 To UBound(tliste): tliste(i, UBound(tliste, 2)) = "": Next
 
   For i = 1 To UBound(tliste)
      For m = 1 To UBound(tcombi)
         n = 0: arret = False
         For j = 1 To UBound(tcombi, 2) - 1
            For k = 1 To UBound(tliste, 2) - 1
               If tliste(i, k) = tcombi(m, j) Then
                  n = n + 1
                  If n = UBound(tliste, 2) - 1 Then arret = True: Exit For
               End If
            Next k
            If arret Then Exit For
         Next j
       
         If arret Then
            tliste(i, UBound(tliste, 2)) = tliste(i, UBound(tliste, 2)) & "; " & m + 3
            tcombi(m, UBound(tcombi, 2)) = tcombi(m, UBound(tcombi, 2)) & "; " & i + 3
         End If
       
      Next m
   Next i
 
   For i = 1 To UBound(tcombi): tcombi(i, UBound(tcombi, 2)) = Mid(tcombi(i, UBound(tcombi, 2)), 3): Next
   For i = 1 To UBound(tliste): tliste(i, UBound(tliste, 2)) = Mid(tliste(i, UBound(tliste, 2)), 3): Next
   Range("j4").Resize(UBound(tcombi), UBound(tcombi, 2)) = tcombi
   Range("b4").Resize(UBound(tliste), UBound(tliste, 2)) = tliste
End Sub
 

Pièces jointes

  • Mathmath06- comparer combi- v2.xlsm
    45.5 KB · Affichages: 12

Discussions similaires

Statistiques des forums

Discussions
313 311
Messages
2 097 039
Membres
106 816
dernier inscrit
Garry972