XL 2010 optimisation boucle

pecavi35

XLDnaute Nouveau
Bonjour à tous,
j'ai des fichier assez longs à traiter en ce moment, ils viennent d'extracts que je fais quotidiennement.
le comparateur demande de selectionner 2 fichier et les compare. Il me sort juste les lignes différentes.
J'ai essayé de commenter pour faciliter la compréhension.

J'ai fait un peu en mode bourrin avec des variables imposées, j'aimerai que ca s'adapte au fichier (surtout sur les nombre de lignes)

Pour accelerer le traitement, j'aimerai supprimer les lignes "déjà vues", j'ai essayé plusieurs possibilité et à chaque fois ca bug (parfois ca bug pas mais ca supprime pas non plus)

Enfin bref, si vous avez des idées, je suis preneur! A mon avis, il manque pas grand chose mais je bloque

Merci de votre aide!
 

Pièces jointes

  • Comparateur CTS372.xlsm
    32.1 KB · Affichages: 28
  • 1016 - CTS 372 - JACKET- Taux effectif de CND (tous controles).xlsx
    64.6 KB · Affichages: 23
  • 1013 - CTS 372 - JACKET- Taux effectif de CND (tous controles).xlsx
    63.6 KB · Affichages: 23

pecavi35

XLDnaute Nouveau
Bonjour Benoit,
merci de ta réponse rapide. j'essaie de comprendre ton code mais y a quelques trucs qui m'échappent...

Function SaveArray(pathWk$)
Dim wk As Workbook, sh As Worksheet
Dim ii&

'Ouverture du fichier.
Set wk = Workbooks.Open(pathWk)
Set sh = wk.Sheets(1)

'Enregistrement de la dernière ligne.
ii = sh.Cells.Find("*", , , , xlByRows, xlPrevious).Row
==> ca définit le numéro de la dernière ligne non vide?

'Enregistrement du tableau.
With sh
SaveArray = .Range(.Cells(5, "B"), .Cells(ii, "L")).Value
End With
==> B et L sont les noms des colonnes? est ce équivalent à cells(5,2) et cells(ii, 12)?
'Fermeture du classeur.
wk.Close False

End Function

Ensuite, arrfileA et B sont les fameux tableaux virtuels rempli par ta fonction savearray?

Et là, tu résumes en 10 lignes mon code de 25 lignes c'est bien ca? Par contre tu compares les lignes i et i des 2 fichiers, il n'y a pas de recherche si?
pour la recherche j'insère le tout dans une autre boucle "for" qui pour chaque ligne i du fileA fait défiler les lignes k du fileB jusqu'à réunir toutes les conditions
For i = LBound(arrFileB) To UBound(arrFileB) ==> Lbound et Ubound sont les 1e et dernieres lignes? (Pour ma culture, cette fonction marche t elle aussi avec Lbound(sheets("nomfeuille")? )

For i = LBound(arrFileA) To UBound(arrFileA)
For k = LBound(arrFileB) To UBound(arrFileB)
If arrFileA(i, 2) = arrFileB(k, 2) And arrFileA(i, 3) = arrFileB(k, 3) And arrFileA(i, 4) = arrFileB(k, 4) And arrFileA(i, 11) <> arrFileB(k, 11) Then
With ThisWorkbook.Sheets(1)
ii = .Cells.Find("*", , , , xlByRows, xlPrevious).Row + 1 ==> tu définies la première ligne vide de la feuille 1 qui sera remplie via le for ci dessous? mais je ne comprends pas les 4 virgules à la suite
For j = 1 To 8
.Cells(ii, j).Value = arrFileA(i, j + 1)
Next j
.Cells(ii, 9).Value = arrFileA(i, 11)
.Cells(ii, 10).Value = arrFileB(k, 11)
End With
End If
Next k
Next i

End Sub​


Petite question pour ma culture: dans la fonction "if", est ce que l'ordre des conditions à une importance? car dans mon cas:
arrFileA(i, 2) = arrFileB(i, 2) sera vraie beaucoup plus souvent que arrFileA(i, 4) = arrFileB(i, 4)

Merci de ton aide

 
Dernière édition:

Statistiques des forums

Discussions
312 348
Messages
2 087 510
Membres
103 570
dernier inscrit
patrickb83p