COMPARAISON 2 BDD par VBA

Bonjour à tous,

Je maitrise un peu excel et j'utilise des macros simples de temps en temps, mais là, ce que je voudrais faire dépasse mes compétences.....

Je voudrais faire une comparaison de 2 bases de données PAR MACRO sur deux feuilles excel d'un même fichier (voir fichier exemple joint) selon le scénario suivant :

  • un onglet comportant une base de données extraite d'un logiciel A
  • un onglet comportant une base de données (réputée identique.... MAIS .... risque d'anomalies) extraite d'un logiciel B

La clé de comparaison est le matricule (col A dans les 2 onglets)

Ce que souhaiterais comme résultat :

  • un 3ème onglet créé par la macro qui extrait les matricules figurant dans une seule des 2 bases
  • un 4ème onglet ressortant les lignes de même matricule des deux bases qui ne sont pas strictement identiques et idéalement en couleur les datas différentes
74test-vba.xlsm (11.03 Ko)

Est-ce possible ?

MERCI+++++++++ pour toute l'aide que vous pourrez m'apporter

bonjour,

une proposition

met en rouge les cellules de la ligne qui se trouve dans base 1 et pas dans base 2

met en rouge le texte des items de base 1 qui ne se retrouvent pas dans base 2

Sub test()
    Set ws1 = Sheets("base 1")
    Set ws2 = Sheets("Base 2")
    dl1 = ws1.Cells(Rows.Count, 1).End(xlUp).Row
    dc1 = ws1.Cells(2, Columns.Count).End(xlToLeft).Column
    For i = 2 To dl1
        Set re = ws2.Range("a:A").Find(ws1.Cells(i, 1), lookat:=xlWhole)
        If re Is Nothing Then
            Rows(i).Interior.Color = vbRed
        Else
            r = re.Row
            For j = 1 To dc1
                Set re = ws2.Range(r & ":" & r).Find(ws1.Cells(i, j), lookat:=xlWhole)
                If re Is Nothing Then
                    ws1.Cells(i, j).Font.Color = vbRed
                End If
            Next j
        End If
    Next i
End Sub

Bonjour,

pardon d'avoir tardé à répondre, mais on me demandait de finir des urgences......

Mais je viens de regarder votre réponse et cela me semble bien me convenir !!!!!

par contre, si je peux abuser, j'ai une autre question :

je vais donc avoir certaines lignes qui auront des champs en rouge (j'ai modifié et les champs différents seront en FOND ROUGE). Est-il possible d'avoir dans une colonne (L par exemple) une formule qui identifiera ces lignes, je pourrai ainsi les extraire par un filtre ?

MERCI+++ de votre réponse !!!

Cricriii

Bonjour,

à tester

Sub test()
    Set ws1 = Sheets("base 1")
    Set ws2 = Sheets("Base 2")
    dl1 = ws1.Cells(Rows.Count, 1).End(xlUp).Row
    dc1 = ws1.Cells(2, Columns.Count).End(xlToLeft).Column
    For i = 2 To dl1
        Set re = ws2.Range("a:A").Find(ws1.Cells(i, 1), lookat:=xlWhole)
        If re Is Nothing Then
            ws1.Rows(i).Interior.Color = vbRed
            ws1.cells(i,"L")="Ligne absente"
        Else
            r = re.Row
            For j = 1 To dc1
                Set re = ws2.Range(r & ":" & r).Find(ws1.Cells(i, j), lookat:=xlWhole)
                If re Is Nothing Then
                    ws1.Cells(i, j).Font.Color = vbRed
                    ws1.cells(i,"L")="Item(s) absent(s)"
                End If
            Next j
        End If
    Next i
End Sub

Génial la rapidité !!

par contre, on vient de me donner deux autres fichiers à comparer, et là problème car les bases ne sont pas organisées avec des colonnes dans le même ordre...... donc 2 fichiers pas identiques GGGGGRRRRRRRRRR !!!!

comment faire si les colonnes ne sont pas au même numéro ?????

je pourrais définir les groupes de colonnes ??? par exemple B dans un onglet = D dans un autre ???

merci de votre aide si précieuse

bonjour,

si la colonne A contient l'identifiant, le reste ne devrait pas poser de problème.

Bonsoir,

merci pour tout, cela me va

Rechercher des sujets similaires à "comparaison bdd vba"