VBA: comparaison sur deux fichiers différents

Bonjour.

Je vous sollicite sur la création d'une macro permettant de trouver s'il y a eu des ajouts entre deux fichiers différents.

Je m'explique.

Regardez les classeurs FichierA et FichierB.

Le fichier A est une base de données contenant plusieurs lignes, et l'élément qui différencie chaque ligne se trouve dans la colonne G, le "RemInstr desc.".

C'est à dire que pour chaque ligne de la base, on a un "Reminstr desc." différent.

Il en est de même dans le FichierB.

Le fichier A est une extraction du jour J. Le fichier B est une extraction du jour J+1.

Le but de la macro, c'est de savoir si il y a eu de nouvelles lignes dans le fichier B (donc des nouveaux "RemInstr desc") qui ne sont pas dans le fichier A.

C'est que je veux c'est quand on lance, la macro doit demander l'ouverture du fichier A puis du fichier B et qu'ensuite dans le classeur "Comparaison" (où il y a la macro) , on ait une liste de toutes les nouvelles lignes avec les coordoonées dans la feuille.

De plus, on a besoin seulement des données dont la valeur de la colonne N="Zone 2".

Voici ce que j'ai commencé à faire, mais j'ai du mal pour la comparaison:

Sub OuvertureFichier()
    Dim fichierA As Variant
    Dim fichierB As Variant
    Dim wbkA As String
    Dim wbkB As String
    Dim LaPlageA As String
    Dim LaPlageB As String

    'on ouvre le premier fichier

    fichierA = Application.GetOpenFilename("Fichier XLSX (*.xlsx),*xlsx")

    If fichier = False Then Exit Sub
    Workbooks.Open Filename:=fichier

    wbkA = ActiveWorkbook.Name

    Sheets("Feuille1").Select
    LaPlageA = Range("A2:BP" & Range("A" & Rows.Count).End(xlUp).Row).Address(ReferenceStyle:=xlR1C1, _
                                                                  RowAbsolute:=True, _
                                                                  ColumnAbsolute:=True)

    fichierB = Application.GetOpenFilename("Fichier XLS *.xls), *xls")

    If fichier = False Then Exit Sub
    Workbooks.Open Filename:=fichier

    wbkB = ActiveWorkbook.Name

    Sheets("Feuille2").Select
    LaPlageB = Range("A2:BP" & Range("A" & Rows.Count).End(xlUp).Row).Address(ReferenceStyle:=xlR1C1, _
                                                                  RowAbsolute:=True, _
                                                                  ColumnAbsolute:=True)
      'Workbooks(wbkA).Close savechanges:=False
      'Workbooks(wbkB).Close savechanges:=False

        'Set fichierA=nothing
        'Set fichierB=nothing

End Sub

Pouvez-vous m'aider, s'il vous plaît ?

Merci.

201fichiera.xlsx (27.10 Ko)
202fichierb.xlsx (27.30 Ko)
194comparaison.xlsm (14.59 Ko)

Bonsoir

pas grand résultat : Donc à vérifier

La macro marche correctement.

Merci Banzai64.

Dès que j'aurais regardé le code en détail et si je n'ai pas de question, je clôturerais la discussion.

Re-bonjour.

Pourrais-tu m'expliquer la signification des lignes suivantes, car je ne vois pas à quel moment on fait référence

au WbkB.

Set Cel = WbkA.Sheets("Feuille1").Columns("G").Find(what:=.Range("G" & J), LookIn:=xlValues, lookat:=xlWhole)
          If Cel Is Nothing Then
            .Rows(J).Copy WbkDest.Sheets("Sheet1").Range("A" & Lg)
            Lg = Lg + 1
          End If

Merci et bon week-end.

Bonjour

Comme j'ouvre WbkB en dernier c'est lui qui est actif donc toutes les références se rapporte à lui

With Sheets("Feuille1")

La macro "travaille" avec avec le WbkB.Sheets("Feuille1") et toutes les références avec le point ( . ) s'adresseront bien au bon classeur dans la bonne feuille

Dans ce code je recherche .Range("G" & J) (du WbkB.Sheets("Feuille1")) dans le WbkA.Sheets("Feuille1").Columns("G")

          Set Cel = WbkA.Sheets("Feuille1").Columns("G").Find(what:=.Range("G" & J), LookIn:=xlValues, lookat:=xlWhole)
          If Cel Is Nothing Then
            .Rows(J).Copy WbkDest.Sheets("Sheet1").Range("A" & Lg)
            Lg = Lg + 1
          End If

j'aurais pu remplacer par

          Set Cel = WbkA.Sheets("Feuille1").Columns("G").Find(what:=[surligner=#00FF00]WbkB.Sheets("Feuille1").Range("G" & J), LookIn:=xlValues, lookat:=xlWhole)
          If Cel Is Nothing Then
            [surligner=#00FF00]WbkB.Sheets("Feuille1").Rows(J).Copy WbkDest.Sheets("Sheet1").Range("A" & Lg)
            Lg = Lg + 1
          End If

Voilà même s'il n'y est pas marqué clairement la macro m'adresse au bon classeur

Bonne journée

Dernière question.

Set Cel = WbkA.Sheets("Feuille1").Columns("G").Find(what:=.Range("G" & J), LookIn:=xlValues, lookat:=xlWhole)
          If Cel Is Nothing Then
            .Rows(J).Copy WbkDest.Sheets("Sheet1").Range("A" & Lg)

Voici comment j'interprète le code:

on compare les valeurs de la colonne G Fichier A avec ceux de la colonne G Fichier B.

Si il n'y a pas de correspondance alors on copie la valeur dans le classeur de destination.

Où est l'erreur ?

(Dsl si je suis long à la détente mais je suis débutant).

Salut le forum

Es-tu certain du nom des feuilles ?

Set Cel = WbkA.Sheets("Feuille1").Columns("G").Find(what:=.Range("G" & J), LookIn:=xlValues, lookat:=xlWhole)

If Cel Is Nothing Then

.Rows(J).Copy WbkDest.Sheets("Sheet1").Range("A" & Lg)

Tu as un fichier en Anglais et un autre en Français....

Mytå

Le nom des fichiers sont corrects.

Voici les noms des premières feuilles dans chaqu'un des classeurs:

  • Comparaison: Sheet1
  • FichierA: Feuille1
  • FichierB: Feuille1

Bonjour

flyEmirates a écrit :

on compare les valeurs de la colonne G Fichier A avec ceux de la colonne G Fichier B.

Si il n'y a pas de correspondance alors on copie la valeur dans le classeur de destination.

Oui indirectement : En principe on recherche dans le fichier A la valeur du fichier B et si pas présente on copie la ligne du fichier B vers le fichier Dest

Il peut y avoir des données présentes dans le fichier A mais absentes dans le Fichier B

Mais le but du jeu c'était

flyEmirates a écrit :

Le but de la macro, c'est de savoir si il y a eu de nouvelles lignes dans le fichier B (donc des nouveaux "RemInstr desc") qui ne sont pas dans le fichier A.

Bonne journée

OK merci.

Je crois que j'ai moi même oublié le but initial de la macro.

Bon week-end ensoleillé.

Rechercher des sujets similaires à "vba comparaison deux fichiers differents"