Problème de génération Word lorsque plusieurs documents sont ouverts

wismerhillbest Messages postés 5 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 8 août 2008 - 8 août 2008 à 08:53
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 8 août 2008 à 19:39
Bonjour,

Je vous expose mon problème :
Grace à une application Access, je dois générer un document Word dont la plupart des informations proviennent de la base de données.

Dans le code, je définis donc un objet Word_Application dans lequel j'ouvre un document "Nom_Document"
Public Word_Application As New Word.Application
Set Word_Application = CreateObject("Word.Application")
Word_Application.Documents.Open FileName:=Nom_Document


Le Problème :
Lorsque le programme est en train de générer le document Word, si je lance un autre document Word (nouveau ou existant), la génération Word continue sur le document actif. Je n'arrive pas à le faire rester sur le document "Nom_Document" ouvert via l'instruction .Open

J'ai réussi plus ou moins à cerner le problème. J'arrive parfois à faire fonctionner le programme à condition que dans l'objet Word_Application, il ne me retourne que 1 document via l'instruction suivante
Word_Application.Documents.Count


Dans le cas où il y a problème, c'est parce qu'il me renvoie 2 ou 3 suivant le nombre de fichiers ouverts.

Avez vous une idée pour résoudre ce problème ?
Sachant que ce qu'il faudrait, c'est qu'il se trouve un processus Word associé à chacun des documents ouverts ce qui je pense permettrait de résoudre le problème.

Merci d'avance.

PS : Pour précision
Cette application a été récupéré dans l'état afin de la maintenir et toute l'application est codée dans ce sens à savoir

Word_Application.selection.PageSetup.LeftMargin = 70
Word_Application.selection.GoTo What:=wdGoToLine, Which:=wdGoToAbsolute, Count:=Numéro_ligne
Word_Application.selection.HomeKey Unit:=wdLine


Or il n'est pas possible d'effectuer ces opérations sur un objet document mais uniquement sur un objet Word (enfin il me semble).

Merci d'avance

10 réponses

gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
8 août 2008 à 09:22
n'y a t'il pas moyen de forcer une session Word "cachée" pour qu'elle n'interfère pas avec d'autres documents???

bonjour chez vous!
< body>
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
8 août 2008 à 09:24
Public Word_Application As New Word.Application
Set Word_Application = CreateObject("Word.Application")

félicitations, tu as lancé deux instances de Word...

soit faire :
Public Word_Application As New Word.Application

soit :
Public Word_Application As Word.Application
Set Word_Application = CreateObject("Word.Application")

soit:
Public Word_Application As Word.Application
Set Word_Application = New Word.Application


pour ton probleme, ne bosse plus sur l'application Word...
mais sur l'instance de ton document
0
wismerhillbest Messages postés 5 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 8 août 2008
8 août 2008 à 09:40
Pour infos, j'étais bien passé dans un premier temps par :
Public Word_Application As Word.Application

Set Word_Application = CreateObject("Word.Application")

Le soucis, c'est que j'ai tenté plein de chose en fonction des réponses des différents forums sur lequel j'ai posé ma question.

La ligne de code suivante ne m'a jamais lancé 2 processus WINWORD donc je ne sais pas si 2 instances ont été créées.
Public Word_Application As New Word.Application

Set Word_Application = CreateObject("Word.Application")

J'aurai bien voulu travailler sur l'instance de mon document mais comme je l'ai dis plus haut, l'ensemble de l'application est codée de cette manière :
Word_Application.selection.PageSetup.LeftMargin = 70
Word_Application.selection.GoTo What:=wdGoToLine, Which:=wdGoToAbsolute, Count:=Numéro_ligne
Word_Application.selection.HomeKey Unit:=wdLine

Il n'est pas possible d'avoir les mêmes fonctionnalités entre l'instance Word et l'instance du document. Le nombre de lignes de codes à changer étant énorme, je préfère ne rien toucher au risque de régression et une charge de travail supplémentaire non négligeable.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
8 août 2008 à 09:45
tu n'as pourtant pas le choix...

si tu ne précise pas le document employé, Word va utiliser le document actif.

tu aura donc des interferences, si tu joues avec Word pendant ce même labs de temps.
0

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

Posez votre question
wismerhillbest Messages postés 5 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 8 août 2008
8 août 2008 à 09:45
n'y a t'il pas moyen de forcer une session Word "cachée" pour qu'elle n'interfère pas avec d'autres documents???

Justement, j'ai essayé mais je n'y suis pas encore arrivé. Je voulais bien définir une instance unique de Word lors de la création de mon objet.
Mais lorsque je lance un nouveau document Word, il utilise la même instance au lieu d'en utiliser une autre.

Par contre, si je lance un autre document Word puis mon programme, je n'ai plus aucun problème (même si je relance un autre document Word apres le début du programme car il y a 2 instances de Word (1 pour mon programme et 1 pour les autres documents ouverts manuellement)
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
8 août 2008 à 09:49
quand tu lance Word, il fait un appel à GetObject, cherchant une instance, dans le but d'accelerer le chargement.

dans ton code, tu spécifie clairement que tu souhaites une nouvelle instance, donc pas de souci.

il faudrait un moyen pour dire que notre objet n'est pas libre...
le supprimer de la ROT, en quelque sorte, j'ignore si c'est faisable, mais ca n'induirait que peu de charge.
0
wismerhillbest Messages postés 5 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 8 août 2008
8 août 2008 à 09:55
Peux tu m'expliquer ce qu'est la ROT pour que je me renseigne de ce coté ?
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
8 août 2008 à 10:08
"Running Object Table"

c'est là ou va chercher GetObject
0
wismerhillbest Messages postés 5 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 8 août 2008
8 août 2008 à 16:57
Après plusieurs recherches, je n'ai pas réussi à trouver comment gérer la ROT.
Vu que je n'ai pas beaucoup le temps d'aller plus loin, j'ai fait une petite bidouille (qui n'est certes pas propre mais qui a l'air de fonctionner).

En fait, je me suis aperçu que lorsqu'on ouvre un document Word alors que plusieurs process existent, celui-ci vient se rattacher au premier processus Word ouvert (à vérifier) donc, j'ai créé 2 instances de Word et je travaille sur la deuxième.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
8 août 2008 à 19:39
...
j'ai pas pensé a cette astuce.

effectivement, c'est tout bête ^^
0
Rejoignez-nous