Excel Compare & XL Comparator
Salut à Tous,
J'ai besoin de votre aide encore une fois.
J'ai 2 fichiers avec environ 18,000 lignes chaque.
Les deux fichiers ont les même entêtes.
Les deux fichiers ont 8 colonnes chaque.
Voila ce que j'aimerais avoir si c'est possible:
Une macro ou une formule pour comparer les deux fichiers en référence de la première colonne et me donne le résultat dans une autre feuille.
Ex Feuille Fabricants
en A2 10001 en B2 105 en C2 Chacun en D2
Ex Feuille Fournisseurs
en A2 10001 en B2 en C2 Chacun en D2 QUINCAILLERIE
Que la formule ou la macro me donne comme résultat:
Feuille 3
en A2 10001 en B2 105 en C2 Chacun en D2 QUINCAILLERIE
Autrement dit que la formule ou la macro rajoute les manquants.
J'ai essayé avec Excel Compare & XL Comparator, les deux me donne le résultat dans une troisième feuille mais
double le résultat. I.E. une ligne avec fournisseur et une autre ligne avec fabricant. Donc, je me retrouve avec une feuille
de 35,000 lignes au lieu de 18,000 lignes.
Je joint mon fichier, et Ex. de Excel Compare ds un Onglet.
Merci Beaucoup
Bonjour Moé Kolisse,
Une solution dans le fichier suivant :Par contre tu essaieras sur tes 18000 lignes, je ne sais pas combien de temps ça prend.
Bonjour vba-new,
WOW WOW ET RE-WOW,
Mon onglet Fabricant contient environ 16,800 lignes,
Mon onglets Fournisseurs environ 16,200 lignes,
Le résultat: la feuille 3: 18,679 lignes.
Et tout ça en environ 40 secondes.
La photo que je joins montre le résultat que je voulais
Merci beaucoup, mon problème est résolu à 100%.
Re,
40 secondes ça fait relativement long !
Essaie avec la macro dans le fichier suivant, ça devrait être bien plus rapide :Le traitement se fait via des variables "tableaux" (le traitement se fait en mémoire plutôt que dans les cellules directement).
Pour optimiser, j'ai mis la colonne "Mots-clés" en 4è position, sur le même modèle que les autres onglets.
Sub consolide()
Dim derlignFab As Long, derlignFour&, lim1&, lim2&, i&, j&, ind&
Dim tbl1, tbl2, tbl3()
'dernière ligne de la feuille "Fabricants"
derlignFab = Sheets("Fabricants").Range("A" & Rows.Count).End(xlUp).Row
'dernière ligne de la feuille "Fournisseurs"
derlignFour = Sheets("Fournisseurs").Range("A" & Rows.Count).End(xlUp).Row
'on met toutes les données dans 2 variables tableau
tbl1 = Sheets("Fabricants").Range("A2:H" & derlignFab)
tbl2 = Sheets("Fournisseurs").Range("A2:H" & derlignFour)
lim1 = UBound(tbl1): lim2 = UBound(tbl2)
'on crée un tableau contenant toutes les ressources
ReDim tbl3(1 To lim1 + lim2, 1 To 2)
For i = 1 To lim1
j = j + 1
tbl3(j, 1) = tbl1(i, 1)
Next i
For i = 1 To lim2
j = j + 1
tbl3(j, 1) = tbl2(i, 1)
Next i
'on crée une liste sans doublons des id ressource
Set d = CreateObject("Scripting.Dictionary")
For i = LBound(tbl3) To UBound(tbl3)
d(tbl3(i, 1)) = ""
Next i
With Sheets("Feuil3")
.Rows("2:" & Rows.Count).ClearContents 'on efface les données
.[A2].Resize(d.Count, 1) = Application.Transpose(d.keys) 'on met les id en colonne A
'on récupère les infos
'l'utilisation de l'objet Dictionary permet un gain de performance dans notre cas
For ind = 2 To 8
Set temp = CreateObject("Scripting.Dictionary")
Set temp2 = CreateObject("Scripting.Dictionary")
For i = 1 To lim1
temp(tbl1(i, 1)) = tbl1(i, ind)
Next i
For i = 1 To lim2
temp2(tbl2(i, 1)) = tbl2(i, ind)
Next i
Set d = CreateObject("Scripting.Dictionary")
For i = LBound(tbl3) To UBound(tbl3)
If Not temp.exists(tbl3(i, 1)) Or temp(tbl3(i, 1)) = "" Then d(tbl3(i, 1)) = temp2(tbl3(i, 1)) Else d(tbl3(i, 1)) = temp(tbl3(i, 1))
Next i
Set temp = Nothing
Set temp2 = Nothing
.[A2].Offset(, ind - 1).Resize(d.Count, 1) = Application.Transpose(d.items)
Set d = Nothing
Next ind
.[A1].Sort key1:=.[A2], Order1:=xlAscending, Header:=xlGuess 'tri
End With
End Sub
Salut vba-new,
Effectivement la résultat est instantané.
Un très GROS MERCI.