Faire des recherches par mots clés dans des documents Word stockés sur disque vi [Résolu]

Messages postés
9
Date d'inscription
mardi 16 juin 2009
Dernière intervention
25 août 2011
- - Dernière réponse : amiineba
Messages postés
9
Date d'inscription
mardi 16 juin 2009
Dernière intervention
25 août 2011
- 25 août 2011 à 14:44
Bonjour tout le monde,
Je dois réaliser une application en VBA, avec une base de données ACCESS, qui doit me permettre de faire des recherches par mots clés dans des documents Word stockés dans mon disque. Après recherche, le document Word qui contient le(s) mot(s) clé(s) recherchés doit s'ouvrir pour permettre à l'utilisateur d'y accéder.
Les mots clés recherchés sont contenus dans le texte.
pour ma base de données, j'ai stocké dans mon disque les fichiers word, j'ai créé une table qui contient les chemins vers les fichiers?
Est-ce que quelqu'un sait s'il est possible de réaliser ce genre d'application en VBA ?
Merci pour votre aide !
Afficher la suite 

Votre réponse

14 réponses

Meilleure réponse
Messages postés
9
Date d'inscription
mardi 16 juin 2009
Dernière intervention
25 août 2011
3
Merci
Salut,
j'ai corrigé mon code et ça marche.
Il fallait utiliser "like" au lieu de l'opération '='
Private Sub listenat_Click()
Me.ListeChemin.RowSource = "SELECT [Nature].[Chemin] FROM Nature " _
& "WHERE ((([Nature].[NomNature]) like '*" & Me.listenat & "*'));"

DoCmd.GoToControl "ListeChemin"
ListeChemin.Dropdown
End Sub

Merci amiineba 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 105 internautes ce mois-ci

Commenter la réponse de amiineba
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Dernière intervention
27 août 2013
0
Merci
Re,

Il n'était pas nécessaire de poste un nouveau post sur le même sujet, vu que c'était un de tes 1ers messages, un admin bienveillant aurait juste déplacé ton post.

Sinon pour ta questions, oui je pense que c'est possible.

L'expérience, c'est une connerie par jour, mais jamais la même..
Commenter la réponse de lolokun
Messages postés
9
Date d'inscription
mardi 16 juin 2009
Dernière intervention
25 août 2011
0
Merci
Salut,
Merci pour ta réponse.
Est ce que tu as des idées de comment s'y prendre ?
j'ai 2 tables:
-l'une contien la liste des groupes et natures qui peux être dans les docs.
-l'autre qui contient les chemins vers les docs.
Je voudrais, à travers un formulaire si je choisi avec une liste déroulante 1groupe g1 et 1 nature n1 donnés et je clique sur un bouton rechercher il m'affiche le document word qui contient le couple (g1, n1).
Commenter la réponse de amiineba
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
0
Merci
Salut

Côté recherche de mot dans un doc Word, rien de plus simple : Il te suffit d'enregistrer une macro pendant que tu fais une recherche manuelle et tu connaitras le code à utiliser.
Reste les étapes principales à résoudre :
- Récupérer la liste des fichiers depuis ta base
- Ouvrir chaque document de la liste et faire la recherche

Qu'as-tu fait ?
As-tu déjà fait ta connexion à ta DB ?
As-tu créé la requète de récupération du contenu de ta table ?
As-tu fait une boucle de lecture des résultats ?
As-tu fait l'ouverture d'un fichier Word ?

Toutes ces étapes trouvent leurs solutions parmi les questions du forum ou parmi les codes sources du site.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Commenter la réponse de cs_Jack
Messages postés
9
Date d'inscription
mardi 16 juin 2009
Dernière intervention
25 août 2011
0
Merci
Salut Jack,
merci pour la pertinance de votre réponse.
Je précise que je suis nouveau dans le domaine.

ce que j'ai fait:
-ouvrir les enregistrements de la table et
-ouvrir les documents word

ce qui me pose probléme c'est :

-ouvrir, un à un, chaque document de la liste
-rechercher si ce document contient oui ou non la chaine de caractères
-refermer ce document
-boucler jusqu'à la fin de la liste
-afficher dans le formulaire, le fichier qui contient le mot clé
Commenter la réponse de amiineba
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
0
Merci
1-ouvrir, un à un, chaque document de la liste :
Une simple boucle Do-Loop sur le RecordSet contenant les résultats suffira
(je ne sais pas trop ce que tu as fait)

2-rechercher si ce document contient oui ou non la chaine de caractères :
Je te l'ai dit : enregistreur de macro = code
A propos, dans quel logiciel programmes-tu ? Access, Word, Excel ?

3-refermer ce document :
Un peu de logique et la lecture de l'aide de Word te dira comment faire

4-boucler jusqu'à la fin de la liste :
Do-Loop

5-afficher dans le formulaire, le fichier qui contient le mot clé :
A faire au fur et à mesure de la recherche (point 2)
Commenter la réponse de cs_Jack
Messages postés
9
Date d'inscription
mardi 16 juin 2009
Dernière intervention
25 août 2011
0
Merci
1- Voici le code que j'ai pour ouvrir les enregistrements et les documents.
Sub OuvrirFichier()
Dim wApp As Word.Application
'Dim oDoc As Word.Document
 
Dim SQL As String
Dim oDB As DAO.Database
Dim rs As DAO.Recordset
SQL = "SELECT * From tbl1"
Set oDB = CurrentDb
Set rs = oDB.OpenRecordset(SQL)
 
Set wApp = New Word.Application
wApp.Visible = True
 
 
While Not rs.EOF
wApp.Documents.Open (rs.Fields(1).Value)
 
rs.MoveNext
 
Wend
 
 
'Set wApp = Nothing
Set rs = Nothing
Set oDB = Nothing
End Sub


2- quand j'enregistre le macro en faisant une recherche j'ai que ça :
Sub Macro1()
'
' Macro1 Macro
'
'

End Sub

Je programme avec access.
Commenter la réponse de amiineba
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
0
Merci
En effet, la recherche ne fournit aucun code, autant pour moi.
Il faudrait, je pense, regarder du côté de la syntaxe d'un "Remplacer" et voir les options.
Sinon, après 3 min 12 sec de recherche dans l'aide de Word, voilà comment énumérer les mots composant un document :
    Dim r As Long
    With ActiveDocument
        For r = 1 To .Words.Count
            If Trim(.Words(r).Text) = "LeMotàChercher" Then
                Debug.Print .Words(r)
            End If
        Next
    End With
Attention aux min/maj (A n'est pas a)
Commenter la réponse de cs_Jack
Messages postés
9
Date d'inscription
mardi 16 juin 2009
Dernière intervention
25 août 2011
0
Merci
Bonjour Jack !
Merci pour ton bout de code mais je pense que c'est pas ce que je veux, je cherche pas à énumérer les mots qui compose un document mais plutôt :

-ouvrir, un à un, chaque document de la liste des documents
-rechercher si ce document contient oui ou non la chaine de caractères
(je précise que la chaine recherchée doit être saisi par l'utilisateur à travers un champ dans un formulaire.)
-refermer ce document
-boucler jusqu'à la fin de la liste
-afficher dans le formulaire, le fichier qui contient le mot clé
Commenter la réponse de amiineba
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
0
Merci
Ne lit pas en diagonal les réponses qu'on te fait.
Je sais ce que tu veux faire, tu l'as expliqué.
Chaque tâche, telles que tu les as découpées, doivent trouver des solutions individuelles et, mises bout à bout, formeront ton programme.
Ouvrir-refermer les document + boucler : Tu nous as montré ton code; il devrait y répondre.
Manque juste un peu de concentration pour finaliser : Tu ouvres tes doc mais tu ne les refermes pas, par exemple.
Quant à la recherche de texte, je t'ai fourni du code qui, si tu le testes quelques minutes, répondra à ta demande.

Si ton programme génère des erreurs (*), dis-nous lesquelles et sur quelle ligne.
(*) Supprime les éventuels "On Error Resume Next"

Dernière chose : Apprends à déboguer, à suivre ce que fait ton programme; cela t'aidera à suivre le contenu des variables et ainsi savoir pourquoi cela ne fonctionne pas comme tu le souhaites :
- F9 sur une ligne de code; elle change de couleur
Le programme s'y arrêtera au prochain passage
Survole avec la souris tes variables pour visualiser leur contenu, ou va dans la fenêtre de debogage (Ctrl-G) et tape
? maVariable
pour qu'elle s'inscrive dans la fenêtre.
- F8 (VB6) ou F10 (.Net) pour avancer d'une ligne de code
- F5 pour continuer normalement
Commenter la réponse de cs_Jack
Messages postés
9
Date d'inscription
mardi 16 juin 2009
Dernière intervention
25 août 2011
0
Merci
Salut,
Un grand merci pour ton post.

Pour ce qui de ton bout de code je l'ai intégré mais j'ai une erreur d'execussion 5825
Au niveau de cette ligne
If Trim(.Words(r).Text) = "RAC1" Then
Commenter la réponse de amiineba
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
0
Merci
Et que dit cette erreur ?
Dans mon exemple, j'utilisais ActiveDocument, ce qui ne fonctionne que dans le VBA de Word. Il te faut bien sûr le remplacer par l'objet Document que tu as dû dimensionné avant d'ouvrir le document.
Genre :
Dim wApp As Word.Application
Dim wDocument As Word.Document
Set wApp = New Word.Application
wApp.Visible = True
While Not rs.EOF
   Set wDocument = wApp.Documents.Open(rs.Fields(1).Value)
   '...
Ici, il faudra utiliser wDocument
Il faudra penser à le refermer avant de passer au suivant dans ta boucle
Commenter la réponse de cs_Jack
Messages postés
9
Date d'inscription
mardi 16 juin 2009
Dernière intervention
25 août 2011
0
Merci
Encore merci Jack..mais je pense que je vais laisser cette solution et opter à faire ceci:
Salut tout le monde !
Je cherche quelqu'un qui peut me consacrer un petit morceau de son temps, je lui en serais éternellement reconnaissant!

voilà ma situation:
J'ai une base de données qui comporte 3 tables :
- Service : qui contient 3 champs (Id_Service, NomService, Responsable)
- Groupe : qui contient 3 champs (Id_Groupe, NomGroupe, Id_Service)
- Nature : qui contient 4 champs (Id_Nature, NomNature, Chemin, Id_Groupe)
Le champ chemin contient le chemin exact des fichiers Word stockés dans mon disque.
J'ai créé un formulaire qui me permet de faire ceci :
- Sélectionner un secteur donné via une liste box
- Sélectionner un groupe parmi seulement les groupes proposés par ce secteur
- Sélectionner une nature parmi seulement les natures proposées par le groupe sélectionné en haut
Je veux maintenant, à partir de la nature sélectionnée dans le champ listenat, afficher dans ListeChemin le fichier Word correspondant au champ Chemin se trouvant dans la même table que nature.
J'ai fait ce code mais ça ne marche pas:
Private Sub listenat_Click()

Me.ListeChemin.RowSource = "SELECT [NatureLac].[Chemin] FROM Nature " _
& "WHERE ((([Nature].[NomNature])= listenat));"

DoCmd.GoToControl "ListeChemin"
ListeChemin.Dropdown


End Sub
Commenter la réponse de amiineba
Messages postés
9
Date d'inscription
mardi 16 juin 2009
Dernière intervention
25 août 2011
0
Merci
Désolé j'ai constaté qu'il y a deux erreurs sur mon post:
à la place de Secteur c'est Service et au lieu de NatureLac c'est nature
Commenter la réponse de amiineba

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.