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.