Travailler avec plusieurs documents Word

Résolu
Signaler
Messages postés
17
Date d'inscription
jeudi 17 novembre 2011
Statut
Membre
Dernière intervention
28 novembre 2011
-
Messages postés
17
Date d'inscription
jeudi 17 novembre 2011
Statut
Membre
Dernière intervention
28 novembre 2011
-
Bonjour,

Ma macro EXCEL devrait écrire du texte dans deux documents WORD différents. Pour cela, j'ai créé deux objets 'Documents' (TheDoc_1 et TheDoc_2), pensant naïvement qu'il suffirait d' "envoyer" le texte à insérer à l'un ou l'autre de ces deux objets selon le cas. Surprise, ça ne marche pas!

En plus, le changement de taille de police me renvoie systématiquement une erreur:

With TheDoc_1.Application.Selection
.Font.Name "Tahoma" <--- OK .Font.Size 18 <--- Erreur 5: Argument ou appel de procédure incorrect . ParagraphFormatAlignment=wdAlignParagraphCenter <--- OKEnd with

Des idées ?

Merci d'avance,
Hervé

13 réponses

Messages postés
17
Date d'inscription
jeudi 17 novembre 2011
Statut
Membre
Dernière intervention
28 novembre 2011

A l'imbécile idiot !! J'avais oublié le .MoveRight

Il ne reste plus que le problème de .Font.Size
Messages postés
7614
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
4 décembre 2021
128
Bonjour,
Essaie ceci:

Sub text_word()
     Dim oWord As Word.Application
    'Créer une instance de word
   Set oWord = CreateObject("Word.Application")
    oWord.Documents.Open ("chemin document.doc") 'chemin du fichier doc
    oWord.ShowMe
    'rendre le document word visible
    oWord.Visible = True
'code pour les différentes opérations
   With oWord.Selection
   .TypeText Text:=[A1] & ", "
   .Font.Size = 18
   .Font.Name = "Tahoma"
   .ParagraphFormat.Alignment = wdAlignParagraphCenter
     End With
End Sub


et la même chose pour le 2ème document
@+Le Pivert
Messages postés
7614
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
4 décembre 2021
128
Pour la ligne

.TypeText Text:=[A1] & ", "


Il faut lire

.TypeText Text:="mettre le texte"
Messages postés
17
Date d'inscription
jeudi 17 novembre 2011
Statut
Membre
Dernière intervention
28 novembre 2011

Bonjour,

C'est exactement le code que j'utilise, mais ça ne marche pas pour .Font.Size qui retourne une erreur#5.

De plus, comment faire pour écrire alternativement dans un document WORD ou l'autre ? J'arrive à écrire dans le premier, puis à passer dans le second et ensuite tout arrive dans le second, plus moyen de revenir au précédent. Le code est le suivant:

Set theDoc_1=AppWord.Documents.Add
Set theDoc_2=AppWord.Documents.Add
...
With theDoc_1.Application.Selection
.TypeText Text:="Hello doc 1"
End With
With theDoc_2.Application.Selection
.TypeText Text:="Hello doc 2"
End With

Ca ne change pas si j'insère entre les deux blocs With/End With:

theDoc_2.Application.Activate

Et si j'écris (au lieu de .Application.Selection)

With theDoc_1.Selection
.TypeText Text:="Hello doc 1"
End With

j'obtiens une erreur 438: "Propriété ou méthode non gérée par cet objet".

C'est à ne plus rien y comprendre pour le débutant que je suis! C'est comme si l'objet theDoc_1 devenait l'objet theDoc_2, et que theDoc_2 restait inchangé bien sûr. Donc, tout arrive sur le second document...

Hervé
Messages postés
7614
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
4 décembre 2021
128
Je viens de mettre ceci dans un classeur et cela fonctionne:

'cochez la référence Microsoft Word 11.0 Object Library
Private Sub CommandButton1_Click()
text_word_1
text_word_2
End Sub
Sub text_word_1()
     Dim oWord As Word.Application
    'Créer une instance de word
   Set oWord = CreateObject("Word.Application")
    oWord.Documents.Open ("C:\Documents and Settings\Propriétaire\Mes documents\essai.doc") 'chemin du fichier doc
    oWord.ShowMe
    'rendre le document word visible
    oWord.Visible = True
'code pour les différentes opérations
   With oWord.Selection
   .TypeText Text:="texte essai_1"
   .Font.Size = 18
   .Font.Name = "Tahoma"
   .ParagraphFormat.Alignment = wdAlignParagraphCenter
     End With
   oWord.Quit
End Sub
Sub text_word_2()
     Dim oWord As Word.Application
    'Créer une instance de word
   Set oWord = CreateObject("Word.Application")
    oWord.Documents.Open ("C:\Documents and Settings\Propriétaire\Mes documents\essai_2.doc") 'chemin du fichier doc
    oWord.ShowMe
    'rendre le document word visible
    oWord.Visible = True
'code pour les différentes opérations
   With oWord.Selection
   .TypeText Text:="texte essai_2"
   .Font.Size = 18
   .Font.Name = "Tahoma"
   .ParagraphFormat.Alignment = wdAlignParagraphCenter
     End With
   oWord.Quit
End Sub


modifications:
cocher la référence et ajout de oWord.Quit
pour fermer le document ouvert
Messages postés
17
Date d'inscription
jeudi 17 novembre 2011
Statut
Membre
Dernière intervention
28 novembre 2011

Mouais. Dans ton code, tu crées deux instances de WORD l'une après l'autre et tu quittes la première avant d'ouvrir la seconde. Moi, je voulais que les deux documents coexistent dans la même instance pour pouvoir écrire alternativement dans l'une et l'autre: le premier document servira de 'log file' (journal) alors que le second document contiendra les informations à imprimer dans un second temps.

Merci quand même. On continue à réfléchir...

Hervé
Messages postés
7614
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
4 décembre 2021
128
Je ne sais pas si cela est possible, car il faut quitter un document avant de pouvoir écrire dans le suivant.Je pense qu'il faudrait faire un nouveau post en indiquant clairement cela.

Je me suis aperçu que pour changer la Font il fallait la mettre avant le texte comme ceci:

.Font.Size = 18
   .Font.Name = "Tahoma"
   .TypeText Text:="texte essai_1"
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Bonjour,

Bon (j'atterndsais d'abord)
Voilà donc :
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
 
Set WordApp = CreateObject("word.application")
WordApp.Visible = True
Set un_doc = WordApp.Documents.Add
Set aut_doc = WordApp.Documents.Add
un_doc.Content.Select
With WordApp.Selection
  .Text = "un texte à ajouter dans un_doc "
  .Font.Name = "Tahoma"
  .Font.Size = 18
  '.Paragraphs.Last.Range.Select
  .MoveRight
  .Text = "une suite à ajouter dans un_doc"
  .Font.Bold = True
  .Font.Size = 10
End With
aut_doc.Content.Select
With WordApp.Selection
  .Text = "un texte à ajouter dans aut_doc"
  .Font.Name = "Tahoma"
  .Font.Size = 10
  '.Paragraphs.Last.Range.Select
  .MoveRight
  .Text = "une suite à ajouter dans aut_doc"
  .Font.Bold = True
  .Font.Size = 18
End With



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
corriger en haut, bien sur !
C'est :
Dim un_Doc As Word.Document
Dim aut_Doc As Word.Document

et enlever :
Dim WordDoc As Word.Document


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
17
Date d'inscription
jeudi 17 novembre 2011
Statut
Membre
Dernière intervention
28 novembre 2011

Grand merci. Ca se précise, mais il reste des soucis:

1. ".Font.Size = 18" retourne toujours une erreur #5

2. ".Text" ne fonctionne pas (il ne se passe tout simplement rien), mais ".TypeText Text:="le texte à afficher" fonctionne bien

3. Lorsque je reviens sur le premier document pour ajouter du texte, celui-ci remplace le précédent. C'est balot...

D'autres idées ?
Hervé
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Ecoute :
J'ai testé avant de te montrer ce code (depuis, donc VB6 - la présente section - et vers Word 2007, ma version). Il marche parfaitement.
Alors :
- ou tu as fait une autre "boulette" ailleurs
- ou t version Word est vraiment très différente


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Réflexion plus complète après mon petit déjeuner :
- L'erreur 5 ne montre pas forcément la ligne fautive à coup sûr
- l'erreur 5 ne peut intervenir qu'en cas de logiciel corrompu ou d'un "template" qcorrompu, dont il se sert.

Je ne crois pas (trop peu de chances que ce soit le cas) que ta version Word soit directement la fautive.
Reste la possibilité d'un "template" présent et, lui, corrompu d'une manière ou de l'autre.

Alors on va fouiller un peu ===>>

regarde dans ce répertoire :

C:\Documents and Settings\.....\Application Data\Microsoft\Word\STARTUP

Y trouves-tu des fichiers, notamment .dot ?
Si oui, dis-nous lesquels et on continue...

PS : une petite chose, en passant : tu as "tagué" REPONSE ACCEPTEE sur ton propre message, si bien qu'un nouveau forumeur auera des difficultés à repérer le code correspondant.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
17
Date d'inscription
jeudi 17 novembre 2011
Statut
Membre
Dernière intervention
28 novembre 2011

Salut ucfoutu,

J'ai pas cherché plus avant car je voulais terminer mon programme. C'est fait et tout marche parfaitement ! Wouah...

Plutôt que la ligne

un_doc.Content.Select

que tu proposais, j'ai préféré

un_doc.Activate

car dans le premier cas, l'ensemble du document Word était sélectionné et je m'embêtais avec la gestion des Range.

Un très grand merci. Je me pencherai sur les détails (la couleur du texte et surtout une ProgressBar plus tard).

Hervé