[VBA] - Recherche V à 3 critères renvoyant un commentaire

Bonjour, c’est mon premier message sur le forum concernant une aide pour du VBA.

J’ai eu beau chercher je n’ai pas trouvé de solution à mon problème pour une Recherche V à 3 critères pouvant laisser un commentaire car je suis débutant dans ce domaine.

Je m’explique pour être clair sur mes attentes liées à ma recherche :

Il y a deux feuilles dans un même fichier où on retrouvera dans chaque feuille les colonnes Argument 1, Argument 2 et Argument 3, dans ces colonnes sont présents les informations qui nous intéressent pour effectuer la recherche. On retrouve également la colonne Statut où si la recherche aboutie correctement, cela note « Matching » autrement « Unmatching » et dans ce dernier cas d’Unmatching, il faut que la macro indique dans la colonne Différence où est-ce que la Recherche n’a pas abouti, donc soit au niveau de l’Argument 1 ou 2 ou 3.

Les bases posées, j’aimerais donc que le code VBA puisse rechercher pour chaque ligne et dans chaque feuille les cas de Matching où les trois arguments matchent entre les deux feuilles sinon indiquer dans Différence quel Argument ne fonctionne pas comparé à la deuxième feuille.

J'ai tenté un premier code qui fonctionne bien pour effectuer la Recherche V mais j'avais procédé à une concaténation des trois Arguments ce qui empêche d'indiquer quel est l'Argument qui pose soucis en cas d'Unmatching.

Je remercie d'avance ceux qui pourront m'aider et j’espère avoir été clair, n’hésitez pas à m’indiquer s’il y a des points d’ombres pour vous car pour moi ça me paraît clair connaissant les attentes.

Cordialement,

Thomas

bonjour,

concernant le matching pas de problème.

concernant le unmatching

autrement « Unmatching » et dans ce dernier cas d’Unmatching, il faut que la macro indique dans la colonne Différence où est-ce que la Recherche n’a pas abouti, donc soit au niveau de l’Argument 1 ou 2 ou 3.

je recherche A 1 X parmi A 1 Z, A 2 X, B 1 X, A 2 Z, et B C D . Le résultat est unmatching mais quelle réponse veux-tu dans ce cas (tu as en fait une réponse par ligne)

A 1 Z argument 3

A 2 X argument 2

B 1 X argument 1

A 2 Z arguments 2 et 3

B C D arguments 1 2 et 3

Bonjour

A tester

Merci h2so4 de ton retour,

Alors enfaite j'imaginais ça plus simplement que d'avoir autant de combinaisons.

Prenant un exemple concret avec l'Excel:

La ligne 2 de Feuil1 matche avec la ligne 6 de Feuil2 car les 3 arguments sont vérifiés et correspondent entre eux du coup dans la colonne Statut, la macro viendra écrire "Matching"

Cependant si je prends la ligne 8 de Feuil1, la macro devrait rechercher de cette façon:

- Première étape, elle détecte que l'Argument 1 est vérifié à la ligne 4 et 8 de Feuil2 et continuera ses recherches sur ces deux lignes

- Seconde étape, elle détecte que l'Argument 2 concorde avec la ligne 4 mais pas la 8 du coup elle abandonne ses recherches avec la 8 pour se focaliser seulement sur les lignes encore valables à sa recherche de matching

- Troisième étape, à la ligne 4 elle ne trouve pas la correspondance de l'Argument 3 car dans Feuil1 c'est écrit "Rouen" tandis que dans Feuil2 on retrouve "Lille". De ce fait, dans Feuil1 à la ligne 8 on a un cas d'Unmatching à l'Argument 3 et il faudra "simplement" écrire dans la colonne Différence de la ligne 8 Feuil1 "Argument 3"

J'espère avoir répondu à ton interrogation !

Merci M12 pour ta macro !

Ca commence à se rapprocher fortement du but que je veux atteindre cependant il doit y avoir un paramètre qui ne fonctionne pas au niveau de la recherche qui semble faire : Recherche Ligne 2 Feuil1 avec Ligne 2 Feuil2, Ligne 3 Feuil1 avec Ligne 3 Feuil2.. et ainsi de suite.

Car à la Ligne 7 Feuil1 c'est bien écrit Matching car à la Ligne 7 Feuil2 les Arguments sont les mêmes, cependant pour la Ligne 2 Feuil1 il indique No-Matching alors que les Arguments correspondent bien à la Ligne 6 Feuil2 !

J'ai ouvert ta macro pour check un peu dedans mais c'est vrai qu'en tant que débutant je m'y perds pas mal avec toutes ces variables pour détecter d'où provient l'erreur

re-bonjour,

tenant compte de tes compléments d'info, une proposition de fonction personnalisée

h2so4 merci énormément tu as bien répondu à la problématique !

Je vais essayer de légèrement modifier ton code pour qu'il écrive d'où provient l'anomalie dans une colonne Différence mais c'était exactement cela !

Merci à vous deux d'avoir pris de votre temps, passez une bonne journée

bonjour,

en adaptant les formules

Bonjour tout le monde,

Je relance ce sujet car j'ai finis ma macro, tout semble fonctionner correctement c'est super. J'ai utilisé la fonction de h2so4 pour l'intégrer dans ma macro et elle fonctionne également très bien.

Cependant elle est très très lente, j'ai des centaines et centaines de lignes à traiter avec et pour approximativement 1100 lignes elle a mis 40 minutes. S'il y a des courageux qui veulent s'y plonger pour tenter de m'aider à résoudre ce problème ce serait avec plaisir. J'ai remarqué que c'est la macro CYO_MATCHING et IHM_MATCHING qui prennent énormément de temps.

Je vous joins un fichier où j'ai laissé 200 lignes pour l'exemple en supprimant les données inutiles.

Merci d'avance à ceux qui pourront m'aider.

Bonjour,

une proposition. (à vérifier car il n'y a pas de cas de no match 2 ou 3)

Ola h2so4,

Meri beaucoup elle fonctionne très bien !

Cependant j'ai un problème que je rencontre lorsque je lance certains Sub de ma macro individuellement. Je peux lancer des Sub qui ne font pas appel à la Function qui permet le matching et pourtant quand je vois que c'est trop long je fais un débogage et je vois que le problème est lié à Function à la ligne "If Not re Is Nothing Then".

Finalement Function s'active pendant le process du Sub alors qu'il n'est pas censé l'être. Je ne sais pas si j'ai été clair mais je n'arrive pas à comprendre cela car si je supprime Function de mon module ce problème n'est plus là et les Sub ne l'impliquant pas fonctionne mieux.

Bonjour,

ta macro mets une formule dans le classeur, formule qui utilise la fonction personnalisée, si excel estime qu'il doit réévaluer la formule, il fera appel à la fonction.

pour éviter ce recalcul, remplace la formule par son résultat.

j'ai adapté ton code en ce sens.

edit j'ai laissé une instruction de débogage intempestive : version corrigée

h2so4,

J'étais parti un peu loin en tentant de faire en sorte que les formules se calculent en manuel et non automatique mais du coup c'était bien ta méthode à rentrer les valeurs et supprimer la formule.

Cependant le .Value = .Value affichant un message d'erreur j'ai changé en faisant en sorte de coller les valeurs de la colonne à la fin du Sub Matching.

Merci à toi tu m'as été d'une grande aide

re-bonjour,

Heureux que tu aies pu trouver une solution.

Cependant le .Value = .Value affichant un message d'erreur

pas de problème chez moi avec le fichier exemple que tu as mis.

Hello h2so4 j'espère que tu vas bien,

J'ai finis la Macro elle fonctionne bien et va assez vite et j'ai voulu faire des tests plus pousser pour vérifier que le matching est infaillible.

Finalement, si tu as l'envie d'encore m'aider sur la macro matching tu verras que sur l'une des feuilles on peut retrouver "Matched" tandis que sur l'autre c'est "Unmatched". En regardant de plus près ça semble être toujours l'ACTION_TYPE où ça bloque et j'ai donc voulu regarder la fonction que tu m'as transmis mais je n'arrive pas à comprendre comment elle fonctionne dans la très grosse majorité des cas et sur certains elle en vient à ne pas réussir à 100% finalement.

Si tu me donnes encore de ton temps ce serait super, merci d'avance si tu peux !

EDIT: En faisant le matching seulement sur les ACTION_TYPES MODI, la fonction s'est parfaitement exécutée et tout a bien matché

10matching-cyo-ihm.zip (265.98 Ko)
Rechercher des sujets similaires à "vba recherche criteres renvoyant commentaire"