Comparaison de 2 listes

Bonjour,

Je vous écris car j'aurais besoin d'un coup de main sur une problématique Excel.

Tous les mois, je reçois une liste de membres d'un club dont nous voulons suivre le présentéisme par leur numéro d'adhérent.

Je peux extraire de notre logiciel les numéros d'adhérent des membres qui sont venu dans le mois.

Je dois savoir d'un mois à l'autre qui a été ajouté et qui est sortie de la nouvelle liste par rapport à la précédente.

Par exemple en décembre je vais avoir:

1111

2222

3333

4444

5555

et en janvier

2222

3333

5555

6666

7777

8888

J'aimerais que le fichier m'indique "dans une nouvelle page si possible:

Les nouveaux abonnés sont:

6666

7777

8888

Les abonnés disparus sont:

1111

4444

J’espère avoir été assez clair.

Merci

Bonjour,

joindre un classeur .xlsx avec des données dans les deux feuilles de calculs …

Disposition des données de la feuille de calculs pour cette démonstration :

• Ligne n°1 réservée aux titres des colonnes

• Ligne n°2 vide

• A3 : début de la liste de décembre

• C3 : début de la liste de janvier

• E3 : début de la liste des disparus

• G3 : début de la liste des nouveaux

• Colonnes B, D et F vides.

Coller ce code dans le module de la feuille de calculs :

Sub Demo()
    Dim VA(1)

    For N% = 0 To 1
        VA(N) = Application.Transpose(Cells(3, (N * 2) + 1).CurrentRegion.Value)
    Next

    For N = 0 To 1
        ReDim TR(1 To UBound(VA(N)), 0)
            L& = 0
        For R& = 1 To UBound(VA(N))
            If IsError(Application.Match(VA(N)(R), VA(1 - N), 0)) Then
                       L = L + 1
                TR(L, 0) = VA(N)(R)
            End If
        Next

        With Cells(3, (N * 2) + 5)
            .CurrentRegion.Clear
            If L Then .Resize(L).Value = TR
        End With
    Next
End Sub

C'est un one shot code (je n'y reviendrais pas) à adapter si besoin …

Bonjour,

On compare 2 listes et les résultats sont déclinés sur 4 colonnes :

Fusion listes 1 et 2

Communs listes et 1 et 2

Liste 2 - liste 1

Liste 1 - Liste 2

A adapter.

Cdlt.

une solution simple = NB.SI

si le résultat est 0 c'est que le n° n'apparait pas dans l'autre colonne

ensuite un tableau croisé dynamique pour synthétiser dans un autre onglet

https://www.cjoint.com/c/EBvtve8HaHP

Re,

J'aurai dû écrire merci à Jacques Boisgontier de manière plus explicite.

Une pensée à Frédéric Sigonneau. Il a été longtemps une aide précieuse, pour nombreux d'entre nous.

Il m'arrivait encore de consulter ce site.

capture

Sans oublier Laurent Longre entre autres …

Bonjour à tous.

Oui en effet, j'aurais pu (dû) mettre un fichier afin de mieux exprimer mon besoin. Je vous met cela dans ce poste.

Mais les quelque exemples que j'ai eu font très bien l'affaire, je vais m'en inspirer.

Merci beaucoup pour votre aide

22suivi.xlsx (15.94 Ko)

Bonjour,

Voir fichier.

Cdlt.

version sans macro à toutes fins utiles ...

22suivi.xlsx (33.92 Ko)

S'il y a vraiment besoin d'un code, bien que ma précédente démonstration donne déjà immédiatement le résultat escompté

vu le peu de données dans le fichier joint soit en effaçant la ligne 2 soit en modifiant la source des listes dans son code,

la voie encore plus simple et plus rapide est d'utiliser un filtre avancé :

Sub DemoAdvanced1()
    With Feuil2
        .UsedRange.Clear
        Feuil1.[A1:C1].Copy .[A1]
        .[A1].Replace "Venus en", "Disparus de", xlPart
        .[C1].Replace "Venus", "Nouveaux", xlPart
        V = [{"C","","A"}]

        For C% = 1 To 3 Step 2
            .[F2].Formula = "=ISERROR(MATCH(Feuil1!" & Chr(64 + C) & "3,Feuil1!$" & V(C) & _
                            "$2:" & Feuil1.Cells(2, V(C)).End(xlDown).Address & ",0))"

            Range(Feuil1.Cells(2, C), Feuil1.Cells(2, C).End(xlDown)).AdvancedFilter _
                                             xlFilterCopy, .[F1:F2], .Cells(2, C)
        Next

        .[F2].Clear
        .Activate
    End With
End Sub

Seulement deux instructions sont nécessaires pour obtenir le résultat avec un filtre avancé comme dans la boucle :

une pour définir la formule du critère calculé et l'autre pour exécuter le filtre avancé …

Le code n'en est que plus efficace tout en conservant la présentation des listes sources !


Avec la formule du classeur joint de Steelson limitée à la plage effective car c'est bien plus rapide que sur la colonne entière :

Sub DemoAdvanced2()
    With Feuil2
        .UsedRange.Clear
        Feuil1.[A1:C1].Copy .[A1]
        .[A1].Replace "Venus en", "Disparus de", xlPart
        .[C1].Replace "Venus", "Nouveaux", xlPart
        V = [{"C","","A"}]

        For C% = 1 To 3 Step 2
            .[F2].Formula = "=COUNTIF(Feuil1!$" & V(C) & "$3:" & Feuil1.Cells(2, V(C)) _
                            .End(xlDown).Address & ",Feuil1!" & Chr(64 + C) & "3)=0"

            Range(Feuil1.Cells(2, C), Feuil1.Cells(2, C).End(xlDown)).AdvancedFilter _
                                             xlFilterCopy, .[F1:F2], .Cells(2, C)
        Next

        .[F2].Clear
        .Activate
    End With
End Sub

La formule du critère calculé pourrait se passer des références de feuille en la plaçant directement dans la feuille source …

Rechercher des sujets similaires à "comparaison listes"