Faire des recherches par mots clés dans des documents Word stockés sur disque vi

Résolu
amiineba Messages postés 9 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 25 août 2011 - 18 août 2011 à 11:32
amiineba Messages postés 9 Date d'inscription mardi 16 juin 2009 Statut Membre 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 !

14 réponses

amiineba Messages postés 9 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 25 août 2011
25 août 2011 à 14:44
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
3
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
18 août 2011 à 11:37
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..
0
amiineba Messages postés 9 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 25 août 2011
18 août 2011 à 12:25
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).
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
18 août 2011 à 12:30
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)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
amiineba Messages postés 9 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 25 août 2011
18 août 2011 à 12:49
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é
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
18 août 2011 à 13:47
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)
0
amiineba Messages postés 9 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 25 août 2011
18 août 2011 à 14:14
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.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
18 août 2011 à 20:06
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)
0
amiineba Messages postés 9 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 25 août 2011
19 août 2011 à 10:31
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é
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
19 août 2011 à 11:56
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
0
amiineba Messages postés 9 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 25 août 2011
19 août 2011 à 12:43
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
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
20 août 2011 à 01:25
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
0
amiineba Messages postés 9 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 25 août 2011
24 août 2011 à 14:25
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
0
amiineba Messages postés 9 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 25 août 2011
24 août 2011 à 14:29
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
0
Rejoignez-nous