Macro pour publipostage

Bonjour,

Je dois écrire un programme sur macro excel afin de réaliser un publipostage. Problème, je n'ai eu qu'une formation de calcul matriciel sur macro, je ne sais rien faire d'autre...

J'ai un fichier word dans lequel il y a des trous pour insérer les champs souhaités, un classeur excel comme base de données où il y a tout une liste de noms de clients etc..

Je dois effectuer le publipostage grâce à un bouton de commande dans la macro excel, pour que tout se fasse d'un coup et rapidement, mais je ne sais pas quoi écrire comme programme..

Je suis totalement perdue :/

Merci pour votre aide !

Salut, le publipostage se fait dans Word et l'assistant est plutôt compréhensible. Commence par renseigner ta feuille Word en positionnant chaque champ pour la fusion. Ensuite, utilise l'enregistreur de macro et tu affecte le tout à un bouton.

Tout d'abord merci pour la réponse !

Le document word avec les champ est déjà crée et relié au ficher excel. Comment utiliser l'enregistreur de macro ? car cela se fait sur excel non? Qu'elles sont les actions à effectuer pendant l'enregistrement ?

Merci beaucoup

Bonjour,

et si tu mettais tes fichiers XL/Word ici en ayant soin de retirer/remplacer ce qui n'est pas public ?

P.

Oui j'enverrai un modèle demain matin

Bonjour,

voici un exemple de fichiers,

dans le classeur, il y a beaucoup plus de lignes

merci beaucoup

210fiche-clients.docx (14.85 Ko)
175classeur1.zip (4.20 Ko)

Bonjour,

perso (mais c'est bien perso) je ne fais jamais de publipostage par macro, ça ne prends pas bcp de temps une fois le word relié à la table excel de le lancer depuis word... Ca evite de lancer un machin de 100 pages (déjà vu) parce que on tout fait en automatique.

Je ne sais même pas comment ouvrir word depuis excel.

Je pensais que tu ne savais pas faire le publipostage, dsl de t'avoir donné de faux espoirs.

P.

Bonjour,

Je suis d'accord avec patrick1957.

Toutefois voici une proposition que j'ai réalisée avec l'outil "Développeur" dans le document word.

Pour lancer la macro, depuis le fichier word

cliquer sur l'onglet Développeur du ruban puis sur Macro et exécuter la macro Publipostage.

Bien entendu il faudra adapter le chemin surlligné ci-dessous en conséquence.

Sub Publipostage()
    ActiveDocument.MailMerge.OpenDataSource Name:= _
       [color=#FF0080] "C:\Users\Henri\Documents\ESSAIS\Classeur1.xls"[/color], ConfirmConversions:= _
        False, ReadOnly:=False, LinkToSource:=True, AddToRecentFiles:=False, _
        PasswordDocument:="", PasswordTemplate:="", WritePasswordDocument:="", _
        WritePasswordTemplate:="", Revert:=False, Format:=wdOpenFormatAuto, _
        Connection:= _
        "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=C:\Users\Henri\Documents\ESSAIS\Classeur1.xls;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=35;Jet OLEDB:Database L" _
        , SQLStatement:="SELECT * FROM `Feuil1$`", SQLStatement1:="", SubType:= _
        wdMergeSubTypeAccess
    With ActiveDocument.MailMerge
        .Destination = wdSendToPrinter
        .SuppressBlankLines = True
        With .DataSource
            .FirstRecord = wdDefaultFirstRecord
            .LastRecord = wdDefaultLastRecord
        End With
        .Execute Pause:=False
    End With
End Sub

en P.J. le fichier avec le code.

Désolé mais je sais pas faire mieux.

Cdt

Henri


Re bonjour

Voici le code à modifier:

Sub Publipostage()
    ActiveDocument.MailMerge.OpenDataSource Name:= _
        "C:\Users\Henri\Documents\ESSAIS\Classeur1.xls", ConfirmConversions:= _
        False, ReadOnly:=False, LinkToSource:=True, AddToRecentFiles:=False, _
        PasswordDocument:="", PasswordTemplate:="", WritePasswordDocument:="", _
        WritePasswordTemplate:="", Revert:=False, Format:=wdOpenFormatAuto, _
        Connection:= _
        "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=C:\Users\Henri\Documents\ESSAIS\Classeur1.xls;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=35;Jet OLEDB:Database L" _
        , SQLStatement:="SELECT * FROM `Feuil1$`", SQLStatement1:="", SubType:= _
        wdMergeSubTypeAccess
    With ActiveDocument.MailMerge
        .Destination = wdSendToPrinter
        .SuppressBlankLines = True
        With .DataSource
            .FirstRecord = wdDefaultFirstRecord
            .LastRecord = wdDefaultLastRecord
        End With
        .Execute Pause:=False
    End With
End Sub

c'est plus lisible

Henri

168fiche-clients.docx (15.59 Ko)

Bonjour,

merci beaucoup pour cette réponse !

quand j'execute la macro, le debogage me dit que la chaine fait plus de 255 caractères ..

comme je ne comprend pas trop ce qu'il y a écrit, je ne sais pas si je peux supprimer des choses ou pas ?

de plus, je suppose que ce code ne correspond que à la partie 'fusion' du publipostage, avant je dois bien faire l'ouverture de word etc.. ?

Merci !

Je crois avoir réglé le problème !

Maintenant j'ai une erreur 5535 au niveau du :

.Execute Pause:=False

Sinon, quand je lance la macro, l'application word s'ouvre mais n'affiche pas de fichier. De plus le document est envoyé à l'imprimante mais je ne sais pas si le publipostage a été effectué ou pas. (PS: je ne peux pas imprimer pour vérifier!)

Merci

Re Bonjour,

J'ai réglé mes précédents problèmes en faisant un nouvel enregistrement de macro, voici mon code :

Sub enregistrement07()

    ChangeFileOpenDirectory "S:\*********"
    Documents.Open Filename:= _
        "S:\chemin d’accès de mon document word" _
        , ConfirmConversions:=False, ReadOnly:=False, AddToRecentFiles:=False, _
        PasswordDocument:="", PasswordTemplate:="", Revert:=False, _
        WritePasswordDocument:="", WritePasswordTemplate:="", Format:= _
        wdOpenFormatAuto, XMLTransform:=""
    ActiveDocument.MailMerge.OpenDataSource Name:= _
        "S:\chemin d’accès de mon document excel" _
        , ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
        AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
        WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
        Format:=wdOpenFormatAuto, Connection:= _
        "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=S:\chemin d’accès de mon document excel;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engi" _
        , SQLStatement:="SELECT * FROM `'2016$'`", SQLStatement1:="", SubType:= _
        wdMergeSubTypeAccess
    With ActiveDocument.MailMerge
        .Destination = wdSendToNewDocument
        .SuppressBlankLines = True
        With .DataSource
            .FirstRecord = wdDefaultFirstRecord
            .LastRecord = wdDefaultLastRecord
        End With
        .Execute Pause:=False
    End With
End Sub

Cela fonctionne très bien lorsque je demande les premières lignes de mon tableau excel, par exemple :

.FirstRecord = 1

.LastRecord = 3

Mais dès lors que je les demande toutes, la macro se lance puisque le code fonctionne mais cela fait planter le logiciel.. puis lorsque je ferme l'application car plantée, cela me débogue au niveau du Execute Pause:=False

Sachant que mon tableau excel sera de plus en plus volumineux au cours du temps, il faut que je trouve une solution pour que le code fonctionne pour toutes les lignes d'un coup et rapidement, sinon pas d'utilité de faire une macro..

Quelqu'un a des idées ?

Merci beaucoup !

Autre problème, le code ne fonctionne que si l'appli word est préalablement ouverte, sinon ça debogue au niveau de :

ChangeFileOpenDirectory "S:\****"

avec erreur 462 le serveur distant n'existe pas ou n'est pas disponible

comment faire ?

sinon il faut faire ouvrir word avant mais je ne sais pas comment...

merci

Bonsoir LauBreathe et le forum,

Une solution toute simple sans passer par word.

Fichier excel avec 2 onglets: BDD et Fiche_Client

Dans la feuille Fiche_Client un bouton "IMPRIMER" qui permet (comme son nom l'indique) d'imprimer soit la fiche en cours ou soit la totalité des fiches.

Dans le cas d'une impression unique, chercher avec la liste déroulante la fiche client.

La Macro Imprime fait un aperçu avant impression.

Pour imprimer automatiquement, mettre l'apostrophe devant la 1ère ligne et l'enlever sur la 2ème des codes suivants:

ActiveWindow.SelectedSheets.PrintPreview 'aperçu avant impression
        'ActiveWindow.SelectedSheets.PrintOut ' impression de la fiche

A te relire

Cdt

Henri

124laurine-test1.zip (13.55 Ko)

Bonjour,

merci pour ta réponse!

Savez-vous pourquoi ma macro ne fonctionne pas si word n'est pas ouvert, alors que je lui dis bien où ouvrir le doc word. ?

ChangeFileOpenDirectory "S:\****"

Du coup en attendant j'ai crée un bouton pour ouvrir word, puis un bouton pour le publipostage...

Sinon, il y a deux choses que j'aimerai réussir à faire mais je ne sais pas trop comment :

1. Lors du publipostage, la macro m'ouvre d'abord le fichier doc 'modèle', puis le fichier fusionné final. J'aimerai pouvoir fermer le premier fichier word ouvert qui ne me sert à rien. Seulement, ce n'est pas mon fichier actif à l'écran.

2. Lorsque la macro se lance, cela m'ouvre une fenêtre SQL "les données de votre base de données seront insérées dans le document, voulez-vous continuer?" à laquelle je dois répondre 'Oui' pour que le publipostage commence. Est-il possible de faire un code qui valide cette fenêtre automatiquement (j'avais vu avec SendKeys?), en sachant qu'elle n'est pas non plus active à mon écran mais en petit en bas (je pense que c'est le problème..) ?

Ou peut-être carrément éviter cette fenêtre ?

Merci , Bonne Journée

Bonjour LauBreathe,

Désolé mais je ne peux pas t'aider davantage. Ce forum étant un forum dédié à excel.

Dommage que ma proposition avec le fichier unique excel ne te convienne pas. Pourtant il résout ton problème et on pourrait éventuellement envisager de ne fusionner que les enregistrements souhaités. Le tableau BDD peut s'agrandir autant que tu le veux et on pourrait l'alimenter à l'aide d'un formulaire pour faciliter la saisie.

Bonne fin de WE

cdt

Henri

Bonjour,

en fait, je ne comprend pas très bien votre proposition.. comment ne pas passer par word alors que je veux imprimer des lettres clients faites sur word.. ?

Bonjour,

Comme je le l'ai dit avec mon message du 6/07 et le fichier joint.

2 onglets: 1 la base de données (BDD) et 2 la lettre à fusionner (Fiche_clients)+ 1 bouton IMPRIMER avec choix d'impression (unique ou total).

On peut aisément établir des lettres types sous excel (voir mon modèle) sans utiliser word.

Le résultat du publipostage sera le même.

Je te remets le fichier en PJ.

Cdt

Henri

116laurine-test1.zip (14.55 Ko)

Bonjour,

Perso, j'ai travaillé en entreprise et fais pas mal de publipostage, je trouve que lancer ça par macro c'est risquer de faire une impression de nombreuses feuilles avec des erreurs...

ça ne prends pas bcp de temps d'ouvrir les 2 fichiers pour être certain et lancer la publipostage à ce moment là..

C'est juste mon avis

P.

Bonjour Laurine et Patrick1957,

Quand on maitrise bien la fonction publipostage dans word, je rejoins Patrick.

Toutefois (et les bretons sont connus pour avoir une forte tête) voici ma proposition V2 en excel avec formulaire pour alimenter la BDD et toujours dans la feuille "Fiche_Client" le bouton IMPRIMER.

Bon 14 juillet

Cdt

Henri

261laurine-test2.zip (41.76 Ko)
Rechercher des sujets similaires à "macro publipostage"