Imprimer un document WORD à partir d'excel

pat40 pat40
86 contributions
Membre depuis le 04/03/2011
Envoyé le 11/03/2012 à 20:06


Bonjour,

J'essaie de faire un publipostage à partir de mon fichier excel avec une macro dont voici le code

Sub OuvrirDocWord()
'la reference Microsoft Word xx.x Object Library est activée

Dim WordApp As Word.Application
Dim WordDoc As Word.Document
Dim Fichier As String

Fichier = "F:\LocalBackup\GDP UTDC\GESTION DP 2012\Originaux 2012 2013\DAET FUSION.doc"
Set WordApp = CreateObject("Word.Application")
WordApp.Visible = True
Set WordDoc = WordApp.Documents.Open(Fichier)
End Sub

J'ai un :d'erreur: Erreur de compilation, Type défini par l'utilisateur non défini qui surligne : WordApp As Word.Application

Merci pour votre aide

Claude40 Claude40
1 531 contributions
Membre depuis le 24/03/2010
Envoyé le 12/03/2012 à 10:11


Bonjour,

Les clauses Dim pour les variables WordApp et WordDoc sont erronées. Une clause « Dim xx as « doit désigner un type de variable valide (String, Integer, etc.). En outre, ces clauses sont inutiles du fait des deux fonctions « Set » qui suivent dans la macro et qui font le travail souhaité (donner une valeur à deux variables). En les supprimant, ça marche. Mais si on veut les conserver, il faut écrire seulement « Dim WordApp » et « Dim WordDoc », elles seront affectées du type par défaut « Object ».
Un bon exposé du problème, c'est déjà un grand pas vers la solution. Dans la mesure du possible, mes solutions sont testées, sur mon système actuel (W10 Pro version 1909), mais peuvent ne pas fonctionner sur tous les Pc
Pegase Pegase
1 023 contributions
Membre depuis le 07/02/2002
Envoyé le 12/03/2012 à 11:38 Modifié par Pegase


Bonjour,

Pour info, il existe dans Word une fonction publipostage qui permet d'utiliser les données d'un fichier excel
Dans Word (Exemple avec Word 2002 ou 2003)
Outils > Lettre et publipostage > Assistant fusion et publipostage
Suivre la procédure
Dans la rubrique "Sélection des destinataires" cocher "Utilisation d'une liste existante" puis "Parcourir"
Dans la fenêtre champ Type de fichier, choisir "Fichier excel"

Ça fonctionne bien. Pour une utilisation plus aisée pensez à afficher la barre d'outils "Fusion et publipostage"
Moi, le jour où j'aurai vraiment mon âge, je mourrai (Léo Ferré).
Mytå_Qc Mytå_Qc
30 contributions
Membre depuis le 06/08/2010
Envoyé le 12/03/2012 à 11:47 Modifié par Mytå_Qc


Bonjour,

Essaye avec cette version


Sub OuvrirWord()
' Nécessite d'activer la référence
' Microsoft Word xx.x Object Library

Dim wordApp As Word.Application
Dim wordDoc As Word.Document

Set wordApp = New Word.Application
wordApp.Visible = True
'Ouverture du document Word
Set wordDoc = wordApp.Documents.Open("C:monDocument.doc")

'Ferme le document word en sauvegardant les modifications
wordDoc.Close True
'Ferme la session Word
wordApp.Quit

End Sub


Mytå

pat40 pat40
86 contributions
Membre depuis le 04/03/2011
Envoyé le 12/03/2012 à 13:07


Bonjour,

Bonjour,

Pour info, il existe dans Word une fonction publipostage qui permet d'utiliser les données d'un fichier excel
Dans Word (Exemple avec Word 2002 ou 2003)
Outils > Lettre et publipostage > Assistant fusion et publipostage
Suivre la procédure
Dans la rubrique "Sélection des destinataires" cocher "Utilisation d'une liste existante" puis "Parcourir"
Dans la fenêtre champ Type de fichier, choisir "Fichier excel"

Ça fonctionne bien. Pour une utilisation plus aisée pensez à afficher la barre d'outils "Fusion et publipostage"



Bonjour

merci, j’utilise déjà la fonction publipostage, ce que je souhaite c'est d'automatiser en quelque sorte le processus. Aujourd'hui j'active le publipostage sur un document word prêt pour la fusion à partir d'un lien hypertexte placé sur le fichier excel.

Claude40 et Myta_QC me proposent des solutions que je regarderai ce soir et donnerai suite comme j'ai l'habitude faire

merci à toi


pat40 pat40
86 contributions
Membre depuis le 04/03/2011
Envoyé le 12/03/2012 à 20:07


Bonjour,
Merci à Claude40 et Myta_Qc

avec la proposition de Myta_Qc j'ai toujours le même problème, j'ai donc travaillé avec la proposition de Claude40
Voici le code que j'ai mis:
Sub OuvrirDocWord()
'la reference Microsoft Word xx.x Object Library est activée
Dim WordApp
Dim WordDoc
Set WordApp = CreateObject("Word.Application")
WordApp.Visible = True
Set WordDoc = WordApp.Documents.Open("F:\LocalBackup\GDP UTDC\GESTION DP 2012\Originaux 2012 2013\DAET FUSION1.doc")
End Sub

Ceci étant j'ai deux soucis

1/le document word s'ouvre mais non apparent il reste en bas en réduction de l'écran
2/lorsque je clique sur celui ci, le document n'est pas prêt au publipostage il faut que je réactive le processus avec l'outil publipostage (tel que décrit par Pégase) ce n'est pas la manœuvre que je recherche

Lorsque je fais en "manuel" j'ouvre directement le document DAET FUSION1 depuis le classeur ou il se trouve, un message apparaît
" l'ouverture de ce document exécutera la commande SQL suivante
Select *FROM BASE$
Des données provenant de votre base seront insérées dans le document. Voulez vous continuer ? OUI
et j'effectue mon publipostage parfaitement.

C'est pour aller chercher le doc pour réaliser le publipostage que je souhaite le faire par macro.

Merci de faire part de vos solutions

pat40 pat40
86 contributions
Membre depuis le 04/03/2011
Envoyé le 18/03/2012 à 14:31


Bonjour,

Bonjour,

Les clauses Dim pour les variables WordApp et WordDoc sont erronées. Une clause « Dim xx as « doit désigner un type de variable valide (String, Integer, etc.). En outre, ces clauses sont inutiles du fait des deux fonctions « Set » qui suivent dans la macro et qui font le travail souhaité (donner une valeur à deux variables). En les supprimant, ça marche. Mais si on veut les conserver, il faut écrire seulement « Dim WordApp » et « Dim WordDoc », elles seront affectées du type par défaut « Object ».



Bonjour

je reviens, je ne sais pas si j'ai répondu de la bonne façon la dernière fois compte tenu que je n'ai pas eu de suite à mes interrogations ....

Suite à tes conseils voilà le code que j'ai mis
Voici le code que j'ai mis:
Sub OuvrirDocWord()
'la reference Microsoft Word xx.x Object Library est activée
Dim WordApp
Dim WordDoc
Set WordApp = CreateObject("Word.Application")
WordApp.Visible = True
Set WordDoc = WordApp.Documents.Open("F:\LocalBackup\GDP UTDC\GESTION DP 2012\Originaux 2012 2013\DAET FUSION1.doc")
End Sub

sauf que
le document auquel je fais appel est un doc fusionné avec une feuille excel et là à chaque action de la macro je "perds" le processus de fusion pour le publipostage, de plus le document reste dans la barre des taches et ne s'ouvre pas automatiquement à l'écran, mais ce n'est pas là le plus gênant..

Merci pour ton aide éventuelle


pat40 pat40
86 contributions
Membre depuis le 04/03/2011
Envoyé le 18/03/2012 à 14:45


Bonjour,

Bonjour,

Essaye avec cette version
[quote]
Sub OuvrirWord()
' Nécessite d'activer la référence
' Microsoft Word xx.x Object Library

Dim wordApp As Word.Application
Dim wordDoc As Word.Document

Set wordApp = New Word.Application
wordApp.Visible = True
'Ouverture du document Word
Set wordDoc = wordApp.Documents.Open("C:monDocument.doc")

'Ferme le document word en sauvegardant les modifications
wordDoc.Close True
'Ferme la session Word
wordApp.Quit

End Sub


Mytå[/quote]

bonjour
,je ne sais pas si j'ai répondu de la bonne façon la dernière fois compte tenu que je n'ai pas eu de suite à mes interrogations

j'ai essayé le code que tu as donné mais j'ai un message d'erreur "erreur de compilation - type défini par l'utilisateur non défini" sur wordApp As Word.Application

Claude40 avait également suggérait une solution qui avance mais ...

Voici le code suggéré et que j'ai mis:
Sub OuvrirDocWord()
'la reference Microsoft Word xx.x Object Library est activée
Dim WordApp
Dim WordDoc
Set WordApp = CreateObject("Word.Application")
WordApp.Visible = True
Set WordDoc = WordApp.Documents.Open("F:\LocalBackup\GDP UTDC\GESTION DP 2012\Originaux 2012 2013\DAET FUSION1.doc")
End Sub

sauf que
le document auquel je fais appel est un doc fusionné avec une feuille excel et là à chaque action de la macro je "perds" le processus de fusion pour le publipostage, de plus le document reste dans la barre des taches et ne s'ouvre pas automatiquement à l'écran, mais ce n'est pas là le plus gênant..

Merci pour ton aide éventuelle

Claude40 Claude40
1 531 contributions
Membre depuis le 24/03/2010
Envoyé le 18/03/2012 à 15:54 Modifié par Claude40


Bonjour,

Je n'arrive pas à reproduire le problème. Chez moi tout se passe normalement. Mais je travaille avec Office 2007. Le mieux serait que tu stockes un exemple des deux fichiers Word et Excel sur ton site d'hébergement et que tu me donnes les clés d'accès, ainsi que nous avons déja procédé précédemment.
Un bon exposé du problème, c'est déjà un grand pas vers la solution. Dans la mesure du possible, mes solutions sont testées, sur mon système actuel (W10 Pro version 1909), mais peuvent ne pas fonctionner sur tous les Pc
pat40 pat40
86 contributions
Membre depuis le 04/03/2011
Envoyé le 18/03/2012 à 20:47


Bonjour,

Bonjour,

Je n'arrive pas à reproduire le problème. Chez moi tout se passe normalement. Mais je travaille avec Office 2007. Le mieux serait que tu stockes un exemple des deux fichiers Word et Excel sur ton site d'hébergement et que tu me donnes les clés d'accès, ainsi que nous avons déja procédé précédemment.



Re bonsoir

je suis en excel 2003
tu trouveras ci joint les coordonnées pour les fichiers
J'ai "appuré" la base de données

Lorsqu'on ouvre la base feuille "bouton de commande" en cliquant sur le mot Daet (lien hypertexte) dans la colonne éditer le document s'ouvre prêt à être "fusionné" il suffit de dire oui la fenêtre du message "l'ouverture de ce document exécutera le requêtes SQL suivante..." puis apparaît le Doc prêt à la fusion , il suffit d'aller sur sur fusionner vers un nouveau document dans la barre publipostage et taper 15 vdans les cases de ..à.. (correspond au N° d'enregistrement) OK et le doc fusionné apparait enfin si les liens sont restés en place dans le transfert

Je souhaite faire la même chose avec le bouton 24 (toujours dans éditer feuille bouton de commande)hélas je n'ai pas le même résultat. Le doc s'ouvre reste dans la barre d'outil et sans être prêt à la fusion.


Fichier : http://www.partage-fichiers.com/upload/j219mpm1
Taille du fichier : 195.62
Utilisateur : dk6kyflk
Mot de passe : 26an4t31

Merci de voir

Claude40 Claude40
1 531 contributions
Membre depuis le 24/03/2010
Envoyé le 19/03/2012 à 02:03


Bonsoir,

Je n'ai pas trop compris ce qui se passe, mais j'ai trouvé une solution :
J'ai transformé la macro "OuvrirDocWord" de la manière suivante :

Sub OuvrirDocWord()

Range("L16").Select
Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True

End Sub

Ainsi, c'est comme si on utilisait le lien Hypertexte en L16 et cela fonctionne.
Un bon exposé du problème, c'est déjà un grand pas vers la solution. Dans la mesure du possible, mes solutions sont testées, sur mon système actuel (W10 Pro version 1909), mais peuvent ne pas fonctionner sur tous les Pc
pat40 pat40
86 contributions
Membre depuis le 04/03/2011
Envoyé le 19/03/2012 à 19:15


Bonjour,

Bonsoir,

Je n'ai pas trop compris ce qui se passe, mais j'ai trouvé une solution :
J'ai transformé la macro "OuvrirDocWord" de la manière suivante :

Sub OuvrirDocWord()

Range("L16").Select
Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True

End Sub

Ainsi, c'est comme si on utilisait le lien Hypertexte en L16 et cela fonctionne.



OK cela fonctionne, mais cela oblige à garder le lien hypertexte donc une certaine vulnérabilité, notamment à recréer le lien lorsque celui est rompu pour diverses raisons... alors je vais essayé de continuer à chercher
merci



Claude40 Claude40
1 531 contributions
Membre depuis le 24/03/2010
Envoyé le 19/03/2012 à 20:27 Modifié par Claude40


Bonjour,
Je ne sais toujours pas pourquoi, avec la macro, le fichier Word "perd" le lien avec le fichier Excel, mais je pense savoir pourquoi, les codes
"Dim WordApp as Word.Application" et "Dim WordDoc as Word.Document" ne fonctionnaient pas. Il faut, lorsque l'on est sous VBA, cocher la case correspondant à Word dans "Outils" + "Références". Ainsi le type d'objet sera valide.
C'est la procédure pour gérer une application Office à partir d'une autre application Office.


Je cherche aussi pour l'aspect principal du problème.
Un bon exposé du problème, c'est déjà un grand pas vers la solution. Dans la mesure du possible, mes solutions sont testées, sur mon système actuel (W10 Pro version 1909), mais peuvent ne pas fonctionner sur tous les Pc
pat40 pat40
86 contributions
Membre depuis le 04/03/2011
Envoyé le 19/03/2012 à 21:52


Bonjour,

Bonjour,
Je ne sais toujours pas pourquoi, avec la macro, le fichier Word "perd" le lien avec le fichier Excel, mais je pense savoir pourquoi, les codes
"Dim WordApp as Word.Application" et "Dim WordDoc as Word.Document" ne fonctionnaient pas. Il faut, lorsque l'on est sous VBA, cocher la case correspondant à Word dans "Outils" + "Références". Ainsi le type d'objet sera valide.
C'est la procédure pour gérer une application Office à partir d'une autre application Office.


Je cherche aussi pour l'aspect principal du problème.



RE

Lorsque je clique sur outils (sous vba)et références je n'ai pas de case à cocher Word (je en suis en 2003)
merci

Claude40 Claude40
1 531 contributions
Membre depuis le 24/03/2010
Envoyé le 20/03/2012 à 09:35 Modifié par Claude40


Bonjour,
Si tu as une liste de réferences, tu dois trouver une ligne qui correspond à la bibliothèque des objets Word, qui se trouve, en principe sur "C:Program FilesMicrosoft Office......." (Chemin d'accès). La liste est très longue.
Voici comment cela se présente sous Office 2007 :
Une fois cochée, la ligne vient parmi les lignes du début de la liste, mais avant d'être cochée, c'est trié par ordre alphabétique.


Un bon exposé du problème, c'est déjà un grand pas vers la solution. Dans la mesure du possible, mes solutions sont testées, sur mon système actuel (W10 Pro version 1909), mais peuvent ne pas fonctionner sur tous les Pc
pat40 pat40
86 contributions
Membre depuis le 04/03/2011
Envoyé le 20/03/2012 à 20:50


Bonjour,

Bonjour,
Si tu as une liste de réferences, tu dois trouver une ligne qui correspond à la bibliothèque des objets Word, qui se trouve, en principe sur "C:Program FilesMicrosoft Office......." (Chemin d'accès). La liste est très longue.
Voici comment cela se présente sous Office 2007 :
Une fois cochée, la ligne vient parmi les lignes du début de la liste, mais avant d'être cochée, c'est trié par ordre alphabétique.




OK merci j'ai trouvé en fait je passai trop vite...

Je fouille sur la toile j'ai trouvé un code mais j'avoue ne pas trop comprendre, j'ai essayé mais j'ai toujours des erreurs
à partir de la base que tu dois avoir
Sub FusionCourrier()
Dim Chemin As String
Dim NomFich As String

Chemin = "F:\LocalBackup\GDP UTDC\GESTION DP 2012\Originaux 2012 2013"
NomFich = "DAET FUSION.doc"
Fusion_Publipostage Chemin, NomFich, "BASE.xls"
End Sub

Sub Fusion_Publipostage(Chemin As String, NomFich As String, NomBase As String)
Dim wordApp As Word.Application
Dim wordDoc As Word.Document

Set wordApp = New Word.Application
wordApp.Visible = True
'Ouverture du document Word
Set wordDoc = wordApp.Documents.Open("F:\LocalBackup\GDP UTDC\GESTION DP 2012\Originaux 2012 2013\DAET FUSION.doc")
DoEvents

With wordDoc.MailMerge
'La base Excel est dans le même répertoire que le doc Word.
'Les données sont dans la feuille nommée Feuil1.
.OpenDataSource Name:=Chemin & NomBase, _
Connection:="Driver={Microsoft Excel Driver (*.xls)};" & _
"DBQ=" & Chemin & NomBase & "; ReadOnly=True;", _
SQLStatement:="SELECT * FROM [BASE$]"

.Destination = wdSendToNewDocument
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = 2
End With
.SuppressBlankLines = True
.Execute Pause:=False
End With

DoEvents
Set WdLType = wdApp.ActiveDocument 'Document obtenu par la fusion (quand il sera obtenu...)
'WdLType.PrintOut
'WdLType.SaveAs Filename:="D:\doc\Bonne année, bonne santé 2008.doc" ' ^^^ !
DoEvents
WdLType.Close False
DoEvents
WdDoc.Close False
DoEvents
wdApp.Quit

Set WdLType = Nothing
Set WdDoc = Nothing
Set wdApp = Nothing
End Sub


Espérant ne pas trop "encombrant"
Merci

Claude40 Claude40
1 531 contributions
Membre depuis le 24/03/2010
Envoyé le 21/03/2012 à 21:05


Bonsoir,

Une piste que je n'ai pas eu le temps de creuser entièrement :
Dans la macro "OuvrirDocWord()", mettre simplement FusionCourrier.
La proc FusionCourrier() va appeler Fusion_Publipostage() qui ouvre le doc Word et effectue le publipostage.
Un bon exposé du problème, c'est déjà un grand pas vers la solution. Dans la mesure du possible, mes solutions sont testées, sur mon système actuel (W10 Pro version 1909), mais peuvent ne pas fonctionner sur tous les Pc
Claude40 Claude40
1 531 contributions
Membre depuis le 24/03/2010
Envoyé le 22/03/2012 à 12:38 Modifié par Claude40


Bonjour,

Je confirme mon message précédent qui doit constituer la solution. Toutefois, pour arriver jusqu'à la fin du test, j'ai dû procéder à des aménagements dans les proc que tu m'avais indiquées dans ton dernier message :

1) Il y a des variable non définies, car elle ne portent pas le bon nom (exemple : Wdapp au lieu de Wordapp).

2) J'ai neutralisé les 13 dernières ligne de code de "Sub Fusion_Publipostage" dont je n'ai pas vu l'utilité, ni la cohérence avec le projet et qui ne me paraissent pas utiles pour ce problème particulier

3) J'ai copié le contenu de la ligne 15 de la feuille "BASE" en ligne 2, car il n'y avait rien à fusionner sans cela.

4) J'ai enregistré le fichier base sous Excel 2007, car en mode compatibilité 2003 sous 2007, j'avais toujours le message "Fichier introuvable" pour ce fichier.

5) un commentaire indique que les données sont sur "Feuil1", mais j'ai maintenu la feuille BASE comme source de données.

Ayant fait tout cela, j'ai réussi à faire un publipostage, de façon automatique et sans demande de confirmation en fusionnant dans la lettre type les éléments qui figurent sur la ligne 15 du fichier que tu m'a transmis, la ligne 15 ayant été copiée sur la ligne 2.

Je ne pense pas pouvoir faire mieux. Bonne chance à toi.
Un bon exposé du problème, c'est déjà un grand pas vers la solution. Dans la mesure du possible, mes solutions sont testées, sur mon système actuel (W10 Pro version 1909), mais peuvent ne pas fonctionner sur tous les Pc
pat40 pat40
86 contributions
Membre depuis le 04/03/2011
Envoyé le 23/03/2012 à 17:53


Bonjour,
Merci beaucoup, j'ai aussi travaillé de mon coté et je suis arrivé au résultat que tu peux constaté en ouvrant les fichiers joints (j'ai fait une base et doc Word bidons qui doivent être dans le même répertoire)
Normalement quand on clique sur le bouton la fusion se réalise et le document reste en bas dans la barre des taches, en cliquant dessus il s'ouvre à l'écran et là il est opérationnel pour ce que je souhaite faire, notamment choisir le n° d'enregistrement à fusionner et fusionner

Je voudrais que le doc ne se mette pas dans la barre d'outils s'ouvre directement à l'écran


Fichier : http://www.partage-fichiers.com/upload/vg5rnxdi
Taille du fichier : 12.85 KB
Utilisateur : eftpcqvm
Mot de passe : 5yiusjev

merci pour ton retour

Claude40 Claude40
1 531 contributions
Membre depuis le 24/03/2010
Envoyé le 23/03/2012 à 20:57


Bonsoir,

Je suis désolé de ne pas pouvoir t'aider plus. J'ai téléchargé ton nouveau jeu d'essai, et j'obtiens les résultats, que tu souhaites : le Fichier Word s'affiche en mode normal et le publipostage se fait en choisissant le N° de destinataire.
Pour le problème de publipostage, la solution consistait donc bien à coder l'ouverture du fichier Word et la procédure de publipostage dans le même "SUB".
Pour ce qui est de l'affichage du fichier Word, ne pouvant reproduire le problème, je suis incapable de te donner une solution. Il s'agit peut-être d'une option Word 2003 ?
Bonne chance.
Un bon exposé du problème, c'est déjà un grand pas vers la solution. Dans la mesure du possible, mes solutions sont testées, sur mon système actuel (W10 Pro version 1909), mais peuvent ne pas fonctionner sur tous les Pc
pat40 pat40
86 contributions
Membre depuis le 04/03/2011
Envoyé le 23/03/2012 à 22:15


Bonjour,

Bonsoir,

Je suis désolé de ne pas pouvoir t'aider plus. J'ai téléchargé ton nouveau jeu d'essai, et j'obtiens les résultats, que tu souhaites : le Fichier Word s'affiche en mode normal et le publipostage se fait en choisissant le N° de destinataire.
Pour le problème de publipostage, la solution consistait donc bien à coder l'ouverture du fichier Word et la procédure de publipostage dans le même "SUB".
Pour ce qui est de l'affichage du fichier Word, ne pouvant reproduire le problème, je suis incapable de te donner une solution. Il s'agit peut-être d'une option Word 2003 ?
Bonne chance.



Merci (+)

Discussion trop ancienne

Cette discussion a été automatiquement fermée car elle n'a plus reçue de nouveau message depuis trop longtemps.

Nous vous suggérons de créer un nouveau message

« Retour sur la liste des messages de ce forum