Creer un moteur de recherche pour plusieurs fichiers xls

Bonjour à tous, j'ai beau rechercher dans le forum mais je n'ai pas trouvé ma solution d'autant plus que je suis amateur du VBA...

Mon soucis est le suivant :

J'ai 2 fichiers xlsm contenant tous environ une 40 onglets pour environ 7000 lignes. Chaque onglet à la même trame hormis la première qui est un sommaire des onglets. Au pire et si cela permet de simplifier le processus, je peux regrouper les 2 fichiers en un.

Dans chaque onglet, j'ai plusieurs colonnes qui me permette de lister des documents (voir impression écran des données) dont une qui est un lien hypertexte pointant sur le document.

image

Mon besoin étant d'avoir un autre fichier qui s'appellerait "module de recherche documentaire" (cela afin que personnes ne puissent modifier le fichier listing) permettant de lancer une recherche type google recherchant sur les colonnes de A à J sur tous les onglets un mot ou plusieurs mots et indiquant en dessous les résultats sur la même forme que le tableau source tous en gardant les liens interactifs. En espérant avoir été pas trop confus.

Par exemple ;

Mot recherche ; daikin

Résultat ; les 3 premières lignes

puis je complète cette recherche ; daikin mural

Résultat ; Uniquement la 2ème

En vous remerciant

Bonjour,

Voici un exemple de solution avec du Sql (zip avec 2 fichiers à dézipper/coller dans un nouveau dossier de son Pc).

Ici un (seul) fichier "Nccorroy_Base.xlsm" à lire avec 3 onglets de données (fictives)

A noter : l'entête "Niv." est modifiée en "Niv" (sans point) pour les besoins du Sql

Et un fichier de lecture "Nccorroy_Lecture.xlsm" avec un Textbox et un bouton de recherche.

Le nom du fichier à lire est en B1

La recherche se fait sur l'ensemble des données textuelles (et non sur l'année pour l'instant) et sur les 3 onglets listés dans le code (on pourrait les lister ailleurs ou autrement).

La recherche se fait sur un ou plusieurs mots d'affilés ou une partie de mot. Par exemple, et avec cet exemple la recherche sur "Lo" renvoie 6 lignes contenant "Lo"

Le tout peut être largement modifié et amélioré (recherche sur l'année, recherche sur mots non contigus, ...).

Pierre

Bonjour, merci pour votre aide.

Par contre, j'ai les soucis suivant quand j'utilise votre fichier pour faire la recherche dans le mien

  • Mon fichier contenant les données est aussi composé de plusieurs macro ce qui fait que lors du lancement du votre, je dois activer les autorisations dans xls puis relancer votre fichier car celui-ci ne s'est pas ouvert. Y a t'il une possibilité d'automatiser cela? Si non, je verrais pour créer un autre fichier ne contenant que les données
  • Tous mes onglets ont des noms spécifiques ce qui fait que j'ai un message d'erreur. En fait sur la quarantaine d'onglet que j'ai, seul l'onglet sommaire et essai ne sont pas à lire.
  • Enfin et je ne sais pas si cela sera un problème, mais les onglets seront à termes verrouillés afin d'éviter des modifications par les utilisateurs.

Cordialement

Re

Ok, même pas peur.

Le fichier précédent n'était qu'une démo vite fait donc non prévu pour d'autre fichier que celui de démo.

Voici une version "b" plus complète :

* lecture de 2 fichiers de données dont les noms sont à saisir en B1 et B2

(on part de l'hypothèse où les 2 fichiers de données + le fichier de lecture sont dans un seul et même dossier, mais modif possible si ce n'est pas le cas dans la vraie vie)

* ce nouveau fichier liste tout seul le nom des onglets des 2 fichiers (pas besoin de les lister "à la main" qqpart)

* la recherche se fait sur 2 critères : l'année + mot(s)ou parties de mot(s) à trouver, et ici les mots peuvent ne pas être contigus.

NB : ici pour cet autre exemple le 2ème fichier de données contient du code (qui ne fait pas grand chose, mais qui le fait parfaitement) et les onglets sont verrouillés par un mot de passe (aaa) sans que ça bloque la recherche.

Les onglets "Sommaire" et "Essai" ne sont pas lus.

Le champ "Niv." est mis de côté pour l'instant (pour vous éviter de renommer l'ensemble des entêtes de vos "vrais" onglets

Enfin dernière remarque, le Sql ne sait pas récupérer les liens hypertextes . Mais on pourra faire autrement probablement.

Pierre

Re,

J'ai mis votre fichier dans mon répertoire mais cela indique qu'il y a un soucis mais je n'arrive à pas comprendre. J'avais une autre erreur mais j'ai trouvé la solution (typo des onglets différentes)

je vous joins l'essai que j'ai fait avec une copie de mon fichier.

Nicolas

Ok, rien de grave mais un peu de nettoyage à faire dans les fichiers "de données" :

* onglet de Synthèse à exclure de la recherche (modifié dans le code)

* les onglets à exclure sont en majuscules (modifié dans le code)

* les noms des onglets utilisent des parenthèses et des espaces => le Sql n'aime pas.

* les entêtes utilisent des points => le Sql n'aime pas.

Alors voici une version 'c' avec des corrections de code et un fichier 'Tour W - Classeur Preneurs essais_modifié.xlsm' avec des données issues de l'original (3 onglets seulement pour la démo) :

* Les entêtes ont été purgées des points 'Niv' et 'Num Pièce' au lieu de 'Niv.' et 'Num. Pièce'

* Les noms des onglets ont été purgés des () et espaces : 'ADEVIM_Société_Générale' au lieu de 'ADEVIM (Société Générale)'

A ce prix là, ça fonctionne ... sur mon PC ...

Pierre

Franchement c'est super, cela fonctionne même avec les protections sur les onglets.

Par contre, je ne comprends pas il renvoi des erreurs qui doivent être encore des caractères non lu, mais j'arrive pas à trouver lesquels. Si vous pouvez m'aiguiller à les trouver.

Aussi comment peut on récupérer le lien hypertexte car c'est la finalité pour retrouver le document correspondant.

Merci encore pour votre aide

j'ai oublié, le code est 1612 au cas où ;)

Nicolas

Détail réglé en version "d", nb : les onglets ainsi sont parfaitement renommés.

Pour les liens, où sont stockés les pdf? dans un même dossier? dans des dossiers divers? A quel endroit par rapport aux 2 fichiers "de données"?

(la suite demain ...)

Bonne soirée

Pierre

Bonjour Pierre, les fichiers sont stockés dans les répertoires IMMEUBLE & PRENEURS. Les fichiers xls seront positionnés au même niveau.

image

Nicolas

Bonjour Nicolas,

Ok alors c'est simple. Voici une version "e" :

* j'ai supposé que les noms des fichiers pdf indiqués en colonne J correspondaient pile-poil aux vrais noms des pdf, sans l'extension.

* le principe est la création du lien après récup des info.

* pour ne pas ralentir le processus, cette création ne se fait que s'il y a moins de 5 lignes trouvées. Cette limite peut être modifiée dans le code : Public Const Limite = 5 au début du module "Liens"

* quand cette limite est ok, le code recherche le pdf dans l'ensemble des sous-dossiers et des sous-sous-dossiers contenus dans le répertoire courant et s'il le trouve, le lien est créé (peu importe le nom des sous-dossiers et peu importe la profondeur du fichier pdf dans l'arborescence).

Avec mes tests (et mes données fictives de test) ça fonctionne sur mon PC, à voir "en vrai" ...

(et toujours pareil : mettre à jour le nom des fichiers en B1 et B2)

Pierre

Merci Pierre,

Cela fonctionne au poil, j'ai augmenté le nombre de résultat à 15 et cela est juste un poil plus long.

Par contre et j'abuse mais j'avais aussi eu le soucis lors de cette création des liens en VBA dans mes fichiers source, à savoir que parfois le nom de fichier recherché n'est pas un fichier mais un répertoire. Peut on implémenter cela dans le code?

Par avance

Nicolas

Ok, parfait si c'est bon, et une version "f" avec création d'un lien vers un dossier si le pdf n'existe pas (si l'info en J est bien un nom de sous-dossier existant).

Pierre

Rechercher des sujets similaires à "creer moteur recherche fichiers xls"