Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Pb publipostage excel vers Word

2 réponses
Avatar
merguez07
Bonjour à tous,
je viens de passer mon après midi a essayer de faire réaliser un
publipostage Word à partir de mon fichier Excel mais je bloque.

Je m'explique : mon fichier excel contient une liste de données que je
veux publiposter. Le nom de mon fichier Excel pouvant changer j'ai
choisit de piloter le publipostage à partir du vba de mon fichier excel.

Dans ma macro Excel de publipostage je met:

NomduProgramme = ActiveWorkbook.Path + "\" + ActiveWorkbook.Name
Set ww = CreateObject("word.application"): ww.Visible = True
Set docWord = ww.Documents.Open(ActiveWorkbook.Path + "\" + "Dossier
Lignage.doc")

("Dossier lignage.doc" est ne nom de mon document Word)


With docWord.MailMerge
.MainDocumentType = wdFormLetters (ça marche)
.OpenDataSource Name:=NomduProgramme, _
ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
AddToRecentFiles:=False, PasswordDocument:="", passwordTemplate:="", _
WritePasswordDocument:="", WritePasswordTemplate:="",
Revert:=False, _
Format:=wdOpenFormatAuto, Connection:="Feuille de calcul
entière", _
SQLStatement:="", SQLStatement1:=""




c'est ici, au chargement de opendatasource que ça ne marche pas. Le
fichier Word reste en attente, la liaison dde ne se fait pas. Cela me
semble normal dans la mesure où je demande à word de lire une base excel
alors que je suis en train d'excuter une macro de ce même fichier excel.

Comment puis je m'en sortir ?

2 réponses

Avatar
michdenis
Bonjour,

Voici un exemple créé par Jièl Goubert et publié
sur ce forum. Perso. Je ne l'ai jamais testée.
Évidemment, il faudra que tu l'adaptes à ton
environnement.

IMPORTANT : dans ton projetVBA de ton fichier Excel, tu dois
ajouter la référence suivante :
Fenêtre de l'éditeur de code / barre des menus / outils / références /
et tu coches :
"Microsoft Word 12.0 Objects librairy"
12 -> selon la version d'office que tu as.

-------------------------------------------------------
Function Publipostage()

Dim WdDoc As Word.Document
Dim Chemin, Fichier, Chemin_Fichier, Source As String

' Récupère le chemin des fichiers de la feuille "saisie"
' cellule "Chemin"
Chemin = Worksheets("Saisie").Range("Chemin")

' Récupère le nom du fichier de la feuille "saisie"
' cellule "Nom_Fichier"
' choisi dans une liste déroulante
Fichier = "" + Worksheets("Saisie").Range("Nom_Fichier")

Chemin_Fichier = Chemin + Fichier

Source = "Procedure.xls" ' a modifier pour que ce soit variable

' Démarrer Word en ouvrant la lettre type
Set WdDoc = GetObject(Chemin_Fichier, "Word.Document")

With WdDoc
' Masque Word
.Application.Visible = False

' Créé la liaison à la base de données afin de pouvoir
' déplacer facilement les fichiers.
' Source contient le chemin d'accés au fichier
.MailMerge.OpenDataSource _
Name:=Source, _
LinkToSource:=True, _
Format:=wdOpenFormatAuto, _
SQLStatement:="SELECT * FROM `Données_Mailing$`"

' Lancer la fusion du 1er et seul enreg vers un nouveau doc
With .MailMerge
.Destination = wdSendToNewDocument
With .DataSource
.FirstRecord = 1
.LastRecord = 1
End With
.Execute Pause:úlse
End With

' Affiche Word
.Application.Visible = True

' Ferme le doc ayant servi de modèle sans l'enregistrer
.Close (False)

End With

' Active Word
Application.ActivateMicrosoftApp xlMicrosoftWord

' Libère la mémoire
Set WdDoc = Nothing

End Function
------------------------------------------




"merguez07" a écrit dans le message de groupe de discussion :
4bd32124$0$16498$
Bonjour à tous,
je viens de passer mon après midi a essayer de faire réaliser un
publipostage Word à partir de mon fichier Excel mais je bloque.

Je m'explique : mon fichier excel contient une liste de données que je
veux publiposter. Le nom de mon fichier Excel pouvant changer j'ai
choisit de piloter le publipostage à partir du vba de mon fichier excel.

Dans ma macro Excel de publipostage je met:

NomduProgramme = ActiveWorkbook.Path + "" + ActiveWorkbook.Name
Set ww = CreateObject("word.application"): ww.Visible = True
Set docWord = ww.Documents.Open(ActiveWorkbook.Path + "" + "Dossier
Lignage.doc")

("Dossier lignage.doc" est ne nom de mon document Word)


With docWord.MailMerge
.MainDocumentType = wdFormLetters (ça marche)
.OpenDataSource Name:=NomduProgramme, _
ConfirmConversions:úlse, ReadOnly:úlse, LinkToSource:=True, _
AddToRecentFiles:úlse, PasswordDocument:="", passwordTemplate:="", _
WritePasswordDocument:="", WritePasswordTemplate:="",
Revert:úlse, _
Format:=wdOpenFormatAuto, Connection:="Feuille de calcul
entière", _
SQLStatement:="", SQLStatement1:=""




c'est ici, au chargement de opendatasource que ça ne marche pas. Le
fichier Word reste en attente, la liaison dde ne se fait pas. Cela me
semble normal dans la mesure où je demande à word de lire une base excel
alors que je suis en train d'excuter une macro de ce même fichier excel.

Comment puis je m'en sortir ?
Avatar
merguez07
merci pour ta réponse mais Helas cette autre façon d'ouvrir Word ne
solutionne pas ma problématique. Le problème que j'ai c'est que ma base
de donnée excel peut changer de nom. je suis donc dans l'obligation de
télécommander le publipostage par excel pour donner à Word le nom de la
source. ET comme je télecommande word par une macro excel appartenant à
la source, word ne peut lire la source tant que je suis dans la macro Excel.


Je sais j'ai l'impression d'écrire du charabia

Dans le programme de Jièl Goubert la source est fixe (Procedure.xls) et
n'est certainement pas celle où se trouve la macro excel de publipostage.

Après une nuit de sommeil j'y verrais peut être un peu plus claire





michdenis a écrit :
Bonjour,

Voici un exemple créé par Jièl Goubert et publié
sur ce forum. Perso. Je ne l'ai jamais testée.
Évidemment, il faudra que tu l'adaptes à ton
environnement.

IMPORTANT : dans ton projetVBA de ton fichier Excel, tu dois
ajouter la référence suivante :
Fenêtre de l'éditeur de code / barre des menus / outils / références /
et tu coches :
"Microsoft Word 12.0 Objects librairy"
12 -> selon la version d'office que tu as.

-------------------------------------------------------
Function Publipostage()

Dim WdDoc As Word.Document
Dim Chemin, Fichier, Chemin_Fichier, Source As String

' Récupère le chemin des fichiers de la feuille "saisie"
' cellule "Chemin"
Chemin = Worksheets("Saisie").Range("Chemin")

' Récupère le nom du fichier de la feuille "saisie"
' cellule "Nom_Fichier"
' choisi dans une liste déroulante
Fichier = "" + Worksheets("Saisie").Range("Nom_Fichier")

Chemin_Fichier = Chemin + Fichier

Source = "Procedure.xls" ' a modifier pour que ce soit variable

' Démarrer Word en ouvrant la lettre type
Set WdDoc = GetObject(Chemin_Fichier, "Word.Document")

With WdDoc
' Masque Word
.Application.Visible = False

' Créé la liaison à la base de données afin de pouvoir
' déplacer facilement les fichiers.
' Source contient le chemin d'accés au fichier
.MailMerge.OpenDataSource _
Name:=Source, _
LinkToSource:=True, _
Format:=wdOpenFormatAuto, _
SQLStatement:="SELECT * FROM `Données_Mailing$`"

' Lancer la fusion du 1er et seul enreg vers un nouveau doc
With .MailMerge
.Destination = wdSendToNewDocument
With .DataSource
.FirstRecord = 1
.LastRecord = 1
End With
.Execute Pause:úlse
End With

' Affiche Word
.Application.Visible = True

' Ferme le doc ayant servi de modèle sans l'enregistrer
.Close (False)

End With

' Active Word
Application.ActivateMicrosoftApp xlMicrosoftWord

' Libère la mémoire
Set WdDoc = Nothing

End Function
------------------------------------------




"merguez07" a écrit dans le message de groupe de discussion :
4bd32124$0$16498$
Bonjour à tous,
je viens de passer mon après midi a essayer de faire réaliser un
publipostage Word à partir de mon fichier Excel mais je bloque.

Je m'explique : mon fichier excel contient une liste de données que je
veux publiposter. Le nom de mon fichier Excel pouvant changer j'ai
choisit de piloter le publipostage à partir du vba de mon fichier excel.

Dans ma macro Excel de publipostage je met:

NomduProgramme = ActiveWorkbook.Path + "" + ActiveWorkbook.Name
Set ww = CreateObject("word.application"): ww.Visible = True
Set docWord = ww.Documents.Open(ActiveWorkbook.Path + "" + "Dossier
Lignage.doc")

("Dossier lignage.doc" est ne nom de mon document Word)


With docWord.MailMerge
.MainDocumentType = wdFormLetters (ça marche)
.OpenDataSource Name:=NomduProgramme, _
ConfirmConversions:úlse, ReadOnly:úlse, LinkToSource:=True, _
AddToRecentFiles:úlse, PasswordDocument:="", passwordTemplate:="", _
WritePasswordDocument:="", WritePasswordTemplate:="",
Revert:úlse, _
Format:=wdOpenFormatAuto, Connection:="Feuille de calcul
entière", _
SQLStatement:="", SQLStatement1:=""




c'est ici, au chargement de opendatasource que ça ne marche pas. Le
fichier Word reste en attente, la liaison dde ne se fait pas. Cela me
semble normal dans la mesure où je demande à word de lire une base excel
alors que je suis en train d'excuter une macro de ce même fichier excel.

Comment puis je m'en sortir ?