Macro pour comparer deux fichiers excel

Fermé
Lily23 - 9 avril 2020 à 03:22
yg_be
Messages postés
20048
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 août 2022
- 12 avril 2020 à 09:45
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

yg_be
Messages postés
20048
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 août 2022
1 196
9 avril 2020 à 09:21
bonjour, peux-tu partager tes fichiers?
0
Lily23_
Messages postés
5
Date d'inscription
jeudi 9 avril 2020
Statut
Membre
Dernière intervention
11 avril 2020

9 avril 2020 à 17:32

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

9 avril 2020 à 17:38
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.
0
yg_be
Messages postés
20048
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 août 2022
1 196 > Lily23_
Messages postés
5
Date d'inscription
jeudi 9 avril 2020
Statut
Membre
Dernière intervention
11 avril 2020

9 avril 2020 à 17:55
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?
0
Lily23_
Messages postés
5
Date d'inscription
jeudi 9 avril 2020
Statut
Membre
Dernière intervention
11 avril 2020

9 avril 2020 à 20:20
Voici le lien google drive : https://drive.google.com/drive/folders/1yUgcD9HO6SN4VPeUjPysX9JnwknaFmeq?usp=drive_open .

La macro se trouverait dans le fichier final
0
yg_be
Messages postés
20048
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 août 2022
1 196
10 avril 2020 à 10:59
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
0
Lily23_
Messages postés
5
Date d'inscription
jeudi 9 avril 2020
Statut
Membre
Dernière intervention
11 avril 2020
> yg_be
Messages postés
20048
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 août 2022

11 avril 2020 à 22:11
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
0
Lily23_
Messages postés
5
Date d'inscription
jeudi 9 avril 2020
Statut
Membre
Dernière intervention
11 avril 2020

11 avril 2020 à 23:39
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".
0
yg_be
Messages postés
20048
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 août 2022
1 196
12 avril 2020 à 09:45
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
0