[Déplacé VBA]erreur automation VBA

Wal23 - 14 août 2012 à 12:18
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 14 août 2012 à 17:21
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. Je ne suis pas sûr de poster au bon endroit donc désolé par avance si je me trompe.

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.
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

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.

2 réponses

Finalement pour ceux que ça peut intéresser, j'ai trouvé la solution, je vous la poste:
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



Il suffisait juste de rentrer les commandes d'ouvertures et de fermeture du doc word dans la boucle.

Bonne journée à tous
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
14 août 2012 à 17:21
Salut

En effet, mauvaise catégorie. Mémorise-la si tu devais revenir.

C'est bien que tu aies trouvé la solution seul et surtout de l'avoir partagée. Ça pourra servir à d'autres.
Dans ton code, je te suggèrerai d'ajouter des espaces en tête de ligne (indentation) pour formater ton code et le rendre plus lisible, notamment pour les boucles For-Next ou Do-Loop.

Dans ton 1er code, tu utilisais ActiveDocument.
Cela laisse supposer que tu travaillais sous Word (bien préciser tout ton environnement la prochaine fois, y compris la version), alors que tu es sous Excel. C'était surement là un autre problème à régler.

Alors pourquoi passer par CreateObjet ?
Puisque tu as déclaré les références de Word (voir les Dim), il te suffisait de faire :
Set WordApp = New Word.Application

Dernière chose : Sais-tu que Word sait faire du publipostage à partir des données contenues dans Excel ?
Ça t'aurait éviter de l'écrire.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Rejoignez-nous