erreur automation VBA [Résolu]

wal23

XLDnaute Nouveau
Bonjour à tous, je me présente je suis nouveau sur le forum. J'ai lu pas mal de vos posts quand j'avais des problèmes et je sais que sur ce forum il y a des gens compétents qui apportent des réponses pertinentes. C'est pourquoi j'ai décidé de m'inscrire pour pouvoir vous faire part de mon problème.

Le but de ma démarche est de créer un programme VBA me permettant de copier l'adresse postale et le nom d'une personne sur une lettre type sous format word. Ainsi, dans une colonne Excel j'ai le nom que je veux donner à mon fichier word, dans une autre l'adresse postale et dans une dernière le nom de la personne.
J'ai créé un code (je suis débutant en vba) qui fonctionne pour la première lettre (c'est-à-dire i=2 dans ma boucle) puisque le nouveau fichier word est bien créé, etc. Le problème est que j'obtiens une erreur (erreur automation l'objet invoqué s'est déconnecté de ses clients) quand il veut passer à la personne suivante (i=3).
Je vous fais une copie de mon code pour que vous y voyez plus clair.

Code:
Sub fournisseur()
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
Dim i As Integer
Dim n As Integer


Set WordApp = CreateObject("word.application") 'ouvre session word et le fichier voulu
Set WordDoc = WordApp.Documents.Open("C:\Users\wal23\Desktop\Lettre type.docx") 'ouvre document Word
WordApp.Visible = False 'word masqué pendant l'operation
n = Cells(19, 5)
For i = 2 To n
nom = Cells(i, 1).Value 'repere le nom du nouveau fichier dans la cellule
'dans le document word, il faut avoir placé des signets aux endroits qu'on veut remplir
'à l'endroit de chaque signet qui se trouve dans le fichier word on va inscrire le contenu des cellules
WordDoc.Bookmarks("adresse_fournisseur").Range.Text = Cells(i, 2)
WordDoc.Bookmarks("contact_fournisseur").Range.Text = Cells(i, 3)

WordApp.Visible = True 'affiche le document Word
ActiveDocument.SaveAs "C:\Users\wal23\Desktop\Lettres fournisseurs\" & nom & ".docx"
ActiveDocument.Close
WordApp.Quit 'ferme la session Word
Set WordApp = Nothing
Next
Set nom = Nothing
End Sub

Le débogage s'arrête à la ligne
Code:
WordDoc.Bookmarks("adresse_fournisseur").Range.Text = Cells(i, 2)

Sinon pour un peu plus d'explication concernant mon code, la variable n fait référence à une cellule qui compte le nombre de noms que le programme doit traiter. Ainsi j'ai mis une formule nbval afin de me compter ce nombre. Au moins, si je dois rajouter des noms ca se mettra à jour.

Voilà, j'ai essayé beaucoup de choses, notamment de le faire sur une version d'excel antérieure ou sur un windows XP mais rien n'y fait j'ai toujours la même erreur.

Merci d'avance pour vos réponses qui je l'espère m'aideront à résoudre mon problème,

Wal23.
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : erreur automation VBA

Bonjour wal23,

Bienvenue sur XLD,

De mémoire, si tu as défini tes signets sur un texte existant du document Word, les commandes du genre

Code:
WordDoc.Bookmarks("adresse_fournisseur").Range.Text = Cells(i, 2)

remplissent bien le signet avec le texte, mais en même temps elles suppriment le signet, tes signets n'existent donc plus pour le prochain tour de boucle

Soit tu dois réinsérer un signet après sur le mot tapé, ce qui peut s'avérer délicat en fonction du texte inséré, soit il faut que tu réouvres ton fichier original à chaque tour de boucle (tu pourrais envisager d'en faire un modèle et d'utiliser le modèle en créant un nouveau document basé sur ce modèle à chaque tour de boucle)
Il y a peut-être plus simple, mais je ne sais pas comment remplir un signet sans le supprimer
 

wal23

XLDnaute Nouveau
Re : erreur automation VBA

Bonjour tototiti2008

Merci pour ta réponse. La deuxième solution que tu proposes est celle que j'utilise déjà dans mon boucle. Dans le code que j'ai donné, une fois le document modifié je l'enregistre sur un nouveau nom et un donc un autre fichier word. en revanche tu soulèves un point important. Dans ma boucle je ne ferme jamais officiellement le premier word ouvert. J'aimerais justement avant la fin de ma boucle le fermer sans l'enregistrer (et ainsi les signets resteraient intacts). Sauf que je n'y arrive pas, j'ai testé plusieurs commandes du style WordDoc.quit WordDoc.close Set WordDoc = Nothing

Donc si tu as des idées je suis preneur ca rle problème vient peut-être de là.

Merci d'avance,

Wal23
 

tototiti2008

XLDnaute Barbatruc
Re : erreur automation VBA

Re,

Quand tu fais un SaveAs (Enregistrer sous) il enregistre le document sous un autre nom, mais le document original n'est pas conservé
Si tu veux réouvrir ton document original à chaque tour de boucle, li faudrait que tu places la ligne

Code:
Set WordDoc = WordApp.Documents.Open("C:\Users\wal23\Desktop\Lettre type.docx")

en début de boucle, juste après le "For"
 

wal23

XLDnaute Nouveau
Re : erreur automation VBA

Merci beaucoup tototiti2008. Grâce à ton deuxième message j'ai trouvé la solution. J'ai rentrer l'ouverture et la fermeture du document dans la boucle et tout fonctionne parfaitement. Je mets le code au cas où quelqu'un serait intéressé.

Code:
Sub fournisseur()
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
Dim i As Integer
Dim n As Integer

n = Cells(19, 5)
For i = 2 To n
Set WordApp = CreateObject("word.application") 'ouvre session word et le fichier voulu
Set WordDoc = WordApp.Documents.Open("C:\Users\Commercial_2\Desktop\Demande changement d'adresse Benoit\Lettre type.docx") 'ouvre document Word
WordApp.Visible = False 'word masqué pendant l'operation
nom = Cells(i, 1).Value 'repere le nom du nouveau fichier dans la cellule
'dans le document word, il faut avoir placé des signets aux endroits qu'on veut remplir
'à l'endroit de chaque signet qui se trouve dans le fichier word on va inscrire le contenu des cellules
WordDoc.Bookmarks("adresse_fournisseur").Range.Text = Cells(i, 2)
WordDoc.Bookmarks("contact_fournisseur").Range.Text = Cells(i, 3)

WordApp.Visible = True 'affiche le document Word
WordDoc.SaveAs "C:\Users\Commercial_2\Desktop\Demande changement d'adresse Benoit\Lettres fournisseurs\" & nom & ".docx"
WordDoc.Close
'WordDoc.SaveAs ("C:\Users\Commercial_2\Desktop\wal2.docx")
'si on veut fermer le document word en sauvegardant les données
WordApp.Quit 'ferme la session Word
Set WordApp = Nothing
Next
Set nom = Nothing
End Sub

Bonne journée à tous et encore merci.
 

Discussions similaires

Statistiques des forums

Discussions
312 211
Messages
2 086 299
Membres
103 172
dernier inscrit
Aurelyan