Macro pour comparer deux fichiers excel [Fermé]

Signaler
-
Messages postés
14989
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 avril 2021
-
Bonjour à toutes et tous,
Je suis débutante en VBA\excel et j'espère donc que vous pourrez m'aider à résoudre mon problème :

Je souhaite comparer deux versions d'un fichier excel (un ancien et l'update).
Pour ce faire, j'ai un dossier maître contenant un fichier excel vide.
En mettant dans ce dossier les deux fichiers que je veux comparer, il faudrait que mon fichier excel vide se remplisse.

Lorsque dans ce dossier j'ajoute les deux fichiers excel (le vieux et l'updaté), je voudrais que les lignes du nouveau fichier que l'on ne retrouve pas dans l'ancien apparaissent dans le 3ème fichier vierge. Mais dans les deux fichiers sources, les lignes ne sont peut être pas rangée dans le même ordre, c'est pour cela qu'il faut chercher une correspondance pour chaque.

Sinon, on peut peut être faire plus simplement sans utiliser le 3ème fichier vierge, mettre en highlight les lignes du nouveau fichier qui n'étaient pas dans l'ancien.
Le but de cette fonction est qu'elles soit réutilisable dans d'autres cas pour comparer des lignes de fichiers différents.

4 réponses

Messages postés
14989
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 avril 2021
823
bonjour, peux-tu partager tes fichiers?
Messages postés
5
Date d'inscription
jeudi 9 avril 2020
Statut
Membre
Dernière intervention
11 avril 2020


Messages postés
5
Date d'inscription
jeudi 9 avril 2020
Statut
Membre
Dernière intervention
11 avril 2020

Voici les deux fichiers sources. Je souhaiterais que la macro permette de créer un troisième fichier dans lequel se retrouveront les lignes manquantes dans le fichier source 1 mais qui se trouvent dans le fichier source 2.
Messages postés
14989
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 avril 2021
823 >
Messages postés
5
Date d'inscription
jeudi 9 avril 2020
Statut
Membre
Dernière intervention
11 avril 2020

tu nous as montré les fichiers. pour les partager, il faut les publier sur internet (google drive, cjoint.com, ...), puis partager le lien ici.
où se trouverait cette macro?
Messages postés
5
Date d'inscription
jeudi 9 avril 2020
Statut
Membre
Dernière intervention
11 avril 2020

Voici le lien google drive : https://drive.google.com/drive/folders/1yUgcD9HO6SN4VPeUjPysX9JnwknaFmeq?usp=drive_open .

La macro se trouverait dans le fichier final
Messages postés
14989
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 avril 2021
823
je suggère ceci, pour lequel il faut ajouter "Microsoft Scripting Runtime" dans les références du projet.
Option Explicit

Sub comp()
Dim src1 As Worksheet, src2 As Worksheet, cls1 As Workbook, cls2 As Workbook, dest As Worksheet
Dim dico As Scripting.Dictionary
Dim nligsrc As Long, nligdest As Long

Set dico = New Scripting.Dictionary
Set cls1 = Workbooks.Open(ThisWorkbook.Path + "\" + "fichier source 1.xlsx")
Set cls2 = Workbooks.Open(ThisWorkbook.Path + "\" + "fichier source 2.xlsx")
Set src1 = cls1.Sheets("Feuil1")
Set src2 = cls2.Sheets("Feuil1")
Set dest = ThisWorkbook.Sheets("Sheet1")
nligsrc = 2
Do While src1.Cells(nligsrc, 1) <> ""
    Call dico.Add(CStr(src1.Cells(nligsrc, 1)) + "|" + CStr(src1.Cells(nligsrc, 2)) + "|" _
        + CStr(src1.Cells(nligsrc, 3)) + "|" + CStr(src1.Cells(nligsrc, 4)), 0)
    nligsrc = nligsrc + 1
Loop
nligsrc = 2
nligdest = 2
Do While src1.Cells(nligsrc, 1) <> ""
    If Not dico.Exists(CStr(src2.Cells(nligsrc, 1)) + "|" + CStr(src2.Cells(nligsrc, 2)) + "|" _
        + CStr(src2.Cells(nligsrc, 3)) + "|" + CStr(src2.Cells(nligsrc, 4))) Then
        Call src2.Rows(nligsrc).Copy(dest.Rows(nligdest))
        nligdest = nligdest + 1
    End If
    nligsrc = nligsrc + 1
Loop
cls1.Close
cls2.Close
End Sub
Messages postés
5
Date d'inscription
jeudi 9 avril 2020
Statut
Membre
Dernière intervention
11 avril 2020
>
Messages postés
14989
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 avril 2021

Merci beacuoup yg_be. J'ai fait quelques modifications vu que finalement j'ai eu plus de colonnes dans mes fichiers que prévus mais le script a marché. Je t'en remercie infiniment
Messages postés
5
Date d'inscription
jeudi 9 avril 2020
Statut
Membre
Dernière intervention
11 avril 2020

Je voudrais également créer une macro dans le "fichier source 2" qui compare les colonnes "document" des deux fichiers sources pour connaitre les documents que les deux fichiers ont en commun. Je rappelle toutefois que dans les deux fichiers sources, les lignes ne sont pas toujours rangée dans le même ordre, il faut donc chercher une correspondance pour chaque. A la fin, la macro créera une nouvelle colonne dans le "fichier source 2" pour indiquer si chaque document de ce fichier se retrouve sur le "fichier source 1".
Messages postés
14989
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 avril 2021
823
peut-être ceci, non testé:
Option Explicit

Sub comp()
Dim src1 As Worksheet, src2 As Worksheet, cls1 As Workbook
Dim dico As Scripting.Dictionary
Dim nligsrc As Long

Set dico = New Scripting.Dictionary
Set cls1 = Workbooks.Open(ThisWorkbook.Path + "\" + "fichier source 1.xlsx")
Set src1 = cls1.Sheets("Feuil1")
Set src2 = ThisWorkbook.Sheets("Feuil1")
nligsrc = 2
Do While src1.Cells(nligsrc, 1) <> ""
    Call dico.Add(CStr(src1.Cells(nligsrc, 1)) + "|" + CStr(src1.Cells(nligsrc, 2)) + "|" _
        + CStr(src1.Cells(nligsrc, 3)) + "|" + CStr(src1.Cells(nligsrc, 4)), 0)
    nligsrc = nligsrc + 1
Loop
nligsrc = 2
Do While src1.Cells(nligsrc, 1) <> ""
    If Not dico.Exists(CStr(src2.Cells(nligsrc, 1)) + "|" + CStr(src2.Cells(nligsrc, 2)) + "|" _
        + CStr(src2.Cells(nligsrc, 3)) + "|" + CStr(src2.Cells(nligsrc, 4))) Then
        src2.Cells(nligsrc, 7)="absent"
     else
         src2.Cells(nligsrc, 7)="présent"
     End If
    nligsrc = nligsrc + 1
Loop
cls1.Close
End Sub