Déclencher un publipostage Word depuis Excel

  • Initiateur de la discussion Initiateur de la discussion apt
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

apt

XLDnaute Impliqué
Bonjour à tous,

Après recherche j'ai trouvé un exemple de Brigitte avec une solution de Renauder.

https://www.excel-downloads.com/threads/declencher-publipostage-word-depuis-excel.125823/

Mais voila le fichier est un peu compliqué pour l'adapter à mon besoin.

Alors, pour mon cas, j'aimerais déclencher un publipostage pour une seule ligne dans le classeur, à chaque fois que je mets une croix dans la colonne "Etiquette", en plus avant de procéder, incrémenter la cellule H2 qui servira de référence dans fichier Word.

Merci d’avance.
 

Pièces jointes

Re : Déclencher un publipostage Word depuis Excel

Bonsoir,

Je vous envoi 2 fichiers d'exemple de publipostage qu'il faudra mettre dans le répertoire crée " Document" de la racine "C"!

Cependant il convient dans la feuille excel de sélectionner un NOM et de faire fonctionner la macro !

Le fichier "lettre.doc s'ouvre avec les modif ( il ne faut pas sauvegarder le fichier reçu car la macro plante ici :

wordDoc.SaveAs (vDossierDestination & vNomDoc) >>>> peut-être quelqu'un aura la solution !

Enfin il convient dans Word de mettre Date et Heure en cochant l'option " Mettre à jour automatiquement "

Malgré tout cela donne une idée pour effectuer un publipostage Excel- Word !

Code:
Sub Lettre()
Dim wordApp As Word.Application
Dim wordDoc As Word.Document
Dim i As Integer
Dim vDossierDestination As String
Dim vDossierSource As String
Dim vEtatCivil As String
Dim vPrénom As String
Dim vNom As String
Dim vRue As String
Dim vCodePostal As String
Dim vLocalité As String
Dim vNomDoc As String
Dim vDate As String
Dim vErreur As Integer
Dim vMessage As String
Dim vColonne As Integer
vDossierSource = "C:\Document\"
vDossierDestination = "C:\Document\"
ActiveSheet.Cells(ActiveCell.Row, 1).Select
If IsEmpty(ActiveCell) Then
    MsgBox "Cliquez dans la ligne du contact auquel vous voulez écrire. ", vbOKOnly, "Erreur"
    Exit Sub
End If
'With ActiveCell
    vEtatCivil = ActiveCell.Value
    vPrénom = ActiveCell.Offset(0, 1)
    vNom = ActiveCell.Offset(0, 2)
    vRue = ActiveCell.Offset(0, 3)
    vCodePostal = ActiveCell.Offset(0, 4)
    vLocalité = ActiveCell.Offset(0, 5)
'End With
vErreur = 0
If vLocalité = "" Then vErreur = 1
If vCodePostal = "" Then vErreur = 2
If vRue = "" Then vErreur = 3
If vNom = "" Then vErreur = 4
If vEtatCivil = "" Then vErreur = 5
Select Case vErreur
    Case Is = 5
        vMessage = "L'état civil manque."
        vColonne = 0
    Case Is = 4
        vMessage = "Le nom du contact manque."
        vColonne = 2
    Case Is = 3
        vMessage = "La rue manque."
        vColonne = 3
    Case Is = 2
        vMessage = "Le code postal manque."
        vColonne = 4
    Case Is = 1
        vMessage = "La localité manque."
        vColonne = 5
End Select
If vErreur > 0 Then
    MsgBox vMessage, vbOKOnly, "Erreur"
    ActiveCell.Offset(0, vColonne).Select
    Exit Sub
End If
ActiveCell.Offset(0, 6) = DateSerial(Year(Range("A1")), Month(Range("A1")), Day(Range("A1")))
Set wordApp = CreateObject("Word.Application")
wordApp.Visible = True
Set wordDoc = wordApp.Documents.Open(vDossierSource & "lettre.doc")
With wordDoc.ActiveWindow.Selection
    .HomeKey Unit:=wdStory
    .MoveDown Unit:=wdParagraph, Count:=6
    .TypeText Text:=vEtatCivil & " " & vPrénom & " " & vNom
    .TypeParagraph
    .TypeText Text:=vRue
    .TypeParagraph
    .TypeText Text:=vCodePostal & " " & vLocalité
    .TypeParagraph
    .MoveDown Unit:=wdParagraph, Count:=3
    .TypeText Text:=vEtatCivil & ", "
    .TypeParagraph
    .TypeParagraph
    .TypeParagraph
    .TypeParagraph
    .TypeParagraph
    .TypeText Text:="Veuillez agréer, " & vEtatCivil & ", mes meilleures salutations."
    .WholeStory
    .Fields.Unlink
    .EndKey Unit:=wdStory
    .MoveUp Unit:=wdParagraph, Count:=4
End With
vDate = Range("A1")
vNomDoc = vNom & vDate
wordDoc.SaveAs (vDossierDestination & vNomDoc)
Set wordDoc = Nothing
Set wordApp = Nothing
End Sub
 

Pièces jointes

Dernière édition:
Re : Déclencher un publipostage Word depuis Excel

Bonsoir JBARBE,

C'est très intéressant ton code.

Je vais essayer de l'adapter en attendant d'autres interventions.

Pour :

Code:
wordDoc.SaveAs (vDossierDestination & vNomDoc) '>>>> peut-être quelqu'un aura la solution !

C'est les slashs dans la date (vDate) qui ne sont pas admises et non autorisées dans l'appellation des noms de fichiers.

EDIT :

Le message d'erreur pendant la sauvegarde du fichier doc est résolu.

Voila, il te manquait aussi l'extension du fichier Word.

Code:
vDate = Range("A1")
vNomDoc = vNom & "_" & VBA.Format(vDate, "ddmmyyyy") & ".doc"

Format, me crée un message d'erreur :

Erreur de compilation:

Projet ou bibliothèque introuvable

Je ne sais pas pourquoi !!!

Peut-être quelqu'un me trouvera une solution ?

Alors j'ai utilisé
Code:
VBA.Format

🙂
 
Dernière édition:
Re : Déclencher un publipostage Word depuis Excel

Bonjour,

Super d'avoir trouvé une solution !

Néanmoins, pour la date j'ai dû faire référence à la range A1 car le programme plantait avec la macro date ??????

Si tu peux adapter cela à ton projet, c'est une bonne chose !

PS: ce programme je l'avais sous le coude et je n'es pas eu le temps de l'adapter à tes besoins !
 
Re : Déclencher un publipostage Word depuis Excel

Voilà j'ai fait quelques modif à la macro mais cela marche sauf pour la sauvegarde du fichier doc !
 

Pièces jointes

Dernière édition:
Re : Déclencher un publipostage Word depuis Excel

Bonsoir JBARBE,

Merci, mais on ne peut pas le faire en utilisant mon doc, qui contient déjà des champs insérés en publipostage ?

Parce que mon fichier doc contient des tableaux et images et je dois insérer l'information dans son endroit spécifié.

Pour ton problème de sauvegarde, c'est parce que le nom du fichier contient des caractères non autorisés (les deux points superposées 🙂))
 
Re : Déclencher un publipostage Word depuis Excel

Bonsoir JBARBE,

J'ai réussi à adapter une macro de RENAUDER.

Reste l'affichage du champ date, la sauvegarde du document word et sa fermeture pour pouvoir en créer d'autres et éviter les messages d’erreurs, et enfin supprimer la croix de la colonne E dans le classeur.

Merci d’avance.
 

Pièces jointes

Dernière édition:
Re : Déclencher un publipostage Word depuis Excel

Je pense que ma macro modifiée peut te convenir maintenant

Code:
Sub Lettre()
'Dim wANDdApp As WANDd.Application
'Dim wANDdDoc As WANDd.Document
Dim vDossierDestination As String
Dim vDossierSource As String
Dim vMatricule As String
Dim vService As String
Dim vMission As String
Dim vNom As String
Dim vNomDoc As String
Dim vDate As String
Dim vRef As String
vDossierSource = "C:\Document\"
vDossierDestination = "C:\Document\"
 vRef = Range("P3") & Range("Q3")
 vService = Range("P6")
 vNom = Range("P5")
 vMatricule = Range("P4")
 vMission = Range("P7")
 vErreur = 0
If Range("E2") = "" And Range("E3") = "" And Range("E4") = "" And Range("E5") = "" Then vErreur = 1
If Range("E2") = "" And Range("E3") = "" And Range("E4") <> "" And Range("E5") <> "" Then vErreur = 2
If Range("E2") <> "" And Range("E3") <> "" And Range("E4") = "" And Range("E5") = "" Then vErreur = 2
If Range("E2") <> "" And Range("E3") <> "" And Range("E4") <> "" And Range("E5") = "" Then vErreur = 2
If Range("E2") <> "" And Range("E3") <> "" And Range("E4") <> "" And Range("E5") <> "" Then vErreur = 2
If Range("E2") <> "" And Range("E3") <> "" And Range("E4") = "" And Range("E5") <> "" Then vErreur = 2
If Range("E2") <> "" And Range("E3") = "" And Range("E4") <> "" And Range("E5") <> "" Then vErreur = 2
If Range("E2") = "" And Range("E3") <> "" And Range("E4") <> "" And Range("E5") <> "" Then vErreur = 2
If Range("E2") = "" And Range("E3") <> "" And Range("E4") <> "" And Range("E5") = "" Then vErreur = 2
If Range("E2") <> "" And Range("E3") <> "" And Range("E4") <> "" And Range("E5") <> "" Then vErreur = 2
If Range("E2") <> "" And Range("E3") = "" And Range("E4") = "" And Range("E5") <> "" Then vErreur = 2
If Range("E2") = "" And Range("E3") <> "" And Range("E4") = "" And Range("E5") <> "" Then vErreur = 2
If Range("E2") <> "" And Range("E3") = "" And Range("E4") <> "" And Range("E5") = "" Then vErreur = 2
If vErreur = 1 Then
    MsgBox "Vous oubliez l'étiquette", vbOKOnly, "Erreur"
    Exit Sub
ElseIf vErreur = 2 Then
    MsgBox "Vous avez plus d'une étiquette", vbOKOnly, "Erreur"
    Exit Sub
End If
Set wordApp = CreateObject("Word.Application")
wordApp.Visible = True
Set wordDoc = wordApp.Documents.Open(vDossierSource & "liste.doc")
With wordDoc.ActiveWindow.Selection
    '.HomeKey Unit:=wdStANDy
    '.MoveDown Unit:=wdParagraph, Count:=6
    '.TypeText Text:=vMatricule & " " & vNom & " " & vService
    .TypeParagraph
    .TypeText Text:=vRef
    .TypeParagraph
    .TypeParagraph
    .TypeParagraph
    .TypeParagraph
    .TypeText Text:=vMatricule
    .TypeParagraph
    .TypeParagraph
    .TypeParagraph
    '.MoveDown Unit:=wdParagraph, Count:=3
    .TypeText Text:=vNom
    .TypeParagraph
    .TypeParagraph
    .TypeParagraph
    .TypeText Text:=vService
    .TypeParagraph
    .TypeParagraph
    .TypeParagraph
    .TypeText Text:=vMission
    '.TypeText Text:="Veuillez agréer, " & vNom & ", mes meilleures salutations."
    .WholeStory
    .Fields.Unlink
    '.EndKey Unit:=wdStANDy
    '.MoveUp Unit:=wdParagraph, Count:=4
End With
vDate = Range("Q3")
vNomDoc = "_" & VBA.Format(vDate, "ddmmyyyy")
wordDoc.SaveAs (vDossierDestination & Range("M5") & vNomDoc)
wordDoc.Close
Range("E2:E5").ClearContents
Range("H2") = Range("H2") + 1
Set wordDoc = Nothing
Set wordApp = Nothing
End Sub
 

Pièces jointes

Re : Déclencher un publipostage Word depuis Excel

Bonsoir JBARBE,

Je pense que ma macro modifiée peut te convenir maintenant

Ca marche seulement pour l'exemple que j'ai mis en pièce jointe.

Mais pour mon document original, ca ne le sera pas.

Parce que mon fichier doc contient des tableaux et images et je dois insérer l'information dans son endroit spécifié.

En plus chaque étiquette à sa place dans le document, ce qui m'évitera d'écrire le tout avec du code VBA.

Mais, pour la macro de renauder, ca convient plus et je n'ai qu'à régler certains problèmes :

Reste l'affichage du champ date, la sauvegarde du document Word et sa fermeture pour pouvoir en créer d'autres et éviter les messages d’erreurs, et enfin supprimer la croix de la colonne E dans le classeur.

Peux-tu te mettre sur cette tendance ?

Merci d'avance.

🙂
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
22
Affichages
661
Réponses
1
Affichages
632
Retour