OVH Cloud OVH Cloud

Pb automation : blocage Word

6 réponses
Avatar
Alex
Bonjour,
Dans mon appli Access, j'utilise l'automation pour=20
g=E9n=E9rer des documents Word (Win XP, Office XP pour moi et=20
l'utilisateur mentionn=E9 ci-dessous).

Le probl=E8me est que pour un utilisateur, la g=E9n=E9ration=20
d'un certain type de document Word (bons de=20
commande) "plante" : une partie du document est g=E9n=E9r=E9e,=20
puis arriv=E9 =E0 un certain point Word se "freeze" en=20
mangeant toutes les ressources processeur et la=20
g=E9n=E9ration du document n'est jamais achev=E9e.
Tous les autres types de doc (factures par ex) marchent=20
apparemment sans souci.

J'ai essay=E9 de reproduire le probl=E8me en reprenant le=20
fichier de tables de l'utilisateur en question mais sans=20
succ=E8s (la g=E9n=E9ration du document fonctionne).

Dans une tentative de localisation du probl=E8me, j'ai=20
ajout=E9 des msgbox" =E0 diff=E9rents points de ma fonction de=20
g=E9n=E9ration de doc. Et l=E0 en testant la fonction avec les=20
msgbox sur ma machine j'ai eu le m=EAme pb que mes=20
utilisateurs. En supprimant tous les msgbox, =E7a remarche=20
parfaitement. J'ai alors essay=E9 de remettre tous les=20
msgbox sauf un ou deux (les derniers), et comme je le=20
soup=E7onnais le freeze ne se produit plus au m=EAme endroit=20
(il a lieu plus loin dans la fonction).

Je me demande donc si le freeze ne serait pas li=E9 =E0 des=20
probl=E8me "temporels" : expiration d'un d=E9lai entre deux=20
appels automation, probl=E8me de temps total d'ex=E9c. de la=20
fonction, ou quelque chose de ce genre (je pr=E9cise que la=20
machine de l'utilisateur est beaucoup moins puissante que=20
ma machine de d=E9veloppement).

Toutes les pistes et les suggestions que vous auriez sont=20
souhait=E9es et accept=E9es :)

Merci d'avance !

6 réponses

Avatar
Raymond [mvp]
Bonjour.

tu dois avoir des fonctions comme celle-ci:

.PrintOut

remplace les par :
.PrintOut False

false permet à access d'attendre la fin de l'impression dans le spooler,
sinon selon le processeur, l'imprimante etc...... le document s'imprimera
n'importe comment et le pire c'est lors d'un bourrage.


--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Alex" a écrit dans le message de
news:03eb01c3c633$0761af60$
Bonjour,
Dans mon appli Access, j'utilise l'automation pour
générer des documents Word (Win XP, Office XP pour moi et
l'utilisateur mentionné ci-dessous).

Le problème est que pour un utilisateur, la génération
d'un certain type de document Word (bons de
commande) "plante" : une partie du document est générée,
puis arrivé à un certain point Word se "freeze" en
mangeant toutes les ressources processeur et la
génération du document n'est jamais achevée.
Tous les autres types de doc (factures par ex) marchent
apparemment sans souci.

J'ai essayé de reproduire le problème en reprenant le
fichier de tables de l'utilisateur en question mais sans
succès (la génération du document fonctionne).

Dans une tentative de localisation du problème, j'ai
ajouté des msgbox" à différents points de ma fonction de
génération de doc. Et là en testant la fonction avec les
msgbox sur ma machine j'ai eu le même pb que mes
utilisateurs. En supprimant tous les msgbox, ça remarche
parfaitement. J'ai alors essayé de remettre tous les
msgbox sauf un ou deux (les derniers), et comme je le
soupçonnais le freeze ne se produit plus au même endroit
(il a lieu plus loin dans la fonction).

Je me demande donc si le freeze ne serait pas lié à des
problème "temporels" : expiration d'un délai entre deux
appels automation, problème de temps total d'exéc. de la
fonction, ou quelque chose de ce genre (je précise que la
machine de l'utilisateur est beaucoup moins puissante que
ma machine de développement).

Toutes les pistes et les suggestions que vous auriez sont
souhaitées et acceptées :)

Merci d'avance !
Avatar
Bonjour Raymond,
Désolé, j'ai du mal m'exprimer.
Quand je parlais de générations de document, il ne
s'agissait pas directement d'impression mais de création
de fichier .doc.

En fait mes fonctions de création de doc suivent le
schéma suivant :
- L'utilisateur clique sur un bouton "créer doc"
- Création d'une instance Word (via un CreateObject
("Word.Application"))
- On rend Word invisible via la prop. Visible de l'obj.
Application
- Ensuite via les appels automation, on crée un nouveau
fichier .doc à partir d'un .dot, et on insère le texte
issu des données des tables aux emplacements définis par
des signets dans le modèle
- On sauvegarde le .doc créé
- enfin on rend visible Word pour que l'utilisateur
puisse faire des corrections éventuelles et lancer
l'impression du document.


-----Message d'origine-----
Bonjour.

tu dois avoir des fonctions comme celle-ci:

..PrintOut

remplace les par :
..PrintOut False

false permet à access d'attendre la fin de l'impression
dans le spooler,

sinon selon le processeur, l'imprimante etc...... le
document s'imprimera

n'importe comment et le pire c'est lors d'un bourrage.


--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum




Avatar
Raymond [mvp]
Bonsoir.

Apparemment il n'y a pas beaucoup de code.
ça peut venir de ta façon d'ouvrir le fichier .
comment l'ouvres tu ? fais tu un open du .dot ou un add d'un document vierge
d'après le .dot ? si tu ouvres le .dot directement ça peut poser des
problèmes, je ne sais pas où dans ton cas mais il vaudrait mieux créer un
.doc d'après le .dot
With W_App
.Documents.Add (mon.dot)
.ActiveDocument.SaveAs "c:Doc2.Doc"

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


a écrit dans le message de
news:00d701c3c64d$b0ba80e0$
Bonjour Raymond,
Désolé, j'ai du mal m'exprimer.
Quand je parlais de générations de document, il ne
s'agissait pas directement d'impression mais de création
de fichier .doc.

En fait mes fonctions de création de doc suivent le
schéma suivant :
- L'utilisateur clique sur un bouton "créer doc"
- Création d'une instance Word (via un CreateObject
("Word.Application"))
- On rend Word invisible via la prop. Visible de l'obj.
Application
- Ensuite via les appels automation, on crée un nouveau
fichier .doc à partir d'un .dot, et on insère le texte
issu des données des tables aux emplacements définis par
des signets dans le modèle
- On sauvegarde le .doc créé
- enfin on rend visible Word pour que l'utilisateur
puisse faire des corrections éventuelles et lancer
l'impression du document.
Avatar
Bonjour,
Pour l'ouverture des .dot j'utilise bien la méthode que
tu conseilles (.add d'après le .dot).
Sinon il y a au contraire pas mal de code car de nombreux
signets à remplir (environ 50 en moyenne) et aussi pas
mal de logique derrière car suivant la valeur de
certaines informations, il faut soit ne pas faire
apparaître certaines autres informations, soit les faire
apparaître à un autre endroit...
Avatar
Raymond [mvp]
bonjour.

essaie de placer quelques DoEvents pour laisser access reprendre la main ,
mais je ne sais pas où, commence par en mettre plusieurs avant les fonctions
qui on déjà planté.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


a écrit dans le message de
news:048d01c3c870$9fbe0a30$
Bonjour,
Pour l'ouverture des .dot j'utilise bien la méthode que
tu conseilles (.add d'après le .dot).
Sinon il y a au contraire pas mal de code car de nombreux
signets à remplir (environ 50 en moyenne) et aussi pas
mal de logique derrière car suivant la valeur de
certaines informations, il faut soit ne pas faire
apparaître certaines autres informations, soit les faire
apparaître à un autre endroit...
Avatar
Alex
Bonsoir,
Quelques vacances plus tard... (Bonne année au fait !)
J'allais essayer cette suggestion quand le client m'a
contacté pour me signaler qu'une simple défragmentation
avait résolu le problème...

Qui a dit que le père Noël n'existait pas ? ;)

Alex
PS : Merci quand même Raymond pour le coup de main !

-----Message d'origine-----
bonjour.

essaie de placer quelques DoEvents pour laisser access
reprendre la main ,

mais je ne sais pas où, commence par en mettre plusieurs
avant les fonctions

qui on déjà planté.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


a écrit dans le
message de

news:048d01c3c870$9fbe0a30$
Bonjour,
Pour l'ouverture des .dot j'utilise bien la méthode que
tu conseilles (.add d'après le .dot).
Sinon il y a au contraire pas mal de code car de nombreux
signets à remplir (environ 50 en moyenne) et aussi pas
mal de logique derrière car suivant la valeur de
certaines informations, il faut soit ne pas faire
apparaître certaines autres informations, soit les faire
apparaître à un autre endroit...


.