Travailler avec plusieurs documents Word

Résolu
cs_herve06 Messages postés 17 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 28 novembre 2011 - 23 nov. 2011 à 16:02
cs_herve06 Messages postés 17 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 28 novembre 2011 - 27 nov. 2011 à 22:08
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

cs_herve06 Messages postés 17 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 28 novembre 2011
23 nov. 2011 à 22:12
A l'imbécile idiot !! J'avais oublié le .MoveRight

Il ne reste plus que le problème de .Font.Size
3
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
23 nov. 2011 à 16:43
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
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
23 nov. 2011 à 16:45
Pour la ligne

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


Il faut lire

.TypeText Text:="mettre le texte"
0
cs_herve06 Messages postés 17 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 28 novembre 2011
23 nov. 2011 à 17:33
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é
0

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

Posez votre question
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
23 nov. 2011 à 17:53
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
0
cs_herve06 Messages postés 17 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 28 novembre 2011
23 nov. 2011 à 18:00
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é
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
23 nov. 2011 à 18:06
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"
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 nov. 2011 à 18:54
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 nov. 2011 à 18:58
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
0
cs_herve06 Messages postés 17 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 28 novembre 2011
23 nov. 2011 à 22:09
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é
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 nov. 2011 à 05:53
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 nov. 2011 à 06:58
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
0
cs_herve06 Messages postés 17 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 28 novembre 2011
27 nov. 2011 à 22:08
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é
0
Rejoignez-nous