Publipostage via VBA

Fermé
Joanito - 2 janv. 2018 à 10:18
 Joanito - 2 janv. 2018 à 18:44
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

2 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié le 2 janv. 2018 à 15:36
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
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
0
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.
0