Question très technique

Résolu
Bonjour,

Je vous expose ma situation, mes actions manuelles et mes souhaits d’automatisation. Sachant que je n’ai aucune expérience de développement quelconque, je n’ai aucune idée de la faisabilité technique de tout ou partie de ma demande.

Données :
- Des répertoires sur mon disque dur (il y en a plusieurs, mais si la solution technique cible nécessite qu’il n’y ait qu’un seul répertoire, c’est possible)
- Dans les répertoires, des documents au format WORD, PDF, RTF et PPT
- Il y a environ 3000 documents en base actuellement et en moyenne une cinquantaine de nouveaux par semaine

Mes tâches
- Faires des recherches de mots dans les documents (j’utilise la fonction « rechercher un mot dans le fichier » dans l’explorateur Windows XP)
- Je recherche un mot à la fois dans le répertoire « racine » (qui contient les sous-répertoires, contenant eux-mêmes les 3000 documents déjà évoqués)
- J’ai environ 150 mots à rechercher dans les documents
- Le résultat de la recherche me liste les fichiers dans lesquels se trouve le mot recherché
- En utilisant la fonction DOS qui me permet de transformer le résultat de la recherche en liste, j’exporte la liste dans EXCEL
- Le fichier EXCEL cible (exemple sur demande) me permet ensuite, grâce à la fonction filtre, de retrouver les fichiers correspondant à plusieurs mots parmi les 150
- Je ne sais jamais à l’avance quels groupes de mots je dois rechercher à un moment donné, c’est pourquoi j’utilise ce fichier Excel qui répertorie les 150 mots et me permet de filtrer à la demande

LE GROS PROBLEME C’EST QUE LA LISTE DE DOCUMENTS S’ENRICHIT TOUTES LES SEMAINES ET JE DOIS RECOMMENCER LA RECHERCHE SUR LES 150 MOTS CHAQUE SEMAINE SUR LES NOUVEAUX DOCUMENTS  C’EST TRES LONG !!!!

Besoin minimum
- A minima, j’aimerais pouvoir automatiser l’action de recherche
- Je ne sais pas ce qu’il est techniquement possible de faire (il y a peut-être déjà des outils répondant à cette demande), mais si je pouvais exécuter un programme qui déclenche la recherche d’un « mot » dans tous les fichiers du répertoire, ce serait déjà pas mal
- Si en plus ce programme me permet en un seul « clic » de rechercher les 150 mots (même si je dois laisser le PC tourner des heures), ce serait top !

Besoin idéal
- Un programme (ou script ou quoi que ce soit) qui exécute les actions suivantes :
o Lancer la recherche
o Transformer le résultat en fichier texte (ou mieux en fichier excel en mettant dans la colonne A la liste des fichiers trouvés et dans la colonne B un X ou 1 ou autre chose (la colonne B a pour titre le « mot » recherché))

Document Excel (sur demande) pour comprendre à quoi ressemble le fichier cible que je gère manuellement pour l’instant

Si quelqu’un à compris mon besoin (je ne sais pas si c’est super clair….) et si un semblant de solution me permettant de moins galérer existe, je suis preneur.

MERCI !!
Configuration: Windows XP
Internet Explorer 6.0

4 réponses

  1. Salut, désolé pour ma réaction tardive, mais je viens de découvrir ton message !
    C'est sympa d'avoir pris du temps pour tenter de résoudre mon problème, mais je me suis tourné vers une solution plus standard avec le moteur de recherche windows desktop et ça répond à mon besoin

    Je n'ai donc pas testé ta solution, mais je regarderais à l'occasion
    1. Bonsoir,

      Je présume que ce n'est plus d'actualité compte tenu du peu de réaction suscité par mon précédent message, mais dans le doute je poste quand même une version améliorée du batch précédent. Elle intègre entre autre la prise en compte des espaces pouvant apparaître dans les noms de fichier, des mot/critères de recherche. Elle édite un état statisique simple en fin de traitement. L'affichage à l'écran des cas d'égalité est maintenant optionnel.

          ECHO OFF
      :: ****************************************************************************
      rem    RECHERCHE DE FICHIERS CONTENANT AU MOINS UN CRITERE DE SELECTION
      rem ****************************************************************************
      
      rem ENVIRONNEMENT :
      rem 1) Il faut créer un fichier  (ici %nomF_CH%) contenant le ou les mot(s)
      rem     servant de critère de recherche (UN SEUL MOT/CRITERE par ligne).
      rem     Exemple de fichier %nomF_CH% :
      rem    (Il peut exister des espaces DANS un MOT/CRITERE.)
      rem mot1-recherché
      rem mot2 recherché   (correspond à UN MOT/CRITERE complet de recherche)
      rem mot3-re.......-......
      rem }mot4-re.......-...... (ignoré car précédé d'un "}")
      
      rem FONCTIONNEMENT :
      rem 2) Ensuite il faut ouvrir une invite de commandes et "se positionner" avec
      rem     la commande CD C:\.....\....\ sur le répertoire de travail contenant le
      rem     présent fichier (.bat).
      rem
      rem 3) Puis sur la ligne de commande taper le nom de ce fichier :
      rem     a) SEUL (sans paramètre): DANS CE CAS LA RECHERCHE DEBUTE A LA RACINE :
      rem        (nom-de-ce-fichier est équivalent à    nom-de-ce-fichier C:\)
      rem   OU
      rem     b) AVEC LE PARAMETRE SUIVANT : C:  DANS CE CAS LA RECHERCHE S'EFFECTUE
      rem        UNIQUEMENT SUR LE REPERTOIRE EN COURS :
      rem        nom-de-ce-fichier C:
      rem   OU
      rem     c) SUIVI DE TOUT OU PARTIE DU NOM D'UN CHEMIN LA RECHERCHE S'EFFECTUE
      rem        SUR LE REPERTOIRE NOMME :
      rem        nom-de-ce-fichier  C:\Documents and Settings\Christian\Mes documents\
      rem    suivant que l'on souhaite commencer la recherche depuis la racine du
      rem       disque (ici le disque C) ou pour tout un répertoire. Celui-ci peut
      rem       contenir des sous-répertoires (notion de répertoire générique)
      rem       Il n'est pas possible de tronquer un nom de dossier par rexemple :
      rem       nom-de-ce-fichier  C:\Documents and Set\   n'est pas permis.
      
      rem    Le traitement peut à tout moment être interrompu sans risque en pressant
      rem       les touches Ctrl+C.
      rem
      rem  4) Les résultats d'exécution se présentent sous la forme de 2 fichiers :
      rem     a) %nomF_OUT% contient la trace des égalités trouvées :
      rem     - le nom du fichier prospecté suivi d'un libellé,
      rem     - le répertoire et le chemin des fichiers présents sur le disque, pour
      rem     lesquels une correspondance a été trouvée avec l'un des mots/critères
      rem     présents dans le fichier %nomF_CH%.
      rem     Exemple de fichier %nomF_OUT% :
      rem     (optionnel visuel_ecran=1 l'équivalent du contenu de ce fichier peut
      rem     être visualisé à la console.)
      
      rem fichier cree par chlib Le 13/10/2008 a 12:41:27,37
      rem {.......................
      rem {.......................
      rem {0001-----------------------------------------------------------------------
      rem }a} nom1.ext (1iere. egalite trouvee: mot1-recherché)
      rem }b} C:\Documents and Settings\Christian\Mes documents\BATCH_files\
      rem }c} C:\Documents and Settings\Christian\Mes documents\BATCH_files\nom1.ext
      rem {---------------------------------------------------------------------------
      rem {0002-----------------------------------------------------------------------
      rem }a} nom2.ext (1iere. egalite trouvee: mot2 recherché)
      rem }b} C:\Documents and Settings\Christian\Mes documents\BATCH_files\
      rem }c} C:\Documents and Settings\Christian\Mes documents\BATCH_files\nom2.ext
      rem {---------------------------------------------------------------------------
      rem {0003-----------------------------------------------------------------------
      rem }a} nom2.ext (2eme. egalite trouvee: mot3-re.......-......)
      rem }b} C:\Documents and Settings\Christian\Mes documents\BATCH_files\
      rem }c} C:\Documents and Settings\Christian\Mes documents\BATCH_files\nom2.ext
      rem {---------------------------------------------------------------------------
      rem NB. Si, dans un même fichier plusieurs occurrences de MOTS/CRITERES appa-
      rem     raissent, ce fichier sera nommé (dans %nomF_OUT lignes a, b et c) pour
      rem     chaque égalité trouvée SAUF dans les cas où sur une MEME LIGNE du
      rem     fichier, existe plus d'une occurrence du MEME MOT/CRITERE. Dans ces cas
      rem     seul le 1er mot/critère est considéré, les autres sont ignorés et ne
      rem     génèrent pas de lignes dans le fichier %nomF_OUT.
      rem     Par contre, si plusieurs MOTS/CRITERES DIFFERENTS apparaissent
      rem     sur une MEME LIGNE d'un même fichier ils seront pris en compte.
      
      rem     b) %nomF_MATCH% contenant :
      rem     le nom et l'extension de chaque fichier pour lesquels une égalité au
      rem     moins a été trouvée. A l'inverse du fichier %nomF_OUT% chaque fichier
      rem     est nommé une seule fois quelques soit le nombre (> 0) de cas
      rem     d'égalités trouvés. Idem si deux fichiers apparaissent sous le même
      rem     nom dans deux répertoires différents.
      rem     Exemple de fichier %nomF_MATCH% :
      rem {fichier cree par chlib Le 13/10/2008 a 12:41:27,35
      rem {.......................
      rem {.......................
      rem nom1.ext
      rem nom2.ext   (2 égalités => n'apparaît qu'une seule fois dans ce fichier)
      rem {.......................
      rem {.......................
      
      rem ****************************************************************************
      
              SETLOCAL ENABLEdelayedExpansion
              SETLOCAL ENABLEextensions
              MODE     CON        COLS=150            LINES=2000
              CLS
      
      rem     répertoire de travail (contient notamment ce fichier.) :
              CD C:\Documents and Settings\Christian\Mes documents\BATCH_files
      
      
      rem ----------------------------------------------------------------------------
      rem                          SEQUENCE PRINCIPALE.
      rem ----------------------------------------------------------------------------
      
      
              CALL         :DEFINIT_VAR     %0
      
              IF  EXIST    "%nomF_OUT%" 	            ( ERASE   %nomF_OUT% )
              IF  EXIST    "%nomF_MATCH%" 	            ( ERASE   %nomF_MATCH% )
      
      rem     Séquence permettant de déterminer le type de traitement choisi.
              CALL         :TYP_TITRE_TRAIT %1 %2 %3 %4 %5 %6 %7 %8 %9
      
      rem     Contrôles de cohérence portant sur l'environnement.
              CALL         :CONTROLES !param_1!
              IF           "!indic_anom!"    ==    "1"    ( GOTO    :EOF )
      
      rem     Ecriture d'un message d'information concernant le traitement.
              CALL         :INFOS_TITRE
      
      rem   - BOUCLE PRINCIPALE de lectures des chemins d'accès.
      rem   - EXTRACTION (chemin accès) du nom et de l'extension du fichier en cours.
      rem   - RECHERCHE dans ce fichier en cours de la présence de 1 ou plusieurs
      rem       occurrences de chaque MOT/CRITERE présent dans le fichier nomF_CH
      
              FOR         /R   "%param_1%"               %%F IN  (*.*)            DO (
                 SET      /A   "nb_fichiers_accedes+=1"
                 SET      /A   "cpt_mots_trouves=0"
                 SET           "nom_ext=%%~nxF"
                 FOR      /F   "eol=} tokens=1* delims=" %%J IN  (%nomF_CH%)   DO (
                    FOR   /F   "tokens=1* delims="       %%K IN  (
                               ' TYPE "%%F"  ^| FIND /I "%%J" '  )         DO (
                      SET /A   "cpt_mots_trouves+=1"
                      SET      "nom_lib_rech=%%J"
                      CALL     :CRE_FICH_MATCH
                      CALL     :ECRITURE_MATCH          "%%F"     !nom_ext!    )  )  )
      
              IF   "%visuel_ecran%"          ==    "1"           (
                   CALL        :INFOS_TITRE                      )
                 
              CALL         :STAT_FIN
      
            	ENDLOCAL
            	
              GOTO                                                  :EOF
      
      rem -----------------FIN DE LA SEQUENCE PRINCIPALE
      
      rem ----------------------------------------------------------------------------
      
      
      rem     Définition et initialisation des variables utiles au traitement.
      :DEFINIT_VAR
      
              SET           "nom_pgm=%1"
              SET           "date_deb=%DATE%"
              SET           "time_deb=%TIME%"
      
      rem     définition des noms des fichiers :
      rem     En INPUT  :
              SET  	      "nomF_CH=%USERNAME:~0,+3%-%nom_pgm%-cherch.txt"
      rem     En OUTPUT :
              SET  	      "nomF_OUT=%USERNAME:~0,+3%-%nom_pgm%-OUT.txt"
              SET           "nomF_MATCH=%USERNAME:~0,+3%-%nom_pgm%-MATCH.txt"
      
              SET  /A        "millions               = 10000000"
      rem     Compteurs pour statistiques d'éxécution :
              SET  /A       "nb_fichiers_accedes    = millions"
              SET  /A       "nb_fichiers_tranche    = 99999"
              SET  /A       "nb_fichiers_impactes   = millions"
              SET  /A       "no_fichiers_match      = millions"
              SET  /A       "cpt_mots_cherch        = millions"
      rem     Variables de stockage de libellés d'anomalies :
              SET           "libel1_anom= "
              SET           "libel2_anom=- "
              SET           "libel3_anom= "
              SET           "libel4_anom= "
              SET           "libel5_anom= "
              SET           "marge_cons=-     "
              SET           "separ_dos="
      rem     Indicateurs d'anomalie détectée lors d'un contrôle.
              SET           "indic_anom=0"
      rem     visuel_ecran = affichage(1) ou non(=0) à l'écran des cas d'égalité.
              SET           "visuel_ecran=1"
      rem     Description d'une interligne.
              SET "interlign=------------------------------------------------------"
              SET "interlign=%interlign%------------------------"
      
              GOTO                                            :EOF
      rem -----------------FIN : DEFINIT_VAR
      
      
      
      :TYP_TITRE_TRAIT
      
      rem     Séquence permettant de déterminer et de titrer le traitement choisi.
              SET "param_1=C:\"
              IF           "%1"        ==     ""                                   (
                SET   "lib_typ_trait=RECHERCHE {NON SELECTIVE} SUR RACINE"
            ) ELSE (
                SET   "param_1="
                CALL  :LOOP_PARAM  %1 %2 %3 %4 %5 %6 %7 %8 %9
                SET   "lib_typ_trait=RECHERCHE {SELECTIVE} DANS :"                 )
      
              IF           "!param_1!" ==     "C:"                                 (
                SET   "param_1=%CD%"                                               )
                
              GOTO                                            :EOF
              
      rem -----------------FIN : TYP_TITRE_TRAIT
      
      rem ----------------------------------------------------------------------------
      rem Sous-programme de re-construction du nom du repertoire passé en paramètres
      rem par concaténation dans la variable param_1 des chaînes de caractères
      rem séparées par un espace.Chacune correspond à un paramètre de passation %1à%9
      rem ----------------------------------------------------------------------------
      
      :LOOP_PARAM
      
          IF NOT "%1"     ==     ""                       (
             SET  "param_1=!param_1!!separ_dos!%1"
             SET  "separ_dos= "
             SHIFT
             GOTO LOOP_PARAM                              )
             
          GOTO                                            :EOF
      
      rem -----------------FIN : LOOP_PARAM
      
      
      
      rem     Contrôles de cohérence sur l'environnement nécessaire au traitement.
      :CONTROLES
      
      rem      Contrôle de cohérence portant sur le chemin d'accès passé en paramètre.
               IF  NOT EXIST       "%param_1%"       (
                  SET "libel2_anom=Le chemin d'acces specifie :"
                  SET "libel3_anom=%param_1%"
                  SET "libel4_anom=                  est inconnu dans l'arborescence."
                  CALL     :MES_ANOM  %param_1%
             ) ELSE (
      rem      Contrôles de cohérence portant sur le fichier des noms à rechercher.
               IF  NOT  EXIST  %nomF_CH%            (
                  SET "libel1_anom=Absence du fichier: %nomF_CH%"
                  SET "libel2_anom=Le fichier des noms a rechercher est inconnu dans:"
                  SET "libel3_anom=%CD%."
                  CALL     :MES_ANOM  %1            )   )
                  
             GOTO                                             :EOF
             
      rem -----------------FIN : CONTROLES
      
      
      rem     -Ecriture dans le fichier et affichage à la console des informations
      rem      relatives à chaque égalité trouvée.
      :ECRITURE_MATCH
      
              SET /A no_fichiers_match+=1
      
              SET   chemin=%1
              SET   chemin=!chemin:"=!
              SET   chemin=!chemin:%nom_ext%=!
              SET   chemin_complet=%1
              SET   chemin_complet=!chemin_complet:"=!
              SET   "eme=eme."
      rem     Ecriture dans le fichier et affichage à la console des données identi-
      rem     fiant chaque égalité trouvée.
      
              IF  NOT   EXIST  %nomF_OUT%                                           (
                 ECHO {fichier cree par %nom_pgm% Le %DATE% a %TIME%   >  %nomF_OUT%
                 ECHO {                                                >> %nomF_OUT%
                 ECHO {                                                >> %nomF_OUT%
                 ECHO { %lib_tit%                                      >> %nomF_OUT%
                 ECHO {                                                >> %nomF_OUT%
                 ECHO { %nom_pgm% %lib_typ_trait%                      >> %nomF_OUT%
                 ECHO { !param_1!                                      >> %nomF_OUT%
                 ECHO {                                                >> %nomF_OUT% )
      
              IF   "%cpt_mots_trouves%"           ==  "1"                           (
                 ECHO {                                                >> %nomF_OUT%
                 ECHO {                                                >> %nomF_OUT%
                 SET "eme=iere"                                                     )
      
              ECHO {!no_fichiers_match:~-4!!interlign!                >> %nomF_OUT%
              SET  "lib_aff=a} !nom_ext! (!cpt_mots_trouves!%eme% egalite trouvee:"
              SET  "lib_aff=}!lib_aff! !nom_lib_rech!)"
              ECHO !lib_aff!                                           >> %nomF_OUT%
              ECHO }b} !chemin!                                        >> %nomF_OUT%
              ECHO }c} !chemin_complet!                                >> %nomF_OUT%
              ECHO {%interlign%----                                    >> %nomF_OUT%
      
              IF   "%visuel_ecran%"               == "1"                            (
                 ECHO %marge_cons%
                 ECHO %marge1_cons% !no_fichiers_match:~-4! %interlign%
                 SET  "lib_aff=%marge_cons%!nom_ext! (!cpt_mots_trouves!%eme%"
                 SET  "lib_aff=!lib_aff! egalite trouvee: !nom_lib_rech!)"
                 ECHO !lib_aff!
                 ECHO %marge_cons%!chemin!
                 ECHO %marge_cons%!chemin_complet!
                 ECHO %marge_cons%%interlign%                                        )
      
              GOTO                                            :EOF
      rem -----------------FIN : ECRITURE_MATCH
      
      
      rem     Recherche d'une éventuelle identité entre  nom_ext  et les noms
      rem     (déjà) présents dans le fichier %nomF_MATCH%.
      rem     Si égalité trouvée ("indic_trouve=1"),le nom du fichier !nom_ext! n'est
      rem     pas écrit dans le fichier %nomF_MATCH%.
      
      :CRE_FICH_MATCH
      
              IF  NOT   EXIST  %nomF_MATCH%                                         (
                 ECHO {fichier cree par %nom_pgm% Le %DATE% a %TIME% >  %nomF_MATCH%
                 ECHO {                                              >> %nomF_MATCH%
                 ECHO {                                              >> %nomF_MATCH%
                 ECHO { %lib_tit%                                    >> %nomF_MATCH%
                 ECHO {                                              >> %nomF_MATCH%
                 ECHO { %nom_pgm% %lib_typ_trait%                    >> %nomF_MATCH%
                 ECHO { !param_1!                                    >> %nomF_MATCH%
                 ECHO {                                              >> %nomF_MATCH% )
      
              SET              "indic_trouve=0"
      	FOR       /F  "eol=} tokens=1* delims="    %%K IN (%nomF_MATCH%) DO  (
                  FOR   /F                               %%I IN    (
                           ' ECHO "%%K"  ^| FIND /I "%nom_ext%" '  )         DO (
                             SET        "indic_trouve=1"                        )  )
      
              IF               "!indic_trouve!"   ==     "0"       (
                  SET   /A  "nb_fichiers_impactes+=1"
                  ECHO !nom_ext!>>%nomF_MATCH%                     )
                 
              GOTO                                            :EOF
      rem -----------------FIN :CRE_FICH_MATCH
      
      
      rem     Ecriture dans le fichier et affichage à la console d'un message
      rem     d'anomalie entrainant l'arrêt du traitement.
      :MES_ANOM
      
              SET /A  "indic_anom=1"
              ECHO.                                                    >> %nomF_OUT%
              ECHO.                                                    >> %nomF_OUT%
              ECHO  %marge_console%A N O M A L I E.                    >> %nomF_OUT%
              ECHO.                                                    >> %nomF_OUT%
              ECHO  %marge_cons%%libel1_anom%                          >> %nomF_OUT%
              ECHO  %marge_cons%%libel2_anom%                          >> %nomF_OUT%
              ECHO  %marge_cons%%libel3_anom%                          >> %nomF_OUT%
              ECHO  %marge_cons%%libel4_anom%                          >> %nomF_OUT%
              ECHO  %marge_cons%%libel5_anom%                          >> %nomF_OUT%
              ECHO.                                                    >> %nomF_OUT%
              ECHO  %marge_cons%                TRAITEMENT IMPOSSIBLE. >> %nomF_OUT%
              ECHO.                                                    >> %nomF_OUT%
              ECHO  %marge_cons%    - {Message emanant de %nom_pgm%} - >> %nomF_OUT%
              ECHO.                                                    >> %nomF_OUT%
      
              ECHO.
              ECHO.
              ECHO  %marge_cons%A N O M A L I E.
              ECHO  %marge_cons%%libel1_anom%
              ECHO  %marge_cons%%libel2_anom%
              ECHO  %marge_cons%%libel3_anom%
              ECHO  %marge_cons%%libel4_anom%
              ECHO  %marge_cons%%libel5_anom%
              ECHO  %marge_cons%              TRAITEMENT IMPOSSIBLE.
              ECHO.
              ECHO  %marge_cons%                    - {Message emanant de %nom_pgm%} -
              ECHO.
      
              GOTO                                            :EOF
      rem -----------------FIN : MES_ANOM
      
      
      
      rem     Ecriture dans le fichier et affichage à la console d'un message
      rem     d'information concernant le traitement.
      :INFOS_TITRE
      
              ECHO.
              SET "lib_deb_time=Le %date_deb% a %time_deb%  debut du traitement batch"
              SET "lib_deb_time=%lib_deb_time% %nom_pgm%"
              ECHO %marge_cons% %lib_deb_time%
              ECHO.
              ECHO.
              SET "lib_tit=     RECHERCHE DES FICHIERS CONTENANT AU MOINS UN CRITERE"
              SET "lib_tit=%lib_tit% D'IDENTIFICATION."
              ECHO %lib_tit%
              ECHO.
              ECHO         %nom_pgm% %lib_typ_trait%
              ECHO         !param_1!
      
              IF   "%visuel_ecran%"               == "0"             (
                   ECHO.
                   SET "lib_aff=AFFICHAGE A L ECRAN DES CAS D'EGALITE NON SOUHAITE "
                   SET "lib_aff=!lib_aff! {variable visuel_ecran = %visuel_ecran%}"
                   ECHO %marge_cons% !lib_aff!                       )
      
              GOTO                                            :EOF
      rem -----------------FIN : INFOS_DEB
      
      
      rem     Ecriture dans le fichier et affichage à la console des informations
      rem     statistiques relatives à l'exécution du programme
      :STAT_FIN
      
              FOR      /F                             %%J IN  (%nomF_CH%)   DO (
                   SET /A   "cpt_mots_cherch+=1"                               )
              ECHO.
              ECHO.
              ECHO.
              ECHO.
              ECHO.
              ECHO.
              SET "lib_aff=NOMBRE DE CRITERES/MOTS DE RECHERCHE            : "
              SET "lib_aff=%lib_aff%%cpt_mots_cherch:~-5%"
              ECHO %marge_cons% %lib_aff%
              ECHO %marge_cons% {Voir la liste dans %nomF_CH%}
              ECHO.
      
              SET "lib_aff=NOMBRE DE FICHIERS ACCEDES                      : "
              SET "lib_aff=%lib_aff%%nb_fichiers_accedes:~-5%"
              ECHO %marge_cons% %lib_aff%
              ECHO.
              
              SET "lib2_aff=NOMBRE DE FICHIERS IMPACTES  {au - une egalite} : "
              SET "lib2_aff=%lib2_aff%%nb_fichiers_impactes:~-5%"
              ECHO %marge_cons% %lib2_aff%
              ECHO %marge_cons% {Voir la liste dans %nomF_MATCH%}
              ECHO.
      
              SET "lib_aff=NOMBRE DE CAS D'EGALITE                         : "
              SET "lib_aff=%lib_aff%%no_fichiers_match:~-5%"
              ECHO %marge_cons% %lib_aff%
              ECHO %marge_cons% {Voir la trace dans %nomF_OUT%}
              ECHO.
              ECHO %marge_cons% REPERTOIRE DE TRAVAIL :
              ECHO %marge_cons% %CD%
      
              ECHO.
              SET "lib_fin_time=Le %DATE% a %TIME%    fin du traitement batch"
              SET "lib_fin_time=%lib_fin_time% %nom_pgm%"
              ECHO %marge_cons% %lib_fin_time%
      
      
              ECHO {                                                     >> %nomF_OUT%
              ECHO {%lib_deb_time%                                       >> %nomF_OUT%
              ECHO {                                                     >> %nomF_OUT%
              ECHO {NOMBRE DE FICHIERS ACCEDES: %nb_fichiers_accedes:~-5%>> %nomF_OUT%
              ECHO {                                                     >> %nomF_OUT%
              ECHO {!lib2_aff!                                           >> %nomF_OUT%
              ECHO {Voir la liste de noms dans %nomF_MATCH%}             >> %nomF_OUT%
              ECHO {                                                     >> %nomF_OUT%
              ECHO {NOMBRE DE CAS D'EGALITE   : %no_fichiers_match:~-5%  >> %nomF_OUT%
              ECHO {                                                     >> %nomF_OUT%
              ECHO {REPERTOIRE DE TRAVAIL     :                          >> %nomF_OUT%
              ECHO {%CD%                                                 >> %nomF_OUT%
              ECHO {                                                     >> %nomF_OUT%
              ECHO {%lib_fin_time%                                       >> %nomF_OUT%
      
      
              ECHO {                                                   >> %nomF_MATCH%
              ECHO {%lib_deb_time%                                     >> %nomF_MATCH%
              ECHO {                                                   >> %nomF_MATCH%
              ECHO {NOMBRE FICHIERS ACCEDES: %nb_fichiers_accedes:~-5% >> %nomF_MATCH%
              ECHO {                                                   >> %nomF_MATCH%
              ECHO {!lib2_aff!                                         >> %nomF_MATCH%
              ECHO {                                                   >> %nomF_MATCH%
              ECHO {NOMBRE DE CAS D'EGALITE: %no_fichiers_match:~-5%   >> %nomF_MATCH%
              ECHO {Voir la trace des cas d'egalite dans %nomF_OUT%}   >> %nomF_MATCH%
              ECHO {                                                   >> %nomF_MATCH%
              ECHO {REPERTOIRE DE TRAVAIL :                            >> %nomF_MATCH%
              ECHO {%CD%                                               >> %nomF_MATCH%
              ECHO {                                                   >> %nomF_MATCH%
              ECHO {%lib_fin_time%                                     >> %nomF_MATCH%
      
              GOTO                                            :EOF
      rem -----------------FIN : STAT_FIN
      
      :END
      
      	ECHO OFF


      1. Bonjour,

        J'ai monté un programme .bat pour coller au mieux au problème. Il est "brut de décoffrage" j'ai fait les tests classiques, mais je ne prétends pas avoir tout exploré. A ton tour de le tester ne serait-ce que pour l'évaluer et voir s'il te convient.

            ECHO OFF
            
        rem ENVIRONNEMENT :
        rem 1) Il faut creer un fichier  (ici %nomF_CH%) contenant  le ou les mot(s)
        rem     de recherche (un SEUL mot recherché par ligne).
        rem     Exemple de fichier %nomF_CH% :
        rem    (Il ne doit pas exister d'espaces DANS un libellé/mot.)
        rem
        rem mot1-recherché-trouvé
        rem mot2-recherché-trouvé
        rem mot3-re.......-......
        
        rem FONCTIONNEMENT :
        rem 2) Ensuite il faut ouvrir une invite de commandes et "se positionner" avec
        rem     la commande CD C:\......\.......\ répertoire de travail contenant le
        rem     présent fichier (.bat).
        rem
        rem 3) Puis sur la ligne de commande taper le nom de ce fichier :
        rem     a) SEUL (sans paramètre): DANS CE CAS LA RECHERCHE DEBUTE A LA RACINE :
        rem        (nom-de-ce-fichier est équivalent à    nom-de-ce-fichier C:\)
        rem   OU
        rem     b) AVEC LE PARAMETRE SUIVANT : C:  DANS CE CAS LA RECHERCHE S'EFFECTUE
        rem        UNIQUEMENT SUR LE REPERTOIRE EN COURS :
        rem        nom-de-ce-fichier C:
        rem   OU
        rem     c) SUIVI DE TOUT OU PARTIE DU NOM D'UN CHEMIN LA RECHERCHE S'EFFECTUE
        rem        SUR LE REPERTOIRE NOMME :
        rem        nom-de-ce-fichier  C:\Documents and Settings\Christian\Mes documents\
        rem    suivant que l'on souhaite commencer la recherche depuis la racine du
        rem       disque (ici le disque C) ou pour tout un répertoire.
        rem       Celui-ci peut contenir des sous-répertoires (notion de répertoire
        rem       générique)
        rem       Ce nom doit impérativement être terminé par un \ .Il n'est donc pas
        rem       possible de tronquer un nom de dossier par rexemple :
        rem       nom-de-ce-fichier  C:\Documents and Set\   n'est pas permis.
        
        rem    Le traitement peut être interrompu à tout moment sans risque en pressant
        rem       les touches Ctrl+C.
        rem
        rem  4) Le résultat de l'exécution se présente sous la forme de 2 fichiers :
        rem     a) %nomF_OUT% contenant :
        rem     le nom suivi du libellé trouvé,
        rem     le répertoire et le chemin des fichiers présents sur le disque C, pour
        rem     lesquels une correspondance a été trouvée avec l'un des mots présents
        rem     dans la liste des libellés (fichier %nomF_CH%) à rechercher.
        rem     Exemple de fichier %nomF_OUT% :
        
        rem fichier cree par chlib Le 13/10/2008 a 12:41:27,37
        rem 0001-----------------------------------------------------------------------
        rem {a} nom1.ext mot1-recherché-trouvé
        rem {b} C:\Documents and Settings\Christian\Mes documents\BATCH_files\
        rem {c} C:\Documents and Settings\Christian\Mes documents\BATCH_files\nom1.ext
        rem ---------------------------------------------------------------------------
        rem 0002-----------------------------------------------------------------------
        rem {a} nom2.ext mot2-recherché-trouvé
        rem {b} C:\Documents and Settings\Christian\Mes documents\BATCH_files\
        rem {c} C:\Documents and Settings\Christian\Mes documents\BATCH_files\nom2.ext
        rem ----------------------------------------------------------------------------
        rem NB. Si plusieurs occurrences d'un MEME MOT apparaissent dans le même
        rem     fichier celui-ci sera nommé (dans le fichier %nomF_OUT)% autant  de
        rem     fois que ce mot apparaît SUR DES LIGNES DIFFERENTES. En d'autres
        rem     termes s'il existe, sur la même ligne, plus d'une occurence d'un même
        rem     mot seule la première occurrence sera considérée.
        rem     par contre, si plusieurs MOTS DIFFERENTS apparaissent SUR UNE MEME
        rem     LIGNE d'un même fichier ils seront pris en compte.
        
        rem     b) %nomF_MATCH% contenant :
        rem     le nom et l'extension de chaque fichier pour lesquels une égalité au
        rem     moins a été trouvée. A l'inverse du fichier %nomF_OUT% chaque fichier
        rem     est nommé une seule fois quelques soient le nombres de cas (> 0)
        rem     d'égalités trouvés.
        rem     Exemple de fichier %nomF_MATCH% :
        rem fichier cree par chlib Le 13/10/2008 a 12:41:27,35
        rem xyz.doc
        rem aaaa.doc
        rem liop.doc
        
        SETLOCAL ENABLEdelayedExpansion
        SETLOCAL ENABLEextensions
                CLS
        
        rem     répertoire de travail (contient notamment ce fichier.) :
                CD C:\Documents and Settings\Christian\Mes documents\BATCH_files
        
        
        rem ----------------------------------------------------------------------------
        rem                          SEQUENCE PRINCIPALE
        rem ----------------------------------------------------------------------------
        
        
                CALL         :DEFINIT_VAR     %0
        
                IF  EXIST    "%nomF_OUT%" 	            ( ERASE   %nomF_OUT% )
                IF  EXIST    "%nomF_MATCH%" 	            ( ERASE   %nomF_MATCH%  )
        
        rem     Séquence permettant de déterminer le type de traitement choisi.
                CALL         :TYP_TITRE_TRAIT %1 %2 %3 %4 %5 %6 %7 %8 %9
        
        rem     Contrôles de cohérence portant sur l'environnement.
                CALL         :CONTROLES !param_1!
                IF           "!indic_anom!"    ==    "1"   ( GOTO         :EOF )
        
        rem   - BOUCLE PRINCIPALE de lectures des chemins d'accès.
        rem   - EXTRACTION (du chemin d'accès) du nom et de l'extension du fichier.
        rem   - RECHERCHE dans le fichier en cours de la présence de 1 ou plusieurs
        rem      libellés recherchés (libellés présents dans le fichier nomF_CH)
        
                FOR       /R   "%param_1%"              %%F IN  (*.*)             DO (
                   SET    /A   "nb_fichiers_accedes+=1"
                   SET         "nom_ext=%%~nxF"
                   SET    /A   "prog_fich=1"
                   FOR    /F                            %%J IN  (%nomF_CH%)    DO (
                      FOR /F   "tokens=1* delims="      %%K IN  (
                              ' TYPE "%%F"  ^|  FIND /I "%%J" ' )           DO (
                          SET   "nom_lib_rech=%%J"
                          CALL  :CRE_FICH_MATCH
                          CALL  :ECRITURE_MATCH         "%%F"     !nom_ext!     )  )  )
        
              	ENDLOCAL
              	
                GOTO                                            :EOF
        
        rem -----------------FIN DE LA SEQUENCE PRINCIPALE
        
        
        
        
        rem     Définition et initialisation des variables utiles au traitement.
        :DEFINIT_VAR
        
                SET           "nom_pgm=%1"
        
        rem     définition des noms des fichiers :
        rem     En INPUT :
                SET  	      "nomF_CH=%USERNAME:~0,+3%-%nom_pgm%-cherch.txt"
        rem     En OUTPUT :
                SET  	      "nomF_OUT=%USERNAME:~0,+3%-%nom_pgm%-OUT.txt"
                SET           "nomF_MATCH=%USERNAME:~0,+3%-%nom_pgm%-MATCH.txt"
        
                SET  /A        "millions               = 10000000"
        rem     Compteurs pour statistiques d'éxécution :
                SET  /A       "nb_fichiers_accedes    = millions"
                SET  /A       "no_fichiers_match      = millions"
        rem     Variables de stockage de libellés d'anomalies :
                SET           "libel1_anom= "
                SET           "libel2_anom=- "
                SET           "libel3_anom= "
                SET           "libel4_anom= "
                SET           "libel5_anom= "
                SET           "marge_cons=-     "
        rem     Indicateurs nécessaires au traitement.
                SET           "indic_anom=0"
        rem     Description d'interlignes.
                SET "interlign=------------------------------------------------------"
                SET "interlign=%interlign%------------------------"
                SET "interlign1=------------------------------------------------------"
                SET "interlign1=%interlign1%----------------------"
        
                GOTO                                            :EOF
        rem -----------------FIN : DEFINIT_VAR
        
        
        
        :TYP_TITRE_TRAIT
        
        rem     Séquence permettant de déterminer et de titrer le traitement choisi.
                SET "param_1=C:\"
                IF           "%1"        ==     ""                                   (
                  SET "lib_typ_trait=RECHERCHE {NON SELECTIVE} SUR RACINE"
              ) ELSE (
                        SET  "param_1="
                        CALL :LOOP_PARAM  %1 %2 %3 %4 %5 %6 %7 %8 %9
                        SET   "lib_typ_trait=RECHERCHE {SELECTIVE} DANS"             )
        
                GOTO                                            :EOF
        rem -----------------FIN : TYP_TITRE_TRAIT
        rem ------------------------------------------------------------------------
        rem Sous-programme de construction du nom du repertoire passé en paramètres
        rem  par concaténation dans la variable rep des noms séparés par un espace.
        rem ------------------------------------------------------------------------
        
        :LOOP_PARAM
        
            IF NOT "%1"     ==     ""         (
               SET  "param_1=!param_1!!separ_dos!%1"
               SET  "separ_dos= "
               SHIFT
               GOTO LOOP_PARAM                 )
               
        rem Fin du Sous-programme. Retour après la commande: CALL :LOOP_PARAM
            GOTO                                            :EOF
        rem --------------------------------------------------------------------
        
        
        rem     Contrôles de cohérence sur l'environnement nécessaire au traitement.
        :CONTROLES
        
        rem      Ces contrôles ne sont pas effectués si la recherche porte sur
        rem      l'extension.  ex.:  CH cherchrep txt *
        
        rem      Contrôle de cohérence portant sur le chemin d'accès passé en paramètre.
                 IF  NOT EXIST       "%param_1%"       (
                    SET "libel2_anom=Le chemin d'acces specifie :"
                    SET "libel3_anom=%param_1%
                    SET "libel4_anom=                  est inconnu dans l'arborescence."
                    CALL     :MES_ANOM  %param_1%
               ) ELSE (
        rem      Contrôles de cohérence portant sur le fichier des noms à rechercher.
                 IF  NOT  EXIST  %nomF_CH%                             (
                    SET "libel1_anom=Absence du fichier: %nomF_CH%"
                    SET "libel2_anom=Le fichier des noms a rechercher est inconnu dans:"
                    SET "libel3_anom=%CD%."
                    CALL     :MES_ANOM  %1     )   )
                    
        
               GOTO                                             :EOF
               
        rem -----------------FIN : CONTROLES
        
        
        rem     -Ecriture dans le fichier et affichage à la console des informations
        rem      relatives à chaque égalité trouvée.
        :ECRITURE_MATCH
        
                SET       /A    no_fichiers_match+=1
        
                SET   chemin=%1
                SET   chemin=!chemin:"=!
                SET   chemin=!chemin:%2=!
                SET   chemin_complet=%1
                SET   chemin_complet=!chemin_complet:"=!
        
        rem     Ecriture dans le fichier et affichage à la console des données identi-
        rem     fiant chaque égalité trouvée.
        
                IF NOT EXIST %nomF_OUT%                                               (
                   ECHO fichier cree par %nom_pgm% Le %DATE% a %TIME% > %nomF_OUT%
                   ECHO.                                                 >> %nomF_OUT%
                   ECHO.                                                 >> %nomF_OUT% )
        
                ECHO !no_fichiers_match:~-4!!interlign1!                 >> %nomF_OUT%
                ECHO {a} !nom_ext! !nom_lib_rech!                        >> %nomF_OUT%
                ECHO {b} !chemin!                                        >> %nomF_OUT%
                ECHO {c} !chemin_complet!                                >> %nomF_OUT%
                ECHO %interlign%--                                       >> %nomF_OUT%
        
                ECHO %marge_cons%
                ECHO %marge1_cons%!no_fichiers_match:~-4! !interlign!
                ECHO %marge_cons%!nom_ext!  mot recherche: !nom_lib_rech!
                ECHO %marge_cons%!chemin!
                ECHO %marge_cons%!chemin_complet!
                ECHO %marge_cons%%interlign%-
        
                GOTO                                            :EOF
        rem -----------------FIN : ECRITURE_MATCH
        
        
        rem     Recherche d'identités entre  nom_ext  et l'un des noms (déjà) présents
        rem     dans le fichier %nomF_MATCH%. Si égalité trouvée ("indic_trouve=1"),le
        rem     nom du fichier !nom_ext! n'est pas écrit dans le fichier %nomF_MATCH%.
        
        :CRE_FICH_MATCH
        
                IF  NOT   EXIST  %nomF_MATCH%                                         (
                   ECHO fichier cree par %nom_pgm% Le %DATE% a %TIME% >  %nomF_MATCH%
                   ECHO.                                              >> %nomF_MATCH%
                   ECHO.                                              >> %nomF_MATCH% )
        
                SET              "indic_trouve=0"
        
        
        	FOR   /F                      %%K IN (%nomF_MATCH%) DO (
                   IF /I      %%K                   ==     !nom_ext!                (
                      SET        "indic_trouve=1"                                   ))
                IF               "!indic_trouve!"   ==     "0"                       (
                   ECHO !nom_ext!>>%nomF_MATCH%                                      )
                   
                GOTO                                            :EOF
        rem -----------------FIN :CRE_FICH_MATCH
        
        
        rem     Ecriture dans le fichier et affichage à la console d'un message
        rem     d'anomalie entrainant l'arrêt du traitement.
        :MES_ANOM
        
                SET /A  "indic_anom=1"
                ECHO.                                                    >> %nomF_OUT%
                ECHO.                                                    >> %nomF_OUT%
                ECHO  %marge_console%A N O M A L I E.                    >> %nomF_OUT%
                ECHO.                                                    >> %nomF_OUT%
                ECHO  %marge_cons%%libel1_anom%                          >> %nomF_OUT%
                ECHO  %marge_cons%%libel2_anom%                          >> %nomF_OUT%
                ECHO  %marge_cons%%libel3_anom%                          >> %nomF_OUT%
                ECHO  %marge_cons%%libel4_anom%                          >> %nomF_OUT%
                ECHO  %marge_cons%%libel5_anom%                          >> %nomF_OUT%
                ECHO.                                                    >> %nomF_OUT%
                ECHO  %marge_cons%                TRAITEMENT IMPOSSIBLE. >> %nomF_OUT%
                ECHO.                                                    >> %nomF_OUT%
                ECHO  %marge_cons%    - {Message emanant de %nom_pgm%} - >> %nomF_OUT%
                ECHO.                                                    >> %nomF_OUT%
        
                ECHO.
                ECHO.
                ECHO  %marge_cons%A N O M A L I E.
                ECHO  %marge_cons%%libel1_anom%
                ECHO  %marge_cons%%libel2_anom%
                ECHO  %marge_cons%%libel3_anom%
                ECHO  %marge_cons%%libel4_anom%
                ECHO  %marge_cons%%libel5_anom%
                ECHO  %marge_cons%              TRAITEMENT IMPOSSIBLE.
                ECHO.
                ECHO  %marge_cons%                    - {Message emanant de %nom_pgm%} -
                ECHO.
        
                GOTO                                            :EOF
        rem -----------------FIN : MES_ANOM
        

        1. Salut,

          En programmation bash (sous linux), ta demande est simple à réaliser, mais il ne pourra pas utiliser des fichiers excel.

          Sous windows il faut se tourner sur un autre langage de programmation mais je ne sais pas lequel te conseiller.