Macro comparaison colonne sens unique + Ajout

Y compris Power BI, Power Query et toute autre question en lien avec Excel
K
Kleem
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 25 juin 2018
Version d'Excel : 2016

Message par Kleem » 12 juillet 2018, 14:38

Bonjour à tous,


Je souhaiterais faire une macro de comparaison de données sur 2 colonnes.
Je joins un fichier pour illustrer mes explications.

Je dispose de deux bases PAYSVille, la première base est sur la feuille "1-New extract" et la seconde sur la feuille "2-Data base modifiée".

Sur la première feuille, de nouvelles données sont présentes et je souhaiterais pouvoir les ajouter à ma seconde base. La base 2 est constituée des données "anciennes", "actuelles" et l'idée serait d'ajouter les "nouvelles".
J'ai trouvé sur internet des macros de comparaison de données, cependant ça me liste toutes les données qui ne se retrouvent pas dans les deux bases. Alors que pour mon cas c'est uniquement les données de la base 1 qui ne se retrouvent pas dans la base 2 que je souhaiterait lister (et non l'inverse), tout en conservant les autres données existantes.

Les données à comparer sont dans la colonne A.

Pourriez-vous m'aider ou du moins me donner l'astuce pour coder une fonction de comparaison dans le sens voulu ? Je n'ai aucune idée sur la façon dont je dois procéder...

En esperant que mes explications soient claires ::~ ,

Merci beaucoup pour votre aide !
Exemple2.xlsx
(13.19 Kio) Téléchargé 10 fois
Avatar du membre
Klin89
Membre dévoué
Membre dévoué
Messages : 596
Appréciations reçues : 21
Inscrit le : 28 mai 2011
Version d'Excel : 2003 FR

Message par Klin89 » 12 juillet 2018, 19:16

Bonjour Kleem, :)

Comme ceci :
Restitution sur une nouvelle feuille
Option Explicit
Sub test()
Dim a, i As Long, dico As Object
    Set dico = CreateObject("Scripting.Dictionary")
    dico.CompareMode = 1
    '2eme feuille dans le classeur
    With Sheets(2).Range("a5").CurrentRegion
        a = .Value
        For i = 1 To UBound(a, 1)
            dico(a(i, 1)) = VBA.Array(a(i, 1), a(i, 2), _
                            a(i, 3), a(i, 4), a(i, 5), a(i, 6), a(i, 7), a(i, 8), a(i, 9))
        Next
    End With
    '1ere feuille dans le classeur
    With Sheets(1).Range("a1").CurrentRegion
        a = .Value
        For i = 2 To UBound(a, 1)
            If Not dico.exists(a(i, 1)) Then
                dico(a(i, 1)) = VBA.Array(a(i, 1), a(i, 2), _
                            a(i, 3), a(i, 4), a(i, 5), a(i, 6), a(i, 7), a(i, 8), a(i, 9))
            End If
        Next
    End With
    'feuille de restitution
    '3eme feuille dans le classeur
    With Sheets(3).Range("a1")
        .CurrentRegion.Clear
        .Resize(dico.Count, 9).Value = _
        Application.Transpose(Application.Transpose(dico.items))
    End With
    Set dico = Nothing
End Sub
klin89
Avatar du membre
78chris
Passionné d'Excel
Passionné d'Excel
Messages : 4'724
Appréciations reçues : 359
Inscrit le : 9 juillet 2017
Version d'Excel : 2010 à 2019 + 365

Message par 78chris » 12 juillet 2018, 20:13

Bonjour

A noter que c'est un multipost avec des réponses ailleurs...
Chris
Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
Confucius
K
Kleem
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 25 juin 2018
Version d'Excel : 2016

Message par Kleem » 18 juillet 2018, 14:03

Bonjour Klin 89,

Je te remercie pour ton aide,

Je te souhaite une très bonne journée,

Kleem
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message