Publipostage via VBA
Joanito
-
Joanito -
Joanito -
Bonjour à tous,
J'aimerai effectuer un publipostage directement via une macro qui me met en forme mon document Excel et qui me lance mon document Word et lance le publipostage ou j'ai plus qu'à lancer l'impression.
Mon code est le suivant (surement tout faux vu mon niveau en VBA :
Anniverssaire Macro
'
Range("Q2").Select
Do While ActiveCell.Offset(0, -16).Value <> ""
ActiveCell.FormulaR1C1 = "=IF(TODAY()=TEXT(DAY(RC[-1])&""/""&MONTH(RC[-1])&""/""&YEAR(TODAY()),""jj/mm/aaaa"")+0,""Anniversaire"",IF(AND(TODAY()>=TEXT(DAY(RC[-1])&""/""&MONTH(RC[-1])&""/""&YEAR(TODAY()),""jj/mm/aaaa"")-5,TODAY()<0+TEXT(DAY(RC[-1])&""/""&MONTH(RC[-1])&""/""&YEAR(TODAY()),""jj/mm/aaaa"")),""bientôt"",""""))"
ActiveCell.Offset(1, 0).Select
Loop
Set wordapp = CreateObject("word.Application")
wordapp.Visible = True
wordapp.Documents.Open "K:\Le Costard\Le Costard anniversaire.docx"
Set DocWord = AppWord.Documents.Open(FileMailing)
NomBase = Chemin & "\Temp.xls"
With DocWord.MailMerge
.OpenDataSource Name:=NomBase, _
Connection:="Driver={Microsoft Excel Driver (*.xls)};" & "DBQ=" & _
NomBase & "; ReadOnly=True;", SQLStatement:="SELECT * FROM [feuil1$] WHERE [ETIQUETTE] like 'x' OR [ETIQUETTE] like 'X'"
'Spécifie la fusion vers un nouveau document (wdSendToPrinter= Vers l'imprimante)
.Destination = wdSendToNewDocument
'.SuppressBlankLines = True 'Il ne peut pas y voir de ligne blanche car on demande celle qui ont des croix
'Prend en compte l'ensemble des enregistrements
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
'Exécute l'opération de publipostage
.Execute Pause:=False
End With
' Activation du doucment principal de Publipostage et fermeture
DocWord.Activate
DocWord.Close savechanges:=False
' Affichage l'application Word
AppWord.Visible = True
Set DocWord = Nothing
Set AppWord = Nothing
End Sub
Pouvez-vous m'indiquer la formule à avoir ?
Merci énormément de vos retours c'est un projet qui me tiens a coeur que je réalise pour mes études.
Cordialement
Joanito
J'aimerai effectuer un publipostage directement via une macro qui me met en forme mon document Excel et qui me lance mon document Word et lance le publipostage ou j'ai plus qu'à lancer l'impression.
Mon code est le suivant (surement tout faux vu mon niveau en VBA :
Anniverssaire Macro
'
Range("Q2").Select
Do While ActiveCell.Offset(0, -16).Value <> ""
ActiveCell.FormulaR1C1 = "=IF(TODAY()=TEXT(DAY(RC[-1])&""/""&MONTH(RC[-1])&""/""&YEAR(TODAY()),""jj/mm/aaaa"")+0,""Anniversaire"",IF(AND(TODAY()>=TEXT(DAY(RC[-1])&""/""&MONTH(RC[-1])&""/""&YEAR(TODAY()),""jj/mm/aaaa"")-5,TODAY()<0+TEXT(DAY(RC[-1])&""/""&MONTH(RC[-1])&""/""&YEAR(TODAY()),""jj/mm/aaaa"")),""bientôt"",""""))"
ActiveCell.Offset(1, 0).Select
Loop
Set wordapp = CreateObject("word.Application")
wordapp.Visible = True
wordapp.Documents.Open "K:\Le Costard\Le Costard anniversaire.docx"
Set DocWord = AppWord.Documents.Open(FileMailing)
NomBase = Chemin & "\Temp.xls"
With DocWord.MailMerge
.OpenDataSource Name:=NomBase, _
Connection:="Driver={Microsoft Excel Driver (*.xls)};" & "DBQ=" & _
NomBase & "; ReadOnly=True;", SQLStatement:="SELECT * FROM [feuil1$] WHERE [ETIQUETTE] like 'x' OR [ETIQUETTE] like 'X'"
'Spécifie la fusion vers un nouveau document (wdSendToPrinter= Vers l'imprimante)
.Destination = wdSendToNewDocument
'.SuppressBlankLines = True 'Il ne peut pas y voir de ligne blanche car on demande celle qui ont des croix
'Prend en compte l'ensemble des enregistrements
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
'Exécute l'opération de publipostage
.Execute Pause:=False
End With
' Activation du doucment principal de Publipostage et fermeture
DocWord.Activate
DocWord.Close savechanges:=False
' Affichage l'application Word
AppWord.Visible = True
Set DocWord = Nothing
Set AppWord = Nothing
End Sub
Pouvez-vous m'indiquer la formule à avoir ?
Merci énormément de vos retours c'est un projet qui me tiens a coeur que je réalise pour mes études.
Cordialement
Joanito
A voir également:
- Publipostage via VBA
- Publipostage mail - Accueil - Word
- Publipostage powerpoint - Forum Bureautique
- L'indice n'appartient pas à la sélection vba - Forum VB / VBA
- Publipostage word plusieurs destinataires sur une page ✓ - Forum Word
- Incompatibilité de type vba ✓ - Forum Programmation
2 réponses
Bonjour
Tu n'avais peut-^tre pas besoin d'une macro pour noter les anniversaires.... :-)
en écrivant la formule dans Q2 et en tirant vers le bas....
version vba
dans word le publipostage se fait par des "x" ou "X" et non par "anniversaire " ????
Michel
Tu n'avais peut-^tre pas besoin d'une macro pour noter les anniversaires.... :-)
en écrivant la formule dans Q2 et en tirant vers le bas....
version vba
Option Explicit '------------------- Sub souhaiter_anniv() Dim Derlig As Integer, Lig As Integer With ActiveSheet 'nettoyage .Columns("Q").ClearContents 'dernière ligne utilisée Derlig = .Columns("A").Find(what:="*", searchdirection:=xlPrevious).Row 'parcours la zone For Lig = 2 To Derlig If .Cells(Lig, "A") <> "" Then 'on est à la date d'anniversaire If Date = .Cells(Lig, "P") Then .Cells(Lig, "Q") = "anniversaire" Else If Date - .Cells(Lig, "P") <= 5 And _ Date - .Cells(Lig, "P") > 0 Then .Cells(Lig, "Q") = " bientôt anniversaire" End If End If End If Next End With ' appel word End Sub
dans word le publipostage se fait par des "x" ou "X" et non par "anniversaire " ????
Michel
Merci de votre réponse.
Si j'ai cette macro qui a chaque fois remet la formule c'est que c'est un document qui va évoluer avec de nouveaux clients c'est pour réaffecter à chaque fois la formule aux nouvelles lignes.
Chaque fois que la macro a mis la formule dans chaque case devant le client pour savoir si c'est bientôt son anniversaire ou si c'est le jour J. (même si des fois la formule et déjà mis ça refera toute la base tant pis... ^^)
J'aimerais que ça lance mon Word pour mon publipostage (ça j'y arrive) mais que ça me mette aussi directement en forme le publipostage avec les personnes qui sont en "anniversaire" filtrer la base Excel quoi.
Et que j'ai plus qu'à vérifier quelques détails et à lancer l'impression.
Merci encore de votre retour.
Bonne soirée
Joanito.
Si j'ai cette macro qui a chaque fois remet la formule c'est que c'est un document qui va évoluer avec de nouveaux clients c'est pour réaffecter à chaque fois la formule aux nouvelles lignes.
Chaque fois que la macro a mis la formule dans chaque case devant le client pour savoir si c'est bientôt son anniversaire ou si c'est le jour J. (même si des fois la formule et déjà mis ça refera toute la base tant pis... ^^)
J'aimerais que ça lance mon Word pour mon publipostage (ça j'y arrive) mais que ça me mette aussi directement en forme le publipostage avec les personnes qui sont en "anniversaire" filtrer la base Excel quoi.
Et que j'ai plus qu'à vérifier quelques détails et à lancer l'impression.
Merci encore de votre retour.
Bonne soirée
Joanito.