Amélioration fonction VBA recherche 3 critères

11bug.xlsm (281.01 Ko)

Bonjour,

J'ai un problème avec une fonction que j'ai dans VBA. Bien que fonctionnelle, cette dernière est trop lente et imprévisible sur son temps d'exécution, parfois d'1m30 à plus de 4/5min pour les mêmes données.

Ci-joint un fichier Excel où les données ont été changées, la majorité des informations supprimées car pas utiles (c'est pourquoi les données du fichier sont dans des colonnes étonnantes) et j'ai supprimé la majorité des procédures en VBA pour laisser que l'essentiel.

Le principe est simple, nous avons 3 clés sur deux feuilles différentes, la macro va analyser ces 3 clés et si ce sont les mêmes d'une feuille à l'autre alors nos lignes "Matched" si une différence est détectée alors "UnmatchedX" avec X comme étant la clé non retrouvée.

Le module 1 correspond à la procédure sur les feuilles PAGE1 et PAGE2 pour appliquer la formule de matching sur chaque ligne et le module 2 correspond à la fonction matching.

Je vous demande s'il est possible d'améliorer cette fameuse fonction "matching" de VBA pour avoir le même résultat mais surtout avec un processus bien plus rapide car actuellement Excel plante quand je lance la procédure globale du fichier (Vous n'avez pas toutes les procédures comme dit précédemment mais c'est bien le passage du Matching qui pose problème)

Merci d'avance pour ceux qui pourront m'apporter une aide et si vous avez des questions ou une incompréhension n'hésitez pas !

Bonjour Mastho15

Il est quand même dommage de vouloir utiliser VBA et des fonctions extrêmement gourmande en temps...
plutôt que d'utiliser une fonction native sur Excel qui est NB.SI() combiné à un/des SI()
devrait rendre le même résultat en beaucoup plus rapide

En page 1

=SI(NB.SI(PAGE2!U:U;S2)=0;"Unmatched CLE1";SI(NB.SI.ENS(PAGE2!U:U;S2;PAGE2!V:V;T2)=0;"Unmatched CLE2";SI(NB.SI.ENS(PAGE2!U:U;S2;PAGE2!V:V;T2;PAGE2!W:W;U2)=0;"Unmatched CLE3";"Matched")))

A+

bonjour le fil, Bruno,

c'est sûr que cela fait beaucoup, inspecter 5.000 cellules d'une colonne (en utilisant un tableau ou une plage nommée) au lieu de la colonne entière est un deuxième progrès (inférieur).

Bonjour BrunoM45, pourquoi faire compliquer et lent lorsqu'Excel permet ce genre de formule...

Merci beaucoup, ça fonctionne super, bien plus rapide et digeste à voir !

Bonne journée à toi

Rechercher des sujets similaires à "amelioration fonction vba recherche criteres"