Bonjour NulEnExcel77
Je me demande s'il ne serait pas possible d'exploiter l'idée de Boisgontier Jacques en faisant une saisie avec completion comme il indique dans la discussion suivante : https://www.developpez.net/forums/d1...bobox-activex/
Cela ajoute une combobox à la textbox
Cela ne permet pas cependant d'accélérer la saisie sur un mot dans un ordre différent.
A toutes fins utiles, pour simplifier l'interface utilisateur
Bonjour à tous
Bravo jurassic pork, ça marche bien chez moi.
fraflt69, j'ai suivi le lien, ça m’agace un peu, j'aurai pas dû ouvrir une discussion inutile du coup, mes mots clés étaient foireux :/
Mon outil est opérationnel en l'état pour diffusion, je réfléchi peut être à une optimisation, utiliser le double clic pour un résultat ou un autre,
si vous avez une idée
Comme tu dis, il est intéressant de se pencher sur l'idée de Boisgontier, moi j'adore ça, il est bon d'avoir plusieurs solution sous le coude.
j'y retourne
A plus les pros
bonne fin de journée
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.
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.
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Bonsoir,
Je pense que l'on va en rester là sur le sujet, 26 messages, c'est apparemment trop long ....
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
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![]()
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?
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.
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
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:
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 .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
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é.
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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![]()
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Merci JP
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.
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
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))
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
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 ^^
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Et avec le tableau t_mots passé au format texte, tout fonctionne?
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Le critère à FAUX, c'est le fonctionnement normal du filtre avancé, parce que dans cette cellule-là, ce qui est évalué, c'est la première ligne de données. Si cette ligne ne valide pas le critère, alors la valeur est à FAUX. Mais le mécanisme du filtre avancé fait qu'Excel évalue cette formule pour chaque ligne de la table de données, d'où l'importance des références relatives et absolues.
Pour ce qui est du problème de la recherche sur le premier mot, je pense me souvenir qu'en effet, Excel 365 ne gère pas les matricielles comme les autres versions et donc, qu'un problème pourrait survenir.
Je vais investiguer de ce côté. Sur ma version en tout cas, la recherche multi-critères fonctionne:
![]()
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Finalement je me demande si le problème rencontré avec la formule matricielle n' est pas lié à cela :
avant Excel 365 cela n'existait pas : The perpetual Excel 2019 license will not have dynamic arrays included.La formule matricielle dynamique :
Présentement et avec la dernière mise à jour d’Excel 365, l'utilisation de la formule matricielle est devenue très facile :
Renvoi de plusieurs résultats
- Sélectionnez uniquement la cellule C2.
- Insérez la formule suivante : =A2:A6*B2:B6
- Tapez seulement Entrée pour valider votre formule matricielle. Excel s’occupera du reste.
Partager