Compare ligne deux par deux

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Hoareau

XLDnaute Occasionnel
Bonjour

Je cherche à comparer des lignes de chiffres deux par deux

Ex pour 4 lignes, il peut y en avoir plus:

Ligne 1 et 2 : communs
Ligne 1 et 3 : communs
Ligne 1 et 4 : communs
Ligne 2 et 3 : communs
Ligne 2 et 4 : communs
Ligne 3 et 4 : communs

Merci
 

Pièces jointes

Re : Compare ligne deux par deux

Bonsoir Hoareau,

Un essai dans le fichier joint.

En N6 une formule normale à copier vers la droite jusqu'à obtenir des cellules vides:
Code:
=SI(COLONNES($N:N)>LIGNES($A$6:$A$9);"";COLONNES($N:N))

En M7 une formule normale à copier vers le bas jusqu'à obtenir des cellules vides:
Code:
=SI(LIGNES($7:7)>LIGNES($A$6:$A$9);"";LIGNES($7:7))

En N7 une formule matricielle à copier vers la droite et le bas jusqu'à obtenir des cellules vides:
Code:
=SI(OU($M7="";N$6="";$M7>N$6);"";SOMME(NB.SI(DECALER($A$6:$K$6;$M7-1;0);DECALER($A$6:$K$6;N$6-1;0))))

Formule matricielle: Elle doit être validée par la combinaison des touches Ctrl+Maj+Entrée au lieu de la seule touche Entrée comme une formule classique.
Si la validation matricielle est correcte, alors Excel entoure la formule d'accolades {=.......}.
Chaque fois que cette formule sera modifiée, la validation devra se faire par Ctrl+Maj+Entrée. Les accolades apparaissent à la validation et ne doivent pas être saisies au clavier.
 

Pièces jointes

Re : Compare ligne deux par deux

Bonjour Hoareau,

Voir un essai dans le fichier joint.
Une procédure vba avec 2 paramètres : Compar(Source As Range, Ici As Range)
  • où Source est la zone des lignes à comparer
  • où Ici est la cellule destination (peut être sur une autre feuille que la source).

Le code dans module1:
VB:
Sub test()
   Compar Sheets("Feuil1").Range("A6:K9"), Sheets("Feuil1").Range("A24")
End Sub

Sub Compar(Source As Range, Ici As Range)
Dim S, T(), ni, ci, i, j, k, m, n, p, q, nl
S = Source.Value: ni = UBound(S, 1): ci = UBound(S, 2)
ReDim T(1 To ((ni - 1) * ni / 2), 1 To ci)
For i = 1 To ni
  For j = i + 1 To ni
    nl = nl + 1
    n = 0
    For k = 1 To ci
      For m = 1 To ci
        If S(i, k) <> "" And S(i, k) = S(j, m) Then
          For p = 1 To n
            If S(i, k) = T(nl, p) Then Exit For
          Next p
          If p > n Then
            n = n + 1
            T(nl, n) = S(i, k)
          End If
        End If
      Next m
    Next k
  Next j
Next i

k = 0
For i = 1 To ni
  For j = i + 1 To ni
    Ici.Offset(k) = "Ligne " & i & " et " & j & " : communs"
    k = k + 1
  Next j
Next i
Ici.Offset(, 2).Resize(UBound(T), UBound(T, 2)).Value = T
End Sub
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
13
Affichages
358
Réponses
19
Affichages
756
Réponses
5
Affichages
165
  • Question Question
Microsoft 365 problème d'index
Réponses
19
Affichages
496
R
  • Question Question
Réponses
3
Affichages
103
regis6460
R
  • Question Question
Réponses
13
Affichages
430
Réponses
23
Affichages
665
Réponses
15
Affichages
522
Retour