Utilisations successives de word [Résolu]

Messages postés
30
Date d'inscription
jeudi 20 janvier 2005
Dernière intervention
30 novembre 2006
- 1 juin 2006 à 22:01 - Dernière réponse :
Messages postés
30
Date d'inscription
jeudi 20 janvier 2005
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.
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Messages postés
4066
Date d'inscription
mardi 13 mai 2003
Dernière intervention
23 décembre 2008
- 2 juin 2006 à 08:39
3
Merci
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.

Merci econs 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 91 internautes ce mois-ci

Commenter la réponse de econs
Messages postés
6812
Date d'inscription
vendredi 16 décembre 2005
Dernière intervention
21 décembre 2011
- 2 juin 2006 à 01:15
0
Merci
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 !
Commenter la réponse de mortalino
Messages postés
30
Date d'inscription
jeudi 20 janvier 2005
Dernière intervention
30 novembre 2006
- 2 juin 2006 à 11:03
0
Merci
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
Commenter la réponse de cs_buzzo
Messages postés
30
Date d'inscription
jeudi 20 janvier 2005
Dernière intervention
30 novembre 2006
- 3 juin 2006 à 09:43
0
Merci
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
Commenter la réponse de cs_buzzo
Messages postés
3
Date d'inscription
mardi 14 juin 2005
Dernière intervention
8 juin 2006
- 7 juin 2006 à 12:27
0
Merci
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
Commenter la réponse de ahmed84
Messages postés
30
Date d'inscription
jeudi 20 janvier 2005
Dernière intervention
30 novembre 2006
- 7 juin 2006 à 13:24
0
Merci
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)
Commenter la réponse de cs_buzzo
Messages postés
3
Date d'inscription
mardi 14 juin 2005
Dernière intervention
8 juin 2006
- 7 juin 2006 à 13:42
0
Merci
Tout d'abord merci Mr. buzzo.
Je travail depuis VB.

Bonnne journée Buzzo.
Commenter la réponse de ahmed84
Messages postés
30
Date d'inscription
jeudi 20 janvier 2005
Dernière intervention
30 novembre 2006
- 7 juin 2006 à 19:44
0
Merci
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.
Commenter la réponse de cs_buzzo
Messages postés
3
Date d'inscription
mardi 14 juin 2005
Dernière intervention
8 juin 2006
- 8 juin 2006 à 11:16
0
Merci
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
Commenter la réponse de ahmed84
Messages postés
30
Date d'inscription
jeudi 20 janvier 2005
Dernière intervention
30 novembre 2006
- 9 juin 2006 à 19:29
0
Merci
Je suis désolé mais ça dépasse mes compétences. je ne saurai t'en dire plus !
Commenter la réponse de cs_buzzo

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.