Optimiser une macro de comparaison de feuilles Excel - VB/VBA/VBS - Programmation
Marsh Posté le 21-10-2011 à 17:16:54
Bon excel traitant 300 000 lignes why not ?
1ere solution : Prendre un PC plus musclé
2eme solution: Modifier l'algo pour chercher une ligne de la 1ere feuille
en parcourant un minimum de lignes de la 2eme feuille
car il me semble que pour chaque ligne de la 1ere feuille, on attaque la
recherche sur l'ensemble des lignes de la 2eme
Proposition
=> On s'arrange pour trier les 2 feuilles ex :
Feuille 1
donnée A
donnée C
donnée B
rajout d'une info de tri (champ temporaire contenant 1, 2, 3 ...)
=>
Feuille 1
1donnée A
2donnée C
3donnée B
Feuille 2
donnée D
donnée B
donnée A
rajout d'une info de tri
=>
Feuille 2
1donnée D
2donnée B
3donnée A
Tri de Feuille1 et Feuille2 sur 2eme champ et comparaison
des lignes en avançant sur les 2 feuilles en même temps
Feuille 1
1donnée A TROUVé
3donnée B TROUVé
2donnée C PAS TROUVé
et
Feuille 2
3donnée A TROUVé
2donnée B TROUVé
1donnée D PAS TROUVé
Puis remise des feuilles dans l'ordre du 1er champ
Feuille 1
1donnée A TROUVé
2donnée C PAS TROUVé
3donnée B TROUVé
et
Feuille 2
1donnée D PAS TROUVé
2donnée B TROUVé
3donnée A TROUVé
Je ne sais pas si c'est clair et facilement faisable en VBA
mais là ça serait déjà plus rapide ...en restant sous Excel
Marsh Posté le 12-11-2011 à 17:16:31
Oups... C'est parti trop vite : message remplacé
Marsh Posté le 12-11-2011 à 17:16:32
Bonjour,
Soft7 : Je t'ai répondu sur le forum d'origine en te proposant de m'envoyer ton fichier :
Citation : Merci de m'envoyer Automatisation_RQT_V2.xlsm avec les 2 feuilles "Req_AIA" et "Req_CRI" à l'adresse que je t'ai mis en MP |
Tu n'as même pas ouvert la messagerie :
Inutile d'arroser tous les forums du Net : tu n'auras pas de réponses plus pertinente sur ce code.
Visiblement tu as déjà compris pas mal de chose puisque tu as supprimé le pire : les Redim et les Delete...
Demande si tu as encore des zones d'ombre je ne demande pas mieux que de rabacher mais évite de te balader partout je ne peux pas suivre ton fil d'un forum à l'autre...
Je t'ai affirmé avoir testé l'algo d'origine sur 20 000 000 de cellules (soit 500 000 lignes x 40 colonnes) avec un temps de traitement de 2 minutes ce qui correspond bien au gain de temps espéré en utilisant des Array.
Je n'ai pas analysé complètement ta nième version, mais à priori -si le reste est juste- c'est surtout les 5 dernières lignes 109 à 114 qui ralentissent ton code et qui bouffent la majorité de ton temps de process...
Si ligne (49 et 50) :
Code :
|
Alors tu peux avantageusement remplacer les lignes 109 à 114 par
Code :
|
Et à mon avis tu devrais avoir gagné pas loin de 50 minutes pour peu que tu rajoutes (au début de ta procédure) :
Code :
|
A+
Marsh Posté le 21-10-2011 à 15:51:33
Bonjour,
Je viens de m'inspirer d'un code arrangé selon les besoins recherchés.
En gros, j'ai 2 feuilles dans le même workbook Excel que je compare.
La comparaison a pour objectif de détecter les similitudes et différences des lignes.
Les 2 fichier ont la même organisation (colonnes) mais les lignes ne sont pas dans le même ordre d'apparition.
Résultats:
Si ligne trouvée alors celle ci apparait en vert sur une feuille et sur l'autre message indiquant "Trouvé"
Si la ligne n'est pas trouvée, la première cellule est en rouge + message "non trouvé" + coloration en orange de la dernière cellule non trouvée.
Problème:
Le fichiers comportent parfois + de 300 000 lignes et le temps est très très long (environ 1h)
Je suis pas très habitué au VBA donc je ne vois pas pourquoi cette lenteur d'autant que j'utilise des tableaux pour la comparaison.
A L'AIDE SVP.