Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Comparer liste

lienad

XLDnaute Occasionnel
Bonjour,
Je souhaiterais "comparer" 2 listes et identifier les éléments différents.
Vous trouverez un exemple joint
Cdt
 

Pièces jointes

  • Comparer.xls
    15.5 KB · Affichages: 30

lienad

XLDnaute Occasionnel
Bonsoir,

Je suis désolé d'insister. J'ai copié la formule sur la plage précisée, sans aucun résultat.
Quoi qu'il en soit la formule ne permettra pas de générer une liste de valeur.
Dans l'attente et merci de votre compréhension
 

job75

XLDnaute Barbatruc
Re,

Formule plus simple :
Code:
=NON(SOMME(SI($A$4:$A$7=$H4;$B$4:$F$7)))*$I4
C'est une formule matricielle mais qui ne nécessite pas de validation particulière s'agissant d'une MFC.

Fichier joint.

A+
 

Pièces jointes

  • Comparer(1).xls
    61.5 KB · Affichages: 20

job75

XLDnaute Barbatruc
Bonjour lienad, JHA, le forum,
Quoi qu'il en soit la formule ne permettra pas de générer une liste de valeur.
Voyez ce fichier (2) avec cette formule matricielle en K4 :
Code:
=INDEX(H$1:H$8;PETITE.VALEUR(SI($I$4:$I$8*ESTERREUR(1/SOUS.TOTAL(3;DECALER($B$4:$F$4;EQUIV($H$4:$H$8;$A$4:$A$7;0)-1;)));LIGNE($H$4:$H$8));LIGNES(K$4:K4)))
A valider par Ctrl+Maj+Entrée et propager sur K4:L8.

Les valeurs d'erreur sont masquées (police blanche + MFC).

Bonne journée.
 

Pièces jointes

  • Comparer(2).xls
    64 KB · Affichages: 20

job75

XLDnaute Barbatruc
Re,

Notez qu'on peut utiliser le VBA, voyez le fichier joint et cette fonction (matricielle) :
Code:
Function Compare(plage1 As Range, plage2 As Range)
Dim t, d As Object, i&, ncol%, j%, a, b
t = plage1
Set d = CreateObject("Scripting.Dictionary")
For i = 2 To UBound(t)
    If t(i, 2) <> "" Then d(t(i, 1)) = t(i, 2)
Next i
t = plage2
ncol = UBound(t, 2)
For i = 2 To UBound(t)
    If d.exists(t(i, 1)) Then
        For j = 2 To ncol
            If t(i, j) <> "" Then d.Remove t(i, 1): Exit For
        Next j
    End If
Next i
ReDim t(plage1.Rows.Count - 1, 1) 'base 0
If d.Count Then
    a = d.keys: b = d.items
    For i = 0 To UBound(a): t(i, 0) = a(i): t(i, 1) = b(i): Next i 'transposition
End If
For i = d.Count To UBound(t): t(i, 0) = "": t(i, 1) = "": Next i
Compare = t 'matrice
End Function
Mais notez que le recalcul de la feuille prend 3,2 millisecondes chez moi.

Contre 0,2 milliseconde avec le fichier (2) du post précédent, 16 fois plus rapide.

A+
 

Pièces jointes

  • Comparer par VBA(1).xls
    73 KB · Affichages: 17

Discussions similaires

Réponses
2
Affichages
98
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…