Code VBA - Outil de recherche personnel

Bonjour,

A l'exemple du fichier ci-joint, j'ai un fichier comportant une dizaine de feuilles avec des centaines de noms par feuille.

J'aurais voulu créer un outil de recherche particulier répondant aux exigences suivantes :

A) Recherche par une partie du nom ou le nom complet ET/OU par une partie du prénom ou le prénom complet OU B) recherche par la date de naissance.

Si l'un des critères de recherche est trouvé - par exemple en recherchant avec le nom uniquement - il faudrait que la cellule concernée soit visible à l'écran. Si la cellule trouvée ne convient pas, il faudrait pouvoir soit continuer la recherche (donc le formulaire doit rester ouvert et se déplacer sur la feuille active ?) soit modifier les critères de recherche afin de recommencer la recherche depuis le début (**).

Si les critères de recherche sont modifiés, il faudrait que les premiers critères inscrits soient toujours à disposition sur le formulaire (par exemple afin de pouvoir modifier le prénom sans modifier le nom).

L'idéal serait que la recherche se fasse tout d'abord sur la feuille de l'année en cours, puis sur l'année précédente, puis sur la feuille de deux ans, puis trois ans auparavant, etc. (** donc si l'on modifie les critères de recherche en cours de route et que la recherche redémarre au début, il faudrait que ça reprenne à la feuille de l'année en cours).

Est-il possible de déjà prévoir l'archivage de l'année en cours en fin d'année et la préparation automatique d'une feuille pour l'année à venir ? Je pense plus particulièrement à créer une nouvelle feuille renommée selon l'année ainsi qu'aux boutons qu'il faudrait déplacer sur cette feuille.

J'ai déjà essayé de préparer un UserForm et quelques rares codes, mais malheureusement j'ai été très vite bloqué.

A vous relire.

Bonsoir à tous,

Comme je recherche toujours la simplicité alliée à l'efficacité, je te propose ceci:

Une seule base pour tout, (j'ai ajouté en dernier une colonne "Année")

pas besoin de trier

à lire le commentaire "Aide"

ceci n'est qu'une ébauche (principe), mais peut être complété et amendé.

Je ne connais pas de moteur de recherche + efficace,

(3 clics et tu as le résultat)

à toi de voir !

Amicalement

Claude

535yvouille-filtre.xlsm (22.73 Ko)

Bonjour,

Regarde ce qu'on peut faire, pour la recherche, via un UserForm

Bonne journée

Bonjour et merci à tous deux pour vos réponses.

Claude, ton idée est excellente. Peut-être bien qu'en définitive, on va utiliser cette solution. Je vais faire des essais avec mes données réelles et te recontacterai si nécessaire.

Cousinhub, ta solution s'approche plus de ma demande initiale et ça m'intéresserait quand même de creuser également de ce coté-là. Serais-tu aussi d'accord de continuer à travailler sur ton code ? Si oui, voici mes premières remarques :

Comme on ne connait pas toujours l'orthographe des noms, j'aurais été intéressé à ce que tous les noms commençant pas les premières lettres inscrites soient visibles. Est-ce possible ? Par exemple, si j'inscris L dans la case "Nom", le premier nom trouvé apparait et je ne peux - pour l'instant - pas modifier les dernières lettres proposées d'office.

Ne serait-il pas possible de chercher avec "un bout du nom" et "un bout du prénom" ? Pour l'instant, si on inscrit un prénom, le nom disparaît. D'une certaine manière, je voudrais pouvoir chercher avec des bouts d'informations, à l'instar de la solution proposée par Claude.

Une recherche par date de naissance n'est pour l'instant pas possible.

A te relire.

Bonjour,

Avant d'aller plus loin, regarde une idée en cherchant uniquement sur le nom et une partie du nom.

Amicalement

Salut Dan,

Merci à toi aussi pour ta proposition. Celle-ci me semble un peu moins intéressante que celle de Cousinhub - si l'on ne tient compte que des solutions par codes - car on n'a pas une vue d'ensemble des données trouvées comme ça pourra vraisemblablement le cas avec la UserForm proposée par Cousinhub (et, sans code, comme on a une vue d'ensemble avec la solution de Claude).

Ainsi, si l'on ne sait pas si le nom s'écrit SCHMID, SCHMIT ou SCHMIDT, il est intéressant de voir quels sont tous les résultats trouvés avec SCHMI pour le nom et par exemple F pour le prénom.

Cordialement.

Bonjour à tous,

Yvouille,

Un UserForm, c'est bien joli, çà fait "Pro", mais l'efficacité ?

fait le calcul du nombre de clics nécessaires avec !

Je ne sais peut-être pas bien m'en servir et c'est pourquoi tu n'en verras pas dans mes appli.

(preuve qu'on peut s'en passé)

Maintenant il faudrait savoir comment orienter le moteur de recherche (critères)

qu'est-ce que tu connais au départ ? Quel(s) élément(s) ?

Je maintiens qu'une seule BDD sera + facile à gérer,

la colonne "Année" remplaçant avantageusement les onglets.

"C'est vous qui voyez" comme dirait l'autre !

Amicalement

Claude

Re-bonjour, tout le monde

Bon, je ne voulais plus intervenir sur ce fil

Peut-être bien qu'en définitive, on va utiliser cette solution

Mais je ne peux laisser passer :

Un UserForm, c'est bien joli, çà fait "Pro", mais l'efficacité ?

Effectivement....Quoique....

@ +

Salut Claude,

Je t'avais dit que ton fichier - sans aucune modification, tel que tu me l'as présenté - m'intéressait beaucoup et que c'est très certainement celui que je vais proposer à mes collègues. Je ne comprends alors pas que tu insinues que j'ai tort de préférer une solution avec UserForm. Dans ma réponse à Dan, j'indique d'ailleurs que son code devrait proposer une solution telle que la tienne.

Yvouille a écrit :

Salut Dan,

Merci à toi aussi pour ta proposition. Celle-ci me semble un peu moins intéressante que celle de Cousinhub - si l'on ne tient compte que des solutions par codes - car on n'a pas une vue d'ensemble des données trouvées comme ça pourra vraisemblablement le cas avec la UserForm proposée par Cousinhub (et, sans code, comme on a une vue d'ensemble avec la solution de Claude).

Salut Cousinhub,

Yvouille a écrit :

... ta solution s'approche plus de ma demande initiale et ça m'intéresserait quand même de creuser également de ce coté-là. Serais-tu aussi d'accord de continuer à travailler sur ton code ? Si oui, voici mes premières remarques :

Je t'avais écrit cela car ta solution est aussi très intéressante et qu'elle pourrait servir dans d'autres cas (et à d'autres utilisateurs du Forum ?). Vas-tu quand même voir si tu peux améliorer ton code selon mes informations ?

Cordialement à vous tous

Bonjour Yvouille

Bonjour à tous

Une autre méthode de recherche par userform

pour l'instant il ne permet pas de modifier mais juste de visualiser

ça peut toujours servir

Salut Bob,

Ta solution est également très intéressante, mais elle a aussi ses inconvénients. Par exemple ton code recherche avec un groupe de lettre placé n'importe ou dans le nom ou le prénom. Ainsi si je cherche avec VI, le nom LAVILLE est trouvé.

Dans tous les cas, il y a une solution qui me convient sans UserForm et je n'aurais été intéressé à savoir s'il existait une solution - analogue à celle de Claude - avec UserForm uniquement par curiosité et par intérêt personnel ; alors je n'ose plus demander à qui que se soit de persister à améliorer son travail dans ces conditions. A toi de me dire si tu veux aller plus loin.

Bonnes salutations.

Bonsoir Yvouille

Dans l'exemple que tu donnes avec VI, c'est tout simplement le but recherché.

Mais il est possible de rechercher en partant des premières lettres en supprimant les * placées juste après like dans

la macro recherche sur les noms et prénoms par exemple

ainsi:

        If C.Text Like "*" & UserForm1.TextBox1.Text & "*" And C.Offset(0, 1) Like "*" & UserForm1.TextBox2.Text & "*" And C.Offset(0, 2) Like "*" & UserForm1.TextBox3.Text & "*" _
            And C.Offset(0, 3) Like "*" & UserForm1.TextBox4.Text & "*" And C.Offset(0, 4) Like "*" & UserForm1.TextBox5.Text & "*" And C.Offset(0, 5) Like "*" & UserForm1.TextBox6.Text & "*" Then

devient:

        If C.Text Like UserForm1.TextBox1.Text & "*" And C.Offset(0, 1) Like  UserForm1.TextBox2.Text & "*" And C.Offset(0, 2) Like "*" & UserForm1.TextBox3.Text & "*" _
            And C.Offset(0, 3) Like "*" & UserForm1.TextBox4.Text & "*" And C.Offset(0, 4) Like "*" & UserForm1.TextBox5.Text & "*" And C.Offset(0, 5) Like "*" & UserForm1.TextBox6.Text & "*" Then

a plus

Salut Bob,

Je te remercie infiniment pour ta réponse. Je pense que je vais avoir besoin de quelque temps afin de digérer ton code qui est super. Ta solution est vraiment également très intéressante.

Je clos ce fil pour l'instant et me permettrai de revenir sur le Forum plus tard si nécessaire.

Merci encore à tous ceux qui ont bien voulu m'aider sur ce coup.

Bonne fin de soirée.

Salut Claude,

J'utilise finalement ta proposition depuis quelques temps. Ca fonctionne assez bien au niveau de la recherche par nom, par prénom ; je peux même chercher en remplaçant certains caractères par une étoile, c'est génial.

J'ai par contre des soucis à deux niveaux.

1) Si j'efface les critères de recherche, ça prend pas mal de temps à présenter à nouveau la liste complète [j'ai modifié ton code Range("a5:g10000").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= Range("a3:g4"), Unique:=False de manière à couvrir mes besoins potentiels futurs] et

2) je ne peux pas effectuer de recherches par la date (tu as en fait placé une option au niveau de la date - de manière à pouvoir exporter les données - dont je n'ai pas l'utilité. Nous devons uniquement trouver si une personne figure sur la liste ou non et rien d'autre).

Peux-tu encore m'aider à résoudre ces deux problèmes ?

A te relire.

Bonsoir,

Ton lien ne passe pas !

essaye de joindre par la voie classique un fichier raccourci

Amicalement

Claude

Effectivement qu'il y a un problème.

J'ai essayé de zippé un fichier 2007 de 206 Ko et ça le réduisait à 201 Ko, d'où mon premier essai par C-joint (pourquoi est-il illisible, ??????).

Maintenant j'ai essayé d'enregistrer mon fichier au format 2003, mais il a ainsi 460 Ko ou - après avoir été zippé - 151 Ko. Ca ne passe donc toujours pas par la voie normale.

Je fais donc un deuxième essai de ce nouveau fichier 2003 par C-joint ; par l'aperçu, ça semble en ordre.

Je ne voudrais pas réduire ce fichier, puisque justement l'un de mes problèmes est que j'ai tout d'abord présenté un fichier trop réduit

Merci pour ta réponse et à la prochaine.

Bonsoir,

fichier: https://www.excel-pratique.com/~bigfiles/doc/Yvouille_filtre_2.zip

J'ai nommé le tableau "Base",

si tu ajoute des lignes, clique le bouton "Initialise"

Pour l"effacement, c'est bizarre que çà mouline comme çà !

j'ai ajouter le bouton "Afficher tout" (plus rapide)

La colonne Date de naissance ne sert qu'après avoir mis tes critères

et à ne sélectionner que cette ligne.

Amicalement

Claude

Salut Claude,

Merci infiniment pour ton aide. Le retour à une liste complète est vraiment mieux ainsi.

Par contre, il serait vraiment intéressant que l'on puisse chercher parfois avec la date de naissance uniquement. N'y a-t-il vraiment pas de solution de ce coté-là ou me suis-je mal exprimé ?

Bonne fin de soirée.

EDIT : En faisant de nouveaux essais, je constate ces deux autres problèmes.

Si j'inscrits certains critères de recherche (uniquement sous "Prénom ????) un texte par défaut est parfois proposé, parfois non. Ainsi si j'inscrits Ag, le texte par défaut Agnès est parfois inscrit automatiquement. PLUS EMBETANT, si je tape Co, le texte par défaut est pratiquement toujours Colette et les Corinne, Coralie et autres Concetta passent à la trappe. Idem pour Fa(bian), Ga(ëlle), etc.

Si j'efface manuellement plusieurs champs de recherche, il ne se passe rien, ce n'est pas dérangeant (l'idéal étant que la liste s'ouvre à nouveau) par contre, si j'efface manuellement un seul champ de recherche, ça mouline quelques (trop longues) secondes.

Y a-t-il un moyen d'éviter également cela ?

Bonjour,

https://www.excel-pratique.com/~bigfiles/doc/Yvouille_filtre_3.zip

Si ti n'utilise pas le filtre "années de naissance" efface C1:C2

Si j'inscrits certains critères de recherche (uniquement sous "Prénom ????) un texte par défaut est parfois proposé, parfois non.

tu dois avoir quelque part une option de saisie automatique ou semi-auto ? (à décocher)

Amicalement

Claude

Salut Claude,

Merci pour ta nouvelle réponse. Malheureusement ça ne correspond pas tout à fait à ce que j'aurais désiré.

Effectivement que si je décoche l'option de saisie semi-automatique, mon problème à ce niveau est résolu. Cependant - si j'ai bien compris - plus aucun autre document n'a cette option, ce que je ne voudrais pas. Une solution serait de désactiver cette option lors de l'ouverture de ce fichier et de la réactiver lors de la fermeture, mais les autres fichiers ouverts en même temps n'auraient également plus cette option. Comme plusieurs utilisateurs sont appelés à consulter ce fichier - parallèlement à d'autres fichiers - ça peut-être embêtant.

Ce que je ne comprends quand-même pas, c'est pourquoi l'option de saisie semi-automatique est active dans la colonne "Prénom" et non pas dans la colonne "Nom".

En ce qui concerne la date de naissance, j'aurais souhaité que je puisse rechercher - à l'instar des recherches par le nom ou le prénom - toutes les personnes nées à une date précise et ceci indépendamment des noms et prénoms. Les nouveaux critères de recherche que tu as placés en C1 et C2 ne résolvent donc pas le problème. Merci quand-même une fois de plus d'avoir tenté d'apporter une solution. As-tu encore l'envie d'en chercher une ou perds-tu courage ?

Bonne journée.

Rechercher des sujets similaires à "code vba outil recherche personnel"