IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

Rechercher un mot dans tous mes documents


Sujet :

VBA Word

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 11
    Points : 2
    Points
    2
    Par défaut Rechercher un mot dans tous mes documents
    J'ai besoin d'aide pour faire un programme vba :


    Je souhaite construire un programme présentant une boite de dialogue.

    En y tapant un mot, je voudrais que ce mot soit recherché dans le contenu de tous les fichiers word que j’ai placé dans un répertoire précis :


    G:\...\...\...\fichier

    Et que le programme copie le paragraphe autour de ce mot, et le nom du fichier dans lequel il a été trouvé.

    Finalement qu’il copie ces données dans un fichier word de résultat, pour avoir une liste de toutes les news concernant une société ou un secteur dans mes fichiers.

    Pensez-vous que cela soit possible ?
    merci beaucoup

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Bonjour et bienvenue sur les forum Office de DVP.

    Ce que tu souhaites est tout à fait possible.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Bonjour rom, bienvenue sur le forum.
    As-tu commencé quelque chose ? As-tu une difficulté précise ?

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Ben en fait j'ai trouvé qqes pistes:
    "trouver le mot et les remplacer" par exemple mais je ne voudrais pas ruiner les fichiers du serveur de la boite. et j'ai peur de modifier les codes

    donc je ne sais pas trop comment m'y prendre. en général je me contente d'enregistrer mes macros, là c'est plus complexe.
    Comme c'est pour le boulot (je suis stagiaire), je recherche de l'aide pour que ça soit bien fait. en gros je suis au point mort et j'attend les conseils d'une bonne ame, ou un lien vers un code qui fait ça.

    merci beaucoup pour votre réponse

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Heureux-oli Voir le message
    Bonjour et bienvenue sur les forum Office de DVP.

    Ce que tu souhaites est tout à fait possible.
    Bonjour,
    Merci pour ta réponse,

    Comment dois-je m'y prendre ?
    As tu un code qui ferait ça ?

    merci beaucoup

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Voici toujours une méthode (il en existe d'autres) qui permet de savoir si un mot existe dans les documents d'un répertoire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Option Explicit
     
    Sub Appel()
    Dim Chemin$, Tablo As Variant, LeMot$
        Chemin = "D:\Doc\Courrier\"
        If Not VerifRep(Chemin) Then
            MsgBox "Répertoire inexistant"
            Exit Sub
        End If
        LeMot = InputBox("Saisir le mot à chercher", "RECHERCHE")
        If Trim(LeMot) <> "" Then Lister Chemin, LeMot
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    'Vérifie de l'existence du répertoire
    Function VerifRep(Chemin$) As Boolean
    Dim i As Byte, rep$
        For i = 0 To UBound(Split(Chemin, "\")) - 1
            rep = rep & Split(Chemin, "\")(i) & "\"
            VerifRep = Dir(Chemin) <> ""
        Next
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    'Liste les fichiers (*.doc) du répertoire
    Sub Lister(Chemin$, LeMot$)
    Dim NomFich$
    Dim LeDoc As Document
        NomFich = Dir(Chemin & "*.doc")
        'Vérification de l'existence de fichiers dans le répertoire
        If NomFich = "" Then
            MsgBox "Aucun fichier dans le répertoire " & Chemin
            Exit Sub
        End If
     
        'Ouverture des fichiers du répertoire
        Do While NomFich <> ""
            Set LeDoc = Documents.Open(Chemin & NomFich)
            DoEvents
            'Lance la recherche
            If Chercher(LeMot) Then MsgBox "Mot trouvé dans le fichier " _
                & NomFich
            LeDoc.Close False
            DoEvents
            NomFich = Dir
        Loop
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    'Recherche du mot dans le fichier ouvert
    Function Chercher(LeMot$) As Boolean
        With Selection.Find
            .Text = LeMot
            Chercher = .Execute
        End With
    End Function
    C'est évidemment à adapter à ton pb.
    Il doit être possible de consulter les documents sans les ouvrir mais là je n'ai pas le code.
    Bonne journée

  7. #7
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    La première chose à faire est l'ouverture des fichiers avant de faire une recherche.
    Pour ouvrir les fichiers d'un répertoire, il faut utiliser une bibliothèque File System Objet.

    Jette un oeil ici http://warin.developpez.com/access/fichiers/
    C'est un super tuto.

    Ensuite, pour chaque fichier, il faudra lancer une recherche et copier le paragraphe qui contient le mot recherché.
    Une chose à la fois, d'abord, obtenir les fichiers d'un répertoire.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Ok je vais essayer ça. je vous tient au courant.

    Merci encore.

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    [QUOTE=ouskel'n'or;3592170]Voici toujours une méthode (il en existe d'autres) qui permet de savoir si un mot existe dans les documents d'un répertoire.

    J'ai essayé ce code en rentrant le chemin dans le programme que je souhaite sonder (à la place de D:/ .../courier), mais il me renvoie que mon répertoire n'existe pas, alors que je l'ai créé exprès, donc je suis sur de son existence et du chemin.

    As tu une piste ?


    Heu! Re! je t'avoue que le tuto présente beaucoup d'infos et je ne sais pas quel code (codes) utiliser.

    J'ai peur d'etre un peu trop débutant pour bien comprendre ce que je dois faire.

  10. #10
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    Bonjour...

    oui je ne comprends pas ce qu'as voulu faire notre cavalier avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    'Vérifie de l'existence du répertoire
    Function VerifRep(Chemin$) As Boolean
    Dim i As Byte, rep$
        For i = 0 To UBound(Split(Chemin, "\")) - 1
            rep = rep & Split(Chemin, "\")(i) & "\"
            VerifRep = Dir(Chemin) <> ""
        Next
    End Function



    remplace déjà cela par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    'Vérifie de l'existence du répertoire
    Function VerifRep(Chemin$) As Boolean
            VerifRep = Dir(Chemin) <> ""
    End Function
    .. je regarde le reste du code...
    JacqueS.

    Ps: je ne télécharge les piéces jointes qu'en dernier recours .(et encore...)

    Pour devenir mon ami laissez moi un message

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Malheureusement àa a toujours le même effet: "répértoire inexistant".

    merci en tous cas de vous pencher sur mon problème

  12. #12
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    tu as bien modifié la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        Chemin = "D:\Doc\Courrier\"

    PS: Finalement le code au cavalier doit marcher .. mais bon il est un peu tordu
    JacqueS.

    Ps: je ne télécharge les piéces jointes qu'en dernier recours .(et encore...)

    Pour devenir mon ami laissez moi un message

  13. #13
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Tu peux récupérer le répertoire de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Repertoire()
    Dim dlg As FileDialog
    Dim stReper As String
     
     
    Set dlg = Application.FileDialog(msoFileDialogFolderPicker)
    dlg.Show
    stReper = dlg.SelectedItems(1)
    Debug.Print stReper
     
     
    End Sub
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par JackOuYA Voir le message
    tu as bien modifié la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        Chemin = "D:\Doc\Courrier\"

    PS: Finalement le code au cavalier doit marcher .. mais bon il est un peu tordu
    j'avais oublié un\ à la fin du coup ça marche merci beaucoup.
    Qu'est ce qu'il faudrait que je modifie pour pas avoir cliquer ok à chaque fois qu'il trouve le mot et pour qu'à la place il me fasse un liste (sans doublons) des fichiers dans lequel il se trouve.

    Vous assurez grave en tous cas, je vois le bout du tunnel. merci

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    en gros par quoi je dois remplacer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Chercher(LeMot) Then MsgBox "Mot trouvé dans le fichier " _
                & NomFich
            LeDoc.Close False
            DoEvents
            NomFich = Dir
    Pour ne pas avoir de messagebox, mais plutot une liste des fichiers (sans doublons) dans lequel le mot se retrouve ?

  16. #16
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    Re,

    En supposant que le code de ta macro soit dans le document Word dans lequel tu veux placer ta liste de fichier ..:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ...
      DoEvents
            'Lance la recherche
            If Chercher(LeMot) Then  ThisDocument.Range.InsertAfter "Mot " & LeMot & " dans : "    & NomFich & vbCrLf
            LeDoc.Close False
            DoEvents
            NomFich = Dir
    ...
    JacqueS.

    Ps: je ne télécharge les piéces jointes qu'en dernier recours .(et encore...)

    Pour devenir mon ami laissez moi un message

  17. #17
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    ça marche
    comment faire pour que les fenetres ne s'affiche, (recherche plus rapide en arrière plan j'imagine)
    mieux encore: -comment créer des hyperliens vers les fichiers ?
    -copier la phrase (le paragraphe) dans lequel le mot se trouve ? en dessous du lien

  18. #18
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    voila ou en est mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    Sub Appel()
    Dim Chemin$, Tablo As Variant, LeMot$
        Chemin = "C:\Documents and Settings\rvidal\Desktop\test mail secto\"
        LeMot = InputBox("Saisir le mot à chercher", "RECHERCHE")
        If Trim(LeMot) <> "" Then Lister Chemin, LeMot
    End Sub
    Sub Lister(Chemin$, LeMot$)
    Dim NomFich$
    Dim LeDoc As Document
        NomFich = Dir(Chemin & "*.doc")
    Application.ScreenUpdating = False
        'Ouverture des fichiers du répertoire
        Do While NomFich <> ""
            Set LeDoc = Documents.Open(Chemin & NomFich)
            DoEvents
            'Lance la recherche
             If Chercher(LeMot) Then ThisDocument.Range.InsertAfter "Mot " & LeMot & " dans : " & NomFich & vbCrLf
            LeDoc.Close False
            DoEvents
            NomFich = Dir
        Loop
    End Sub
    'Recherche du mot dans le fichier ouvert
    Function Chercher(LeMot$) As Boolean
        With Selection.Find
            .Text = LeMot
            Chercher = .Execute
        End With
    End Function
    besoin de modifier cette partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Then ThisDocument.Range.InsertAfter "Mot " & LeMot & " dans : " & NomFich & vbCrLf
    pour
    1. copier la paragraphe autour du mot
    2. Creer un lien vers le doc
    3.executer le tout en arrière plan pour que ça aille plus vite

    Au total je voudrais obtenir:

    -le mot est dans doc1, lien vers doc1,
    "copie du paragraphe"
    --le mot est dans doc2, lien vers doc2,
    "copie du paragraphe"
    -etc...

  19. #19
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Bon ça s'est réglé grâce aux excellents conseils de ouskel'n'or, et des autres bien sur.

    Merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Batch] Recherche récursive d'un mot dans tous les fichiers
    Par hackoofr dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 11/05/2012, 13h46
  2. [Batch] Rechercher un mot dans les lignes d'un document
    Par jubourbon dans le forum Scripts/Batch
    Réponses: 13
    Dernier message: 31/05/2010, 17h27
  3. Réponses: 2
    Dernier message: 09/05/2008, 17h38
  4. Réponses: 4
    Dernier message: 01/03/2006, 13h58
  5. [TP]Recherche de mots dans un Doc.
    Par Loceka dans le forum Turbo Pascal
    Réponses: 8
    Dernier message: 04/10/2004, 19h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo