Comparer deux colonnes et afficher les valeurs manquantes

Bonjour,

Je vous sollicite parce que j'ai besoin d'un petit coup de pouce pour un projet. Je vous ai joint un fichier pour imager ma demande.

Je dispose d'une liste de contacts enregistrée à la date du jour (dans la feuille "New"), et une liste de contacts qui date d'il y a un mois (dans la feuille "Old"). Il arrive parfois qu'on se rende compte que des contacts ont disparu. Donc nous voulons comparer l'ancien fichier et le nouveau, afin de savoir quels contacts auraient été supprimés.

Par exemple, j'ai retiré les contacts test7, test13 et test17 de la feuille new. Je voudrais donc comparer la feuille new et la feuille old, afin que dans la feuille "Compare" ressortent les valeurs "test7", "test13" et "test17".

Avez-vous des idées ?

Cordialement, Arnaud

37testcomparatif.xlsx (11.22 Ko)

Bonjour,

Une formule possible en cellule New!B2 (à étendre vers le bas) :

=SI(A2=Old!A2;"Ok";"Disparu !")

Bonsoir Arnaud D, Pedro22, le forum,

Un essai par macro.....

  • CTRL + e pour exécuter la macro....
Sub test()
 Dim Plage As Range, c As Range
 Dim dlOld As Long, dlNew As Long, dlCompare As Long

 Application.ScreenUpdating = False

  dlOld = Sheets("Old").Range("A" & Rows.Count).End(xlUp).Row
  dlNew = Sheets("New").Range("A" & Rows.Count).End(xlUp).Row

Set Plage = Sheets("Old").Range("A2:A" & dlOld)

dlCompare = 2
      For Each c In Plage
       If WorksheetFunction.CountIf(Sheets("New").Range("A2:A" & dlNew), c.Value) = 0 Then
        With Sheets("Compare")
         .Range("A" & dlCompare).Value = c.Value
           dlCompare = dlCompare + 1
        End With
       End If
      Next c

      Sheets("Compare").Activate

  Application.ScreenUpdating = True
End Sub

Cordialement,

Salut Arnaud,

Salut Pédro, Xorsankukai,

@Pédro : ta formule implique que les listes soient figées, jamais triées, par exemple... Impensable, me semble-t-il...

En 'New' :

  • tu peux double-cliquer sur [A1] pour une comparaison globale ou sur un nom particulier ;
  • 'Compare' ne s'affiche que si il y a des différences entre les listes.

Je m'aperçois que si tu ne fais pas cette vérif' AVANT d'encoder de nouveaux contacts, la macro va forcément remarquer un stûût.

    For x = 2 To IIf(sNom = "FULL", Range("A" & Rows.Count).End(xlUp).Row, 2)
        sItem = IIf(sNom = "FULL", Range("A" & x).Value, sNom)
        If Worksheets("Old").Columns(1).Find(what:=sItem, lookat:=xlWhole, LookIn:=xlValues).Row = "" Then _
            .Range("A" & .Range("A" & Rows.Count).End(xlUp).Row + 1).Value = sItem
    Next

A+

@Pédro : ta formule implique que les listes soient figées, jamais triées, par exemple... Impensable, me semble-t-il...

Salut Arnaud, Xorsankukai, curulis57,

Oui je m'en doute fortement, mais je suis peut-être de mauvaise fois en me tenant strictement aux éléments communiqués !

Merci à tous pour vos réponses ! Vous êtes des malades

@curulis57 par contre quand j'exécute ta macro avec CTRL+E il me sort "Désolé... Nous avons consulté toutes les données en regard de votre sélection, mais nous n'avons pas détecté de modèle permettant de renseigner des valeurs à votre place..."

Je n'ai vraiment aucune notion en macro excel, une idée ?

Pour info, je n'aurai pas nécessairement de tri à effectuer sur mes listes, car une fois exportées sont déjà triées par ordre alphabétiques.

Et autre chose, on vient de me rajouter une précision, est-il possible, en plus de la demande initiale, de faire remonter ceux qui apparaissent dans New et qui n'étaient pas dans Old. Qu'on puisse aussi savoir qui a été rajouté entre temps.

Je ne sais pas comment vous remercier, c'est vraiment fou ce que vous faites pour les gens, vraiment :')

Sinon pour info, je n'aurai pas nécessairement de tri à effectuer sur mes listes, car une fois exportées sont déjà triées par ordre alphabétiques.

Bonjour,

La question n'est pas juste celle du tri, c'est être sûr que dans tous les cas, LIGNE 1 du TABLEAU 1 = LIGNE 1 du TABLEAU 2, et que la suppression d'élément d'un tableau ne remonte pas les lignes suivantes (Si Lig 5 tableau 2 manquante, alors Lig 6 tableau 1 = Lig 5 tableau 2 ?)...

Si la correspondance de ligne est toujours respectée, une simple formule comme celle que j'ai proposée suffit à comparer les tableau, sinon c'est plus complexe (et donc plus adapté pour une solution en macro comme celle de curulis57).

@Pedro22

Ah d'accord, je n'avais pas vu ça de cette manière. Merci pour l'explication.

Alors en effet, la suppression d'un des éléments fera remonter les suivants. Il n'y aura pas de case vide à la suppression du contact.

@Pedro22

Ah d'accord, je n'avais pas vu ça de cette manière. Merci pour l'explication.

Alors en effet, la suppression d'un des éléments fera remonter les suivants. Il n'y aura pas de case vide à la suppression du contact.

Donc Xorsankukai et curulis57 ont eu le nez fin en proposant une solution qui fait abstraction de l'ordre des lignes.

Bonjour à tous,

un essai avec formules

Rechercher des sujets similaires à "comparer deux colonnes afficher valeurs manquantes"