Utilisations successives de word

Résolu
cs_buzzo Messages postés 29 Date d'inscription jeudi 20 janvier 2005 Statut Membre Dernière intervention 30 novembre 2006 - 1 juin 2006 à 22:01
cs_buzzo Messages postés 29 Date d'inscription jeudi 20 janvier 2005 Statut Membre Dernière intervention 30 novembre 2006 - 9 juin 2006 à 19:29
Bonjour à tous,

J'ai un petit problème qui dépasse mes connaissances actuelles en VB.
J'ai dévellopé un programme (en VB) qui utilise word pour créer divers documents, cela se résume à de l'écriture de texte et un copié collé depuis excel.

Mon code trouvé avec bonheur sur vbFrance commence ainsi :

   Dim docword As New Word.Application
    Set docword = CreateObject("word.application")
    docword.Visible = True
    docword.DisplayAlerts = False 

possède ceci au milieu :
   
   docword.Documents.add
   docword.Selection.Paste
   docword.Selection.PageSetup.TopMargin = CentimetersToPoints(0.7)

et se termine ainsi :

   ' Set docword = Nothing
   word.Application.Quit

Pas de problèmes lors de la première exécution de la fonction. Mon programme vie sa vie ensuite et lorsque je relance une seconde fois cette fonction et quand le programme execute la ligne "docword.Selection.PageSetup.TopMargin = CentimetersToPoints(0.7)"
il s'arrête et m'affiche le message d'erreur suivant :

Erreur d’exécution ‘462’ :

Le serveur distant n’existe pas ou n’est pas disponible

Alors je me suis demandé si je fermais correctement word et il me semble que c'est le cas, car entre deux exécution word disparait des processus.
si je quitte mon programme, que je le relance la première exécution fonctionne à nouveau normalement et rebelotte...
Quelqu'un aurait une idée sur l'erreur que je commet ?

Merci d'avance pour vos réponse.
Matthieu.

10 réponses

econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
2 juin 2006 à 08:39
Ton message apparaît parce que le server Word a probablement disparu et que tu essayes de l'appeler.


1) Ouvrir le serveur Word

2)  Début de boucle

3)    Ajouter un document

4)    Ecrire dans le document

5)    Fermer le document actif

6)  Fin de boucle

7) Fermer le serveur Word

    Dim docword As New Word.Application

    Set docword = CreateObject("word.application")

    docword.Visible = True

    docword.DisplayAlerts = False 

Début de Boucle (For, While, ...)

   

   docword.Documents.Add

   docword.Selection.Paste

   docword.Selection.PageSetup.TopMargin = CentimetersToPoints(0.7)
   docword.ActiveDocument.SaveAs "le nom qui va bien"

   docword.ActiveDocument.Close

Fin de boucle (Next, Wend, ...)


  docword.Quit

  Set docword = Nothing

Manu
--------------------------------------------------------------------------------------------
Avant de poster un message, n'oubliez pas de consulter le reglement.
3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
2 juin 2006 à 01:15
Salut,

Je peux pas te dire si c'est lié mais tu as mis ceci :

>et se termine ainsi :

> ' Set docword = Nothing
> word.Application.Quit

devant Set docword, ily a une ' qui est l'equivalent de REM
bref, c'est un commentaire et du coup docword "ne se vide pas".

enlève l'apostrophe et voit si ça fonctionne.

@++

--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement !
0
cs_buzzo Messages postés 29 Date d'inscription jeudi 20 janvier 2005 Statut Membre Dernière intervention 30 novembre 2006
2 juin 2006 à 11:03
Tout d'abord merci pour vos réponse. En effet l'apostrophe devant "Set docword = Nothing" est une erreur de ma part lorsque j'ai écrit ma question parce que je faisait différents essais dans mon programme. normalement il n'y en a pas.

Econs, Je fait exactement la procédure que tu m'as détaillée, et elle marche ! Ce code appartient à une fonction et j'arrive à créer mes lettres successivement sans problèmes. le programme quitte la fonction et attend alors une action de ma part. Quand je relance une seconde fois cette fonction le programme plante au moment de modifier les marges.

Si je ne fait pas l'instruction docword.Quit,à la fin de la fonction j'ai une fenêtre word d'active sans documents d'ouvert. si je relance ma fonction une deuxième fois, une nouvelle instance de word démarre et la fonction se termine normalement. A la fin de ces deux exécution, j'ai deux fenêtre word active sans documents d'ouverts...

Une autre partie de mon programme utilise également word et c'est à l'utilisateur de quitter lui même le document d'ouvert, là il n'y a pas de problème, c'est partie du code peut s'éxécuter autant de fois que je le veux.

Pourtant j'ouvre word toujours de la même façon...Pensez vous avoir une solution ?

Merci d'avance. Matthieu
0
cs_buzzo Messages postés 29 Date d'inscription jeudi 20 janvier 2005 Statut Membre Dernière intervention 30 novembre 2006
3 juin 2006 à 09:43
Bonjour à tous,

j'ai trouvé ma solution à force d'essais...Finalement ça reprend ce que tu disais econs, c'était juste pour moi une question d'échelle vis à vis de mon programme : La boucle, c'est en faite ma fonction que je n'arrivais pas à faire deux fois. Plutôt que d'ouvrir et de fermer le serveur word dans cette fameuse fonction, je l'ouvre et je le ferme lors du chargement et déchargement de la form qui contient cette fonction. Ainsi je peut répéter ma fonction mainte fois sans que le serveur word soit doublé voir triplé. Quand je regarde mes processus lors du chargement et déchargement de la form c'est un plaisir de voir winword.exe s'ouvrir et s'effacer...

Bonne journée !
Matthieu
0

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

Posez votre question
ahmed84 Messages postés 3 Date d'inscription mardi 14 juin 2005 Statut Membre Dernière intervention 8 juin 2006
7 juin 2006 à 12:27
Salut tout le monde.

J'exporte une table vers une autre table sous Word.
J'ai le même problème de Mr.buzzo, j'ai la méme erreur :

Erreur d’exécution ‘462’ :

" Le serveur distant n’existe pas ou n’est pas disponible "
Quand je relance une deuxième fois l'exécution, elle s'arrête lors de la création de la table sous Word :

Document.ActiveDocument.Tables.Add Range:=Selection.Range, _ NumRows:=rs_piece.RecordCount + 1, NumColumns:=5

Merci d'avance
0
cs_buzzo Messages postés 29 Date d'inscription jeudi 20 janvier 2005 Statut Membre Dernière intervention 30 novembre 2006
7 juin 2006 à 13:24
Tu travail uniquement avec des macros Word ou depuis VB ?
(Je suis un peu pressé dsl, je prendrais plus de temps ce soir pour essayer de t'aider)
0
ahmed84 Messages postés 3 Date d'inscription mardi 14 juin 2005 Statut Membre Dernière intervention 8 juin 2006
7 juin 2006 à 13:42
Tout d'abord merci Mr. buzzo.
Je travail depuis VB.

Bonnne journée Buzzo.
0
cs_buzzo Messages postés 29 Date d'inscription jeudi 20 janvier 2005 Statut Membre Dernière intervention 30 novembre 2006
7 juin 2006 à 19:44
ok !
Alors Mr Buzzo va essayer de t'aider ;-). Je ne sais pas comment tu as fait tes déclarations et je vais m'inspirer des miennes pour te donner un exemple.

Voilà donc comment je déclare mon objet Word

Dim docword As New Word.Application
   Set docword = CreateObject("word.application")
    docword.Visible = True
    docword.DisplayAlerts = False 

Toutes mes lignes de codes destinées à Word commencent par

docword.

C'est certe un peu bourrin et je pense qu'il est possible de faire plus simple, avec
With docword
...
end with
ça doit marcher....

bref, ça c'est un premier conseil et c'est peut être ce que tu fais déjà. Ensuite, et ça à été la source de mon problème, la fameuse erreur '462' était générée quand je fermait trop tôt Word et que j''utilisais toujours des instruction le concernant par la suite.
Ton problème est similaire au miens car à la deuxième exécution tu plantes lors de ta première instruction vers Word.

Voilà ce que j'ai appliqué et qui a résolu mon problème:
ne déclare ton objet "word.application" qu'au chargement de ta form et pense surtout à le décharger :
"set docword = nothing" (pour mon cas)
lorsque tu quitte ta form. Entre deux tu peux normalement faire ce que tu veux avec word.
regarde tes processus également quand ta form se charge et se décharge, le processus "WINWORD.EXE" doit apparaitre et disparaitre.

Voilà j'espère que ça va marcher sinon toi nous au courant !
may the force be with you.
0
ahmed84 Messages postés 3 Date d'inscription mardi 14 juin 2005 Statut Membre Dernière intervention 8 juin 2006
8 juin 2006 à 11:16
Salut,
J'ai suis toutes vos conseils et tpujours le même problème, il y a une remarque : dans ma fonction j'écrit d'abord une ligne avant que je passe au dessin du tableau, la ligne s'écrit bien mais le tableau non !! La procédure qui dessine le tableau est la suivante :

Private Sub Word_Dessiner_Tableau(ByRef Document As Word.Application)   
    With Document
    .ActiveDocument.Tables.Add Range:=Selection.Range, _
    NumRows:=rs_chaine.RecordCount + 1, NumColumns:=3

    Word_Modifier_Texte Document
    .Selection.TypeText Text:="Année"
   
    .Selection.Move
    Word_Modifier_Texte Document 'procédure qui change lapolice, la taille d'écriture
    .Selection.TypeText Text:="Numéro de la chaine"
   
    .Selection.Move
    Word_Modifier_Texte Document
    .Selection.TypeText Text:="Code du service"
   
    rs_chaine.Requery ' un recordesat relier a une table

    Do Until rs_chaine.EOF
   
       .Selection.Move
       .Selection.TypeText Text:=rs_chaine.Fields(1)
   
       .Selection.Move
       Word_Modifier_Texte_Bis Document
       .Selection.TypeText Text:=rs_chaine.Fields(2)
   
       .Selection.Move
       Word_Modifier_Texte_Bis Document
       .Selection.TypeText Text:=rs_chaine.Fields(3)
  
       rs_chaine.MoveNext
    Loop

    End With
End Sub
0
cs_buzzo Messages postés 29 Date d'inscription jeudi 20 janvier 2005 Statut Membre Dernière intervention 30 novembre 2006
9 juin 2006 à 19:29
Je suis désolé mais ça dépasse mes compétences. je ne saurai t'en dire plus !
0
Rejoignez-nous