Comparaison de colonnes Optimisé

Bonjour,

Alors voila, j'ai 2 fichiers excel qui font tout les 2 : 65000 lignes environ.

Chaque ligne correspond à une référence.

Mon premier fichier correspond au référence portant sur l'année 2017 et mon deuxième fichier portant sur l'année 2018.

J'aurai besoin de connaitre le nombre de référence identique qu'il y a entre l'année 2017 et l'année 2018.

J'ai donc codé un petit truc qui fonctionne, seulement cela met beaucoup de temps.

Je voudrai donc savoir si il y a un moyen pour que cela prenne moins de temps.

L'extrait de mon algo :

Sub Comparaison()

Xls1 = New xls.Application

Xls1.Visible = False

Xls1.Workbooks.Open(txtBox1.Text) 'Chemin de notre 1er fichier excel

sheetXls1 = CType(Xls1.ActiveWorkbook.Worksheets(1), xls.Worksheet)

Xls2 = New xls.Application

Xls2.Visible = False

Xls2.Workbooks.Open(txtBox2.Text) 'Chemin de notre 2eme fichier excel

sheetXls2 = CType(Xls2.ActiveWorkbook.Worksheets(1), xls.Worksheet)

'Recuperation du Nombre de lignes dans le 1er fichier Excel

Dim nbLigneXls1 As Integer

nbLigneXls1 = sheetXls1.UsedRange.Rows.Count

'Boucle pour check 2 références identiques

Dim v As String ' variable dans laquelle on stock la valeur de la cellule du 1er fichier

Dim i As Integer = 0 ' variable pour mon compteur

Dim temps_debut As DateTime ' variable qui sert a connaitre le temps d'execution

Dim value1 As Integer

value1 = 1

temps_debut = DateTime.Now ' variable qui sert a connaitre le temps d'execution

ProgressBar1.Minimum = 0

ProgressBar1.Maximum = nbLigneXls1

While value1 <> nbLigneXls1 'Parcours de mon 1er fichier

v = sheetXls1.Range("C" & value1).Value ' On stock la valeur de notre cellule afin de la comparer ensuite

If sheetXls2.Cells.Find(What:=v).Activate = True Then 'On fait une recherche de la valeur de la variable "v" dans notre 2eme fichier

i += 1 'On incremente notre comptre de reference similaire

End If

ProgressBar1.Value = value1

value1 += 1

End While

Dim delai As TimeSpan = DateTime.Now - temps_debut

ProgressBar1.Value = 0

MsgBox(delai.ToString)

End Sub

Merci pour ceux qui prendront le temps de réfléchir a mon problème.

Cordialement,

Corentin

Bonsoir,

deux petites choses :

La première rien de grave tant qu'il n'y a pas plus de 32000 lignes :

Dim nbLigneXls1 As Integermieux vaut dimensionner en Long qui permet d'aller au delà des 32566 lignes....

La deuxième :

v = sheetXls1.Range("C" & value1).Value à chaque boucle vous faites "un appel" de mise en mémoire de valeur dans la variable "v", il faut savoir qu'à chaque fois que VBA va chercher une valeur sur une feuille cela "prend du temps"...

Le mieux, dimensionner la variable "v" en tableau VBA

Dim v()

puis remplir ce tableau avec les valeurs de la colonne C :

v=sheetXls1.Range("C2:C" &bLigneXls1).Value

Ensuite dans votre boucle vous faites vos teste sur ce tableau avec la variable de position qui change à chaque tour :

If sheetXls2.Cells.Find(What:=v(value1)).Activate

Il est évident que c'est à "l'orthographe" près de codage !

@ bientôt

LouReeD

Bonjour,

Je joins à tout hasard un fichier qui pourrait t'apporte une aide.

Il va te permettre de comparer tes 2 listes de référence.

A te relire.

Cdlt.

Rechercher des sujets similaires à "comparaison colonnes optimise"