rapprocher 2 fichier excel trés long

wainso

XLDnaute Occasionnel
Bonjour le Forum
merci d'avance pour votre aide
je m'explique: j'ai deux fichier excel qui sont assez rempli de données (presque 1 million de ligne chacun).
mon objectif est de vérifier pour chaque ligne dans la première colonne du premier fichier son existence ou non dans la première colonne du second fichier. Pour cela j'ai dû utiliser soit la fonction recherchev ou equiv. mon problème est essentiellement la lenteur de l'exécution. presque une heure
est il possible de le faire plus rapidement par vba
Merci
 

Jam

XLDnaute Accro
Re : rapprocher 2 fichier excel trés long

Bonjour wainso,

La meilleure solution dans ton cas est d'utiliser un soft de base de donnée comme Access vu la taille des fichiers à comparer.
L'idéal est de copier les 2 tables dans une BDD et de lancer des requêtes qui te donnerons en quelques instants les résultats.
Si tu n'as pas Access sous la main, tu peux toujours te rabattre sur ADO afin de requêter tes fichiers (via instructions SQl: LEFT JOIN/RIGHT JOIN).

ci-après exemple de Jointure du site Ce lien n'existe plus permettant de trouver des doublons à adapter pour trouver les manquants:
Ce dernier exemple montre comment effectuer une jointure entre 2 feuilles d'un classeur fermé.
La procédure compare 2 colonnes dans des onglets différents, et liste les données communes.

La Feuil1 contient une colonne dont l'entête s'appelle NumPeriode1.
La Feuil2 contient une colonne dont l'entête s'appelle NumPeriode2.
La macro liste les données de la Feuil2 qui apparaissent aussi dans la Feuil1.


Code:
Sub requeteJointure_ControleDoublons()
    Dim Source As ADODB.Connection
    Dim Requete As ADODB.Recordset
    Dim Fichier As String, xSQL As String
    Dim i As Long
    
    Fichier = "C:\Base.xls"
    
    Set Source = New ADODB.Connection
    Source.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & _
        "data source=" & Fichier & ";" & _
        "extended properties=""Excel 8.0;HDR=Yes"""
    
    xSQL = "SELECT DISTINCT [Feuil2$].NumPeriode2 " & "FROM [Feuil2$] " & _
        "INNER JOIN [Feuil1$] ON [Feuil2$].NumPeriode2 = [Feuil1$].NumPeriode1"
    
    Set Requete = New ADODB.Recordset
    Set Requete = Source.Execute(xSQL)
    
    If Requete.EOF Then
        MsgBox "Il n'y a pas de doublons."
        Else
        'MsgBox "il y a des doublons."
        Range("A2").CopyFromRecordset Requete
    End If
    
    Requete.Close
    Source.Close
End Sub

Bon courage,
 

Softmama

XLDnaute Accro
Re : rapprocher 2 fichier excel trés long

Bonjour,

Par VBA, je préconise d'utiliser une des fonctions natives d'Excel : EQUIV ! Du coup, je doute que cela soit plus rapide que par formules... Mais tu peux toujours comparer avec cette macro :
VB:
Sub MaMaquereau()
Dim C1 as String, C2 as String
Dim F1 as String, F2 as String
Dim LastRow as Long

'Je suppose que les noms de Classeurs sont classeur1 et classeur2, à modifier ci dessous :
C1 = "Classeur1.xls"
C2 = "Classeur2.xls"

'Je suppose également que les noms de Feuilles sont Feuil1 et Feuil1 dans chaque classeur :
F1 = "Feuil1"
F2 = "Feuil1"

'Si les 2 classeurs sont ouverts :
With Workbooks(C1).Sheets(F1)
    .Columns("B:C").Insert Shift:=xlToRight
    Workbooks(C2).Sheets(F2).Range("A:A").Copy .Range("B1")
    LastRow = .Cells(Rows.Count, 2).End(xlUp).Row
    .Range("C1:C" & LastRow).FormulaR1C1 = "=IF(ISERROR(MATCH(RC[-1],R1C[-2]:R" & LastRow & "C[-2],0)),0,1)"
End With
End Sub

La macro insère 2 colonnes dans le classeur 1, copie la colonne A du 2nd classeur dans la colonne B et met 1 qd comparaison renvoie bon dans la colonne C, 0 sinon.
 

Discussions similaires

Réponses
8
Affichages
404

Membres actuellement en ligne

Statistiques des forums

Discussions
312 348
Messages
2 087 508
Membres
103 568
dernier inscrit
NoS