Bonjour NulEnExcell77
Je regarde à rechercher que chaque sous-chaine entrée dans la zone texte de l'utilisateur se trouve dans la zone de recherche. Je me prends la journée.
Version imprimable
Bonjour NulEnExcell77
Je regarde à rechercher que chaque sous-chaine entrée dans la zone texte de l'utilisateur se trouve dans la zone de recherche. Je me prends la journée.
Bonjour à tous
Voilà qui devrait permettre de rechercher les mots clés de la zone de texte dans la zone de recherche quelque soit leurs ordres
J'ai modifié le tableau3 pour faire le test (ajout d'une ligne en fin de tableau)
Bonjour fraflt69,
Je te remercie, mais je suis méga frustré, sur ton fichier joint, ça marche nickel mais pas dans le mien :(
J'y comprend rien, si je lui demande "1k" il me donne toutes les lignes ou apparait la recherche dans les
chaines de caractère (101k ou 1k5 etc....)
C'est incompréhensible :/
Je vais essayer de comprendre et reviens vers toi, j'ai pourtant tout copié et tout remplacé, il ne reste rien de
ma macro d'origine :/
Merci à toi dans tous les cas :) et à plus tard
OK je vais regarder. Cela marche chez moi
Bonjour à tous,
fraflt69, j'y comprends plus rien moi :( ,
Je n'ai fait que transposer ta macro sur mon fichier et il ne différencie pas 1k de 1k1.
Est ce à cause des 11000 de lignes à traiter ?? c'est tout de même étrange :/
J'avais même fini par tourner autour de ton fichier avec mes éléments pour faire l'outil (juste en changeant le tableau et y
ajoutant les 11000 nouvelles lignes)
Ensuite, j'ai poussé un peu la recherche avec ton dernier fichier avec un autre mot clé, à savoir le pourcentage de tolérance,
et là il ne voit pas la différence ( si tu lui demande 30K 1% ou 1% 30k, il donnera les lignes 6 et 7 en résultat. dégouté :/
Depuis la macro initiale, qui me semblait finalisé, nous avons progressé, dans le sens oû je pouvais entrer dans le désordre les mots,
mais j'ai perdu en précision de recherche.
C'est un véritable casse-tête :(
Si en plus tu me réponds que ça marche chez toi, je change de pc et de pack office :lol:
Désolé de vous embêter avec ça, mais je suis quelque peu perdu là, et le pire c'est de ne pas savoir oû regarder :(
Salut.
J'avais cru comprendre que la recherche devait porter sur plusieurs colonnes. C'est ce qui ressort du code initialement posté. Du coup, si c'est le cas, le fichier de fraflt ne fonctionne pas chez moi ;)
J'ai adapté la formule du filtre avancé pour ne reprendre que les "mots entiers". La formule ajoute donc un espace avant et après chaque mot cherché, ainsi que en début et en fin de chaque cellule sur lesquelles on recherche la donnée. L'ordre de saisie des mots n'a pas d'importance.
Pièce jointe 606975
Si le filtre devait être différent (ajouter ou supprimer des colonnes de recherche, effectuer une recherche ET au lieu d'une recherche OU, ...), il suffirait de modifier la formule du filtre avancé... C'est toute la puissance de cette solution, qui s'appuie sur Excel avant de "faire du VBA".
L'important ici, c'est de comprendre l'intérêt, pour l'utilisateur Excel, de penser Excel avant de penser VBA!! Es-tu programmeur? Non! Dois-tu développer une solution distribuable "au grand public"? Non! Alors, PENSE EXCEL AVANT de penser VBA. Tu comprendras et surtout, tu MAITRISERAS beaucoup mieux ce que tu mets en place, plutôt que de dépendre de "programmeurs"... Sans cela, tu vas partir sur des solutions "informatiques" toutes plus foireuses les une que les autres, à preuve les 26 messages de cette discussion, avec du code mal torché (un EXIT SUB en tout début de procédure, franchement... :( :( :( :() que tu appliqueras sans rien comprendre et la moindre modification de la structure de ton classeur fera tout péter et t'obligera, dépendant que tu es, à venir demander de l'aide pour recevoir l'emplâtre sur la jambe de bois...
Une demande telle que la tienne, ça s'analyse un minimum et surtout, surtout!!!, on y répond en se penchant D'ABORD sur la conception du classeur et les outils natifs disponibles, avant que de tenter x solutions de "programmeur" foireuses pour telle ou telle raison.
Si la demande porte bien sur un filtre portant sur plusieurs colonnes, la solution par filtre automatique ne peut pas fonctionner puisque les filtres se complètent sans formuler une alternative.
Bonsoir,
Je pense que l'on va en rester là sur le sujet, 26 messages, c'est apparemment trop long ....:roll:
Pièce jointe 607035
Laisse moi en douter, mon pseudo sur un ancien message pour commencer et maintenant cette étalage de ta suprématie
sur le pov noob que je suis, bravo la pédagogie (pour un formateur)
Précision, tu excuseras le "exit sub", évidemment ça fait tache, mais il était précédé d'un apostrophe non? et d'un
"En cours de travaux" aussi, ce n'était pas un fichier finalisé en même temps.Je trouve ça petit de ta part de mettre l'accent sur ces détails.
La forme m'importe pas, tant que ça marche, j'ai jamais prétendu être programmeur "voici un bout de programme VBA, aidez moi à l’améliorer"
voilà comment je suis venu à vous . ooooh je vous entends de là, il prend la mouche etc..., mais à un moment, ça commence à bien faire.
Je demande de l'aide, je ne viens pas sans rien, je viens avec un début de solution qui semble (pour moi en tout cas)
convenir à mes besoins. Quand on sait pas, on dit "je sais pas" et on laisse répondre ceux qui peuvent aider.
10 ans que je viens ici, beaucoup m'ont aidés à avancer, mais ça va trop loin.
Tu imposes tes idées, TA façons de faire, peut être à raison, mais en prenant les gens de haut, profitant de ton statut.
C'est la "secte XL" ou bien? tu la vend très mal en tout cas :roll:
Ta solution, en passant ne marche pas, désolé, un premier test "1206" et la liste reste vierge, une recherche "0603" idem, pourquoi?
parce que t'as oublié de préciser au débutant que je suis qu'il fallait formater la colonne A en texte pour garder le "0" du début.
et pleins d'autres incohérence, bref , très loin de ce que je voulais.
Une quinzaine de personne doit utiliser cette outils, personne personne personne ne doit pouvoir utiliser le fichier et ses données.
Seul l'USF sera en avant, à la limite, la feuille sera minimisé et/ou invisible.
Le pourquoi de l'outil? tu es resté bloqué sur le terme de 'filtre", il y a malheureusement plusieurs personnes qui créent des nouveaux
composants, et la plupart du temps des doublons.
Je souhaiterai qu'il sachent en 2 - 3 clics si leur besoin (le composant) existe dans la base, C'EST TOUT, c'est plutôt simple comme demande,
si la solution ne l'est pas , bah je passerai à autre chose, voilà tout.
J'ai malgré tout assez d'éléments pour sortir quelque chose (même si c'est une usine à gaz, dsl) mais ça devrait marcher.
Sinon, on reviendra au bon vieux ctrl-F non?
Merci fraflt69 et aux autres qui avaient consacré un peu de votre temps et cela sans préjugés.
Bonne fin de soirée, le noob va se coucher:P
Ma grand-mère disait: Fais du bien à un vilain, il te ch**** dans la main.
Ma solution fonctionne avec 1206, ne t'en déplaise. Serais-tu nul au point de ne pas savoir la tester?
Pièce jointe 607044
Elle n'aurait pas fonctionné avec 0603, mais tu as trouvé toi-même comment corriger cela côté Excel => de quoi te plains-tu? Tu as gagné en autonomie plutôt que de dépendre d'une solution à coup de dictionary que tu ne comprends pas et que tu ne maîtrises pas. Mais suis-je bête, tu es probablement une de ces personnes qui veut du tout cuit gratuit et qui se permet de râler sur un mec qui prend du temps pour lui répondre... On croit rêver. Sur un forum, on n'est pas là pour servir le truc tout beau tout nickel ni pour envisager TOUS les cas de figure (ça c'est le rôle de l'utilisateur). Si tu souhaites un truc tout beau tout nickel, tu t'adresses à un spécialiste qui t'enverra une facture toute belle toute nickel.
Ma solution fait PILE POIL ce que tu demandes! C'est plutôt simple comme solution, non? Et si je te l'ai proposée, c'est parce que tu es RH et pas programmeur (ce n'est pas une injure ni une condescendance) et que ton pseudo (que TU as choisi et dont TU as parlé le premier) me fait penser qu'une solution Excel est meilleure qu'une solution VBA. Ma solution en VBA "pour Excel"
- fait 10 lignes de code;
- s'appuie largement sur ce qu'on ferait à la main, le seul truc en VBA là-dedans est la boucle;
- permet une modification et une adaptation du filtre sans toucher au code.
A contrario, "ta" solution pêchée sur le net et à laquelle tu ne comprends rien
- fait +/- 70 lignes;
- est mal codée;
- utilise des variables publiques;
- utilise un Exit Sub;
- code tout dans la proc événementielle alors que c'est une mauvaise pratique;
- utilise un dictionary (tu sais ce que c'est? Ce n'est même pas du VBA);
- utilise un tableau en VBA à deux dimensions (tu sais manipuler?);
- utilise deux boucles imbriquées (Tu connais?);
- n'utilise pas la déclaration explicite des variables, ce qui risque fort de te jouer des tours.
Tu sauras maintenir cette solution "VBA" et la faire évoluer? J'en doute fortement... après, quand je vois une cochonnerie pareille, je comprends que certains programmeurs disent que "VBA, c'est de la merde, c'est du langage d'amateur"... Quelle misère.
Il n'y a pas de honte à ne pas connaître et à être nul en Excel, pour reprendre TON pseudo, mai s'entêter dans une solution non maîtrisée me semble déraisonnable.
Tu parles de pédagogie? Ah oui c'est vrai, j'oubliais que la pédagogie, ça consistait à caresser les gens dans le sens du poil et à les encourager à poursuivre avec leurs solutions foireuses. Et lorsque je parlais de "programmeurs", je ne parlais pas de toi, mais d'une façon générale, pour insister sur le fait que justement, parce que tu n'es pas programmeur, tu as intérêt selon moi à te tourner vers des solutions "Excel" qui seront plus faciles à adapter et à maintenir.
Ici, tu n'utilises pas les tableaux structurés alors que ça s'impose. C'est l'outil de stockage de données dans Excel et il est aberrant de s'en priver. Il serait donc pour moi aberrant de ne pas signaler qu'il faut utiliser les outils adaptés à ton besoin. Manifestement, tu préfères rester dans ton ignorance crasse de l'outil et dans la nullité de tes connaissances en Excel (Depuis tes questions de 2012 sur le forum, tu n'as pas progressé, manifestement, et en 2015, tu cherchais déjà une solution genre usf, en vb.net). Perso, ça ne m'empêchera pas de dormir. Bon amusement avec ton petit outil utilisable par 15 personnes.
Pour le reste de ta diatribe, je n'ai vraiment pas de temps à perdre avec quelqu'un comme toi. Je continuerai à proposer mes solutions parce que je les pense meilleures, et comme dit dans ma signature, elles ne sont pas meilleures parce qu'elles sont les miennes, elles sont les miennes parce qu'elles sont meilleures.
Continue à bien t'amuser sur les forums avec ton beau code tout beau qui ne marche pas, même si je te donne raison de vouloir en rester là. Même en VBA pur, 25 messages pour un problème aussi trivial, il y a vraiment de l'abus. Si tu préfères des solutions qui ne fonctionnent pas et auxquelles tu ne comprends rien, que tu ne maîtrises pas et que tu ne sauras pas faire évoluer, mais qui "collent" à ton code plutôt qu'une solution fonctionnelle mais qui gratte un peu ton ego, grand bien te fasse.
Au passage, un RH qui, de son propre aveu est nul en Excel, qui doit résoudre les problèmes Excel pour 15 personnes dans sa boite, ça me laisse pantois. La prochaine fois que je vois que tu poses une question, je m'abstiendrai et je te laisserai mariner dans ton jus.
Bonjour NulenExcel77
j'ai fait une régression en introduisant une nouvelle fonction pour gérer les recherches avec des mots inversés: méa culpa
J'aurais du mieux tester.
Plutôt que de critiquer du code, il faut voir le besoin utilisateur, et pour produire un code robuste je dirai que le demandeur devrait l'assortir d'un plan de test et d'un jeu de tests le plus complet. C'est ce qu'un service informatique est en droit de demander d'une spécification.
En conclusion, ce n'est pas le moment de baisser les bras, persévérons sauf si une recherche par CTRL+F suffit
hello
Pierre, je ne voudrais pas remuer le couteau dans la plaie mais chez moi cela ne fonctionne pas non plus :aie::
Pièce jointe 607082
mode opératoire : j'ouvre ton classeur, je clique sur le bouton USF, je rentre 1206 dans la textbox et je tape {ENTER} . Version d'Excel : Famille et Etudiants 2019.
Quand cela ne fonctionne pas chez quelqu'un il faut se demander pourquoi par exemple :
1 - Mauvais mode opératoire ?
2 - Version d'Excel différente ?
3 - Configuration différente (options, addons etc...) ?
En ce qui concerne la demande de NulEnExcel :
on pourrait utiliser un autre classeur pour accéder au classeur avec les données par relation (connexion) . Dans ce cas on pourrait utiliser un filtre ou un filtre avancé mais aussi une textbox sans être directement dans le fichier de données .Citation:
Une quinzaine de personne doit utiliser cette outils, personne personne personne ne doit pouvoir utiliser le fichier et ses données.
Seul l'USF sera en avant, à la limite, la feuille sera minimisé et/ou invisible.
Ami calmant, J.P
fraflt,
Lorsque je critique du code, je ne critique pas le programmeur, je critique juste le code.
Je pense que lorsque l'on donne une solution, on doit l'adapter au besoin du demandeur, mais aussi à son niveau, et il n'y a aucune critique ou aucune condescendance de ma part dans cette phrase. Je préfère donner au demandeur une solution qu'il maîtrise ou à tout le moins qu'il peut comprendre qu'un truc purement informatique qui le rend dépendant à la moindre modification du fichier.
Par contre, je pense que, même si la demande initiale n'est pas complètement formulée et est affinée par la suite, il y a des bonnes pratiques qui, elles, ne dépendent pas de lacunes dans le cahier des charges. Les variables publiques, le Exit Sub, l'absence de "Option Explicit" et le codage applicatif dans la proc évènementielle ne font pas partie de mes bonnes pratiques. Une solution "pur VBA" alors qu'on est en Excel ne fait pas non plus partie de mes bonnes pratiques, le dictionnaire que l'on jette en pâture en late binding à des gens qui ne le maîtrisent pas ne sont pas non plus une bonne pratique pédagogique (puisque le môssieur il parle de pédagogie).
Je pense qu'il est cohérent de le dire sur un forum technique. Si quelqu'un n'est pas d'accord avec moi et veut argumenter, c'est tout bénéf pour le lecteur (le demandeur ou n'importe quel lecteur de la discussion).
Il est hélas plus facile pour le demandeur de dénigrer une solution qui fonctionne (et qui a été donnée depuis longtemps) sur le simple fait qu'un 0 se perd à gauche que d'essayer de comprendre que cette solution lui a été proposée pour lui simplifier la vie.
La solution par filtre avancé que je propose pourrait même se passer de userform et autre truc VBA, le demandeur pouvant simplement saisir les mots dans une cellule Excel, séparés par des virgules comme dans la demande initiale, les données apparaissant alors sous les intitulés dans une feuille Excel. Ca permettra tout autant les verrouillages sur la DB et ça permettra probablement une meilleure lisibilité du résultat que dans un listbox.
Pièce jointe 607084Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 Sub Recherche() Dim Words Dim i As Long If Not Range("t_Mots").ListObject.DataBodyRange Is Nothing Then Range("t_Mots").ListObject.DataBodyRange.Delete Words = Split(Range("recherche").Value, ",") If UBound(Words) <> -1 Then For i = 0 To UBound(Words) Range("t_mots")(i + 1).Value = Words(i) Next End If Feuil1.Range("m1:T" & Feuil1.Range("m1048576").End(xlUp).Row).AdvancedFilter xlFilterCopy, Range("Critère"), Range("résultat") End Sub
Salut JP
si ça ne fonctionne pas chez 2 personnes, je veux bien investiguer. Je ne le fais pas si ça ne fonctionne chez une personne qui m'engueule.
On pourrait même probablement utiliser Power Query avec une requête sur le classeur source et la saisie des mots-clé dans une cellule. Du coup, il n'y aurait plus de VBA. En fait, comme souvent, si on avait eu la demande mieux formulée au départ, on aurait probablement moins pataugé.
Merci JP :plusser:
Comme ça ne fonctionnait pas non plus chez toi, j'ai investigué ;)
Pour le 1206 qui ne va pas, le problème vient peut-être de ma version 365... Mea culpa, en 365, on n'a plus besoin de valider en matricielle...
En "non 365", il faut aller valider la formule de critère en matricielle (CTRL+SHIFT+ENTER) et voir si ça fonctionne. Si quelqu'un veut bien tester ^^
Au passage, je remarque que dans la colonne a_Description, il y a systématiquement un espace à la fin de la chaine. Ce serait bien que les données soient nettoyées avant utilisation.
Je crois bien qu'avec ma version d'Excel la formule matricielle est déjà validée :
Pièce jointe 607090
Par contre ce qui est louche c'est que quand je fais la recherche j'obtiens la ligne d'entête :
Pièce jointe 607091
Oui, ta formule est matricielle.
Il faudrait essayer en mettant la ligne qui contient 1206 en première ligne des données et voir si la formule passe à VRAI.
A priori, je n'utilise rien de spécifique à la 365, vu le tag de version de NulEnExcel77, et le filtre avancé n'a pas été modifié par les concepteurs d'Excel depuis des années.
Peut-être aussi mettre la colonne du tableau t_Mots en texte, même si, à première vue, je pense que cela ne doit rien changer.
Vu les hésitations sur les espaces, il faudrait peut-être modifier la ligne dans la boucle For pour supprimer les espaces éventuels de la saisie, parce que si l'utilisateur saisit un espace après la virgule, par exemple, ça va moins bien marcher => Range("t_mots")(i + 1).Value = Trim(Words(i))
Effectivement si je remplace le 0603 par un 1206 sur la première ligne des données critère passe à vrai mais j'obtiens en résultat toutes les lignes :
Pièce jointe 607094
Pièce jointe 607096
Pièce jointe 607097
Faudra investiguer, parce qu'en 365, ça fonctionne...
Je suppose que tu valides la formule en simple formule (F2 puis ENTER), ça ne fonctionne pas mieux ^^
En simple formule cela a l'air de fonctionner :
Pièce jointe 607099
[EDIT] oops cela ne fonctionne que pour 1206 ( en fait pas pour tous les nombres qui commencent par 0 (0603 0805)
Comme le disait NulEnExcel :
Citation:
Il fallait formater la colonne A en texte pour garder le "0" du début.
Et avec le tableau t_mots passé au format texte, tout fonctionne?