Salut tout le monde !
Moi quand j'éxécute le code d'Olivier ça m'ouvre les documents, les referme et m'affiche l'application word mais il m'affiche pas la page sur la quelle il a trouvé la chaine recherchée.
Salut tout le monde !
Moi quand j'éxécute le code d'Olivier ça m'ouvre les documents, les referme et m'affiche l'application word mais il m'affiche pas la page sur la quelle il a trouvé la chaine recherchée.
Bonjour Serigne-BA,
Vois ce code, dans lequel les commentaires devraient te pertmettre de comprendre ce qu'on y fait.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 Public Sub Recherche() 'Ceci suppose que la référence Microsoft Word xx.x Object Library a été ajoutée 'Menu Outils>References et cocher Microsoft Word xx.x Object Library dans la liste 'Défition des variables pour piloter Word Dim objWord As Word.Application Dim Doc As Word.Document 'Définition d'un drapeau qui indiquera si nous avons dû ouvrir une session Word '(il se pourrait que l'utilisateur en ait déjà ouvert une) Dim bolOpenedWord As Boolean 'Définition de variables utiles à notre application Dim Rs As DAO.Recordset 'ceci suppose que la référence Microsoft DAO X.X Object Library a été ajoutée 'Nous tentons de récupérer une session Word déjà ouverte On Error Resume Next 'S'il n'y a pas de session ouverte, l'instruction suivante va provoquer une erreur (N° 429) Set objWord = GetObject(, "Word.Application") 'Nous traitons ici l'erreur éventuelle : Nous devons ouvrir une session Word If Err.Number = 429 Then Set objWord = CreateObject("Word.Application") bolOpenedWord = True 'ceci pour nous rappeler de refermer Word en fin de programme End If 'Fin du traitement de l'erreur éventuelle On Error GoTo 0 'Pour notre confort de contrôle (pendant la mise au point) nous rendons l'application visible objWord.Visible = True 'Préparons un processus pour lire, un après l'autre, le chemin de chaque document à traiter 'Créons un RecordSet basé sur la table "tChemins" ([Id],[Chemin]) Set Rs = CurrentDb.OpenRecordset("SELECT * From tChemins") 'On lance une boucle pour lire chaque chemin et lui appliquer le traitement souhaité While Not Rs.EOF Set Doc = objWord.Documents.Open(Rs.Fields("Chemin").Value) 'faire ici ce qu'on doit Debug.Print Doc.Name ''''''''''''''''''''''''''''' '---------------------------------------------------------------------------------------------------------- 'Ici moi, je n'en sors pas : Access se plante, décommente les 2 lignes qui suivent pour voir chez toi 'objWord.Selection.Find.Execute FindText:="LeMot-clé" '-------à adapter----------------<< 'If objWord.Selection.Find.Execute = true then Msgbox "OK" '-------à adapter----------------<< '---------------------------------------------------------------------------------------------------------- 'Quand le traitement est terminé pour ce document, on le referme Doc.Close 'On passe au suivant Rs.MoveNext 'Et on boucle, jusqu'à la fin Wend 'Nettoyage avant de sortir 'on libère les variables Set Rs = Nothing Set Doc = Nothing 'si on a dû ouvrir une session Word, on la referme (si non, on laisse la main à l'utilisateur If bolOpenedWord = True Then objWord.Quit End If End Sub
Repère l'endroit où je dis que je n'en sors pas, essaie chez toi et décris ce que tu vois.
Je viens de passer à Windows 7 et c'est peut-être l'origine de mon problème.
Bonjour Claude,
Un grand merci pour les commentaires !!!
Pour moi ça plante pas, il affiche bien le msgbox.
Peut être que ton problème est lié à ta version d'Access ou de Système.
Parcontre je voudrais pouvoir saisir dans un champ le mot clé à rechercher dans une zone de texte et quand je clique sur le bouton Rechercher soit :
-il m'affiche dans le formulaire, une liste des fichiers qui contiennent la chaine recherchée pour qu'on puisse ensuite ouvrir les fichiers sur clique.
-soit il m'affiche directement dans le formulaire la page word concernée.
Bonjour,
Encore un peu de temps je prépare un petit exemple.
Mon problème est résolu : j'ai remplacé Word2003 par Word2000 et cette fois le code fonctionne.
À bientôt.
Voici un exemple de code pour rechercher, au départ d’Access si des documents Word contiennent un texte donné.
Une table tChemins contient les champs :
Id : clé autonum
Chemin : le chemin complet des documents à explorer
FlagTrouve : booléen.
Dans le formulaire fRecherche, l’utilisateur saisit un texte à rechercher dans la zone de texte : zdtMotCle.
La mise à jour de ce contrôle provoque l’exécution de ce code :
Ce qui aboutit à positionner le FlagTrouve à Yes pour les documents qui ont satisfait au critère de recherche.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73 Private Sub zdtMotCle_AfterUpdate() If IsNull(Me.ActiveControl) Then MsgBox "Vous devez introduire un texte à rechercher", vbCritical 'Mettre la liste des documents trouvés à blanc Me.ZdlDocumentsTrouves.RowSource = "" Exit Sub End If 'Ceci suppose que la référence Microsoft Word xx.x Object Library a été ajoutée 'Menu Outils>References et cocher Microsoft Word xx.x Object Library dans la liste 'Défition des variables pour piloter Word Dim objWord As Word.Application Dim Doc As Word.Document 'Définition d'un drapeau qui indiquera si nous avons dû ouvrir une session Word '(il se pourrait que l'utilisateur en ait déjà ouvert une) Dim bolOpenedWord As Boolean 'Définition de variables utiles à notre application Dim Rs As DAO.Recordset 'ceci suppose que la référence Microsoft DAO X.X Object Library a été ajoutée 'Nous tentons de récupérer une session Word déjà ouverte On Error Resume Next 'S'il n'y a pas de session ouverte, l'instruction suivante va provoquer une erreur (N° 429) Set objWord = GetObject(, "Word.Application") 'Nous traitons ici l'erreur éventuelle : Nous devons ouvrir une session Word If Err.Number = 429 Then Set objWord = CreateObject("Word.Application") bolOpenedWord = True 'ceci pour nous rappeler de refermer Word en fin de programme End If 'Fin du traitement de l'erreur éventuelle On Error GoTo 0 'Pour notre confort de contrôle (pendant la mise au point) nous rendons l'application visible objWord.Visible = True 'Préparons un processus pour lire, un après l'autre, le chemin de chaque document à traiter 'Créons un RecordSet basé sur la table "tChemins" ([Id],[Chemin],[FlagTrouve]) Set Rs = CurrentDb.OpenRecordset("SELECT * From tChemins") 'On lance une boucle pour lire chaque chemin et lui appliquer le traitement souhaité While Not Rs.EOF Set Doc = objWord.Documents.Open(Rs.Fields("Chemin").Value) 'Rechercher le mot-clé dans le document actuellement ouvert objWord.Selection.Find.Execute FindText:=Forms!fRecherche!zdtMotCle 'si le mot est trouvé, "objWord.Selection.Find.Execute" vaut True, si non False 'on reporte cette valeur dans le champ FlagTrouve de la table Rs.Edit Rs.Fields("FlagTrouve") = objWord.Selection.Find.Execute Rs.Update 'Quand le traitement est terminé pour ce document, on le referme Doc.Close 'On passe au suivant Rs.MoveNext 'Et on boucle, jusqu'à la fin Wend 'Nettoyage avant de sortir 'on libère les variables Set Rs = Nothing Set Doc = Nothing 'si on a dû ouvrir une session Word, on la referme (si non, on laisse la main à l'utilisateur If bolOpenedWord = True Then objWord.Quit End If 'Vérifier qu'on a trouvé au moins un document If DCount("*", "tChemins", "FlagTrouve=True") <> 0 Then 'il y a des documents trouvés 'Afficher le résultat dans le formulaire Me.ZdlDocumentsTrouves.RowSource = "SELECT [tChemins].[Chemin] FROM tChemins " _ & "WHERE ((([tChemins].[FlagTrouve])=Yes));" DoCmd.GoToControl "ZdlDocumentsTrouves" ZdlDocumentsTrouves.Dropdown Else 'on n'a rien trouvé MsgBox "Aucun document trouvé !", vbInformation End If End Sub
Une zone de liste modifiable se déploie pour afficher le chemin des documents trouvés.
L’utilisateur clique sur l’un des chemins pour ouvrir le document, grâce à ce code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Private Sub ZdlDocumentsTrouves_AfterUpdate() 'Ouvrir le document choisi ' cette instruction équivaut à un double-clic sur le nom d'un fichier 'pour provoquer son ouverture avec le programme qui lui est associé. Shell "C:\WINDOWS\EXPLORER.EXE " & Me.ZdlDocumentsTrouves, vbNormalFocus End Sub
Salut, un grand merci à toi Claude .
Mais moi quand je clique sur un lien (dans la zone de liste) j'ai un code d'erreur d'exécution 76 chemin d'accés introuvable.
Apparament j'ai pas accès sur C:\WINDOWS\EXPLORER.EXE
Bonjour,
Pour vérifier qu'il y a bien explorer.exe , ouvre la commande éxecuter "Ctrl + Windows" et saisit "explorer.exe"
Explorer.exe est un fichier système qui te permet de naviguer entre les fichiers de Windows donc il faut l'ouvrir avec un fichier.
Peux tu essayer avec cette ligne de code
Code : Sélectionner tout - Visualiser dans une fenêtre à part Shell "C:\WINDOWS\EXPLORER.EXE /n,/e," & CHEMINCOMPLETDUFICHIER ", vbNormalFocus
Si tu emploies Explorer comme navigateur, il est peut-être à un autre endroit sur ton PC. Dans ce cas, modifie le chemin renseigné dans mon code.
Si tu utilises un autre navigateur, cherche comment il fonctionne en ligne de commande et adapte l'instruction Shell en conséquence.
SALUT,
@ Lelensois16 : j'ai testé la commande mais ça marche toujours pas.
Quand j'execute (explorer.exe) il me renvoie vers mes documents.
@ Claude : Oui j'utilise Explorer mais j'ai pas accés à Windows, mon compte est limité, j'ai pas un compte administrateur sur cette machine avec laquelle je travaille, de même que tous les gens (3 autres personnes) qui auront à utiliser l'application.
En tout cas merci pour tout !!!
Essaie comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Private Sub ZdlDocumentsTrouves_AfterUpdate() 'Ouvrir le document choisi ' cette instruction équivaut à un double-clic sur le nom d'un fichier 'pour provoquer son ouverture avec le programme qui lui est associé. Shell "EXPLORER.EXE " & Me.ZdlDocumentsTrouves, vbNormalFocus End Sub
Oui finalement ça marche avec cette commande !
Je tiens à vous remercier vous tous, particulièrement Claude LELOUP, Olivier LEBEAU, Lelensois16, Godzestla.
Après avoir recherché un fichier par mot clé, il y’a seulement un paragraphe qui m’intéresse sur la page word qui s’affiche.
Et l’objectif c’est de générer automatiquement un document word comportant différents paragraphes recherchés.
Je voudrais :
Un bouton pour créer une nouvelle page word : ok
Faire la recherche du paragraphe : ok
Et quand je sélectionne le paragraphe avec le souris, qu’il soit directement copié dans la nouvelle page créée ?
Diviser l’écran en deux parties pour avoir l’œil sur tout. Sur la première partie ma nouvelle page créée et qui se rempli au fur et à mesure et sur l’autre partie soit le formulaire de recherche soit le résultat de la recherche. ?
Rechercher encore un autre paragraphe qui sera ensuite copié dans la même page créée (en dessous du premier paragraphe) ok
Et au final je pourrai générer ma nouvelle page.
J’ai pensé à quelque chose comme ça :
Est ce que quelqu'un sait si les deux point où j'ai mis les points d'interrogations sont faisables sur VBA ?
Est ce que necessaire que je crée un nouveau sujet de discussion et marqué celui-ci comme résolu ? ou j'attends que tout soit résolu ?
Merci d'avance !
Dis, blague dans le coin, les prévisions météo ça ne t'intéresse pas ?
Pour ton premier "?" , tu es dans Word
=>
- (<CTRL> + <C>) pour copier le paragraphe dans le presse-papier ;
- un clic dans la barre des menus, pour ouvrir un nouveau document ;
- (<CTRL> + <V>) pour y coller le presse-papier.
Quant au deuxième "?", il doit bien y avoir un moyen mais la valeur ajoutée me paraît faible en regard de la complexité.
Bonne continuation.
Okay Claude, mais je comprends pas ta phrase :
Dis, blague dans le coin, les prévisions météo ça ne t'intéresse pas ?
Merci !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager