Word 2000 : Le publipostage par e-mail (suite)

Page précédente <--   Page 4

II. La publipostage avancé en utilisant Visual Basic Application (VBA)

Le publipostage réalisé de manière interactive, comme expliqué dans la première partie de ce cours, montre très rapidement ses limites. Par exemple, supposons que vous vouliez mettre un texte différent pour chaque département de votre association de surfeurs, de façon à donner les nouvelles locales, c'est presque impossible à réaliser de manière interactive. C'est par contre assez facile si vous utilisez VBA.

Les possibilités de VBA sont importantes. Mon cours va se limiter à vous donner un exemple commenté de macro d'envoi d'e-mails en nombre, à charge pour vous d'approfondir la question en utilisant l'aide de Word relative au VBA, par ailleurs bien faite puisque j'ai appris le VBA uniquement avec cette aide... Le code est mis en italique, le commentaire étant en texte normal.

L'exemple de code ci-dessous est volontairement assez simple, avec des instructions proposées à titre didactique (je veux dire que ce n'est pas forcément la solution la plus simple ou la plus élégante). Le principe consiste à construire, automatiquement, par la macro, un document complet, à partir de 3 "briques" (3 documents), puis à l'envoyer, toujours automatiquement.

Code de la macro-commande :

Sub MAIN()   'Cette instruction indique le début de la macro

Dim ImpEmail   'Les instructions Dim correspondent aux déclarations des variables
Dim Nb
Dim Numero

Set ImpEmail = Assistant.NewBalloon
   'Utilisation du "Compagnon Office" pour le dialogue de démarrage de la macro (6 lignes ci-dessous)
With ImpEmail
    .Heading = "Envoi groupé des e-mails de l'association"
    .Text = "Désirez vous envoyer les e-mails ?"
    .Button = msoButtonSetOkCancel
End With
If ImpEmail.Show <> -1 Then Exit Sub

Documents.Add
   'Ajoute un document vide
With ActiveDocument.MailMerge   'Transformation du document vide créé en document principal de publipostage
    .MainDocumentType = wdFormLetters
    .OpenDataSource Name:="C:\Mes documents\exemple données.xls"
   'On attache la source de données au document principal
    .ViewMailMergeFieldCodes = False
End With

ActiveDocument.MailMerge.DataSource.ActiveRecord = wdLastRecord
   'On se place sur le dernier enregistrement du fichier de données
Nb = ActiveDocument.MailMerge.DataSource.ActiveRecord   'Le nombre d'enregistrements Nb est égal au numéro de l'enregistrement actif, c'est à dire le dernier
ActiveDocument.MailMerge.DataSource.ActiveRecord = wdFirstRecord   'On se place sur le premier enregistrement du fichier de données
Numero = 1
ActiveDocument.MailMerge.EditMainDocument
Application.ScreenUpdating = False

Do While Numero <= Nb
   'Début de la boucle de construction du document principal
    With ActiveDocument.MailMerge
        .DataSource.ActiveRecord = Numero
    End With
    Selection.InsertFile FileName:="C:\Mes documents\Première partie de l'e-mail.doc"
   'Nous commençons par insérer un document Word qui est lui même un document de publipostage, lié à la même source de données, comme, par exemple, le document "exemple publipostage.doc" sur lequel nous avons travaillé dans la première partie du cours.
    Selection.InsertFile FileName:="C:\Mes documents\Département" + ActiveDocument.MailMerge.DataSource.DataFields("Département").Value + ".doc"   'Rappelez-vous que nous avons donné des nombres comme valeurs au champ "Département" de la source de données; il ne vous reste donc plus qu'à créer des documents du type : "Département01", "Département02" .... "Département95"; ces documents personnalisés par département seront automatiquement insérés en 2ème partie du document final. Ces documents personnalisés par département, peuvent être eux-même des documents de publipostage personnalisés...
    Selection.InsertFile FileName:="C:\Mes documents\Troisième partie de l'e-mail.doc"   'Insertion du document Word qui est lui même un document de publipostage, lié à la même source de données, en troisième partie du document final.
    With ActiveDocument.Sections.Last.Range.Fields   'Mise à jour des champs du document construit avec l'enregistrement en cours de la source de données
        .Update
    End With
    With ActiveDocument.MailMerge
   'Fusion des données et envoi de l'e-mail correspondant à l'enregistrement en cours
        .Destination = wdSendToEmail
        .MailAsAttachment = False
        .MailAddressFieldName = "email"
        .MailSubject = "Message de l'ADSC"
        .SuppressBlankLines = False
        With .DataSource
            .FirstRecord = Numero
            .LastRecord = Numero
        End With
        .Execute pause:=False
    End With
    With ActiveDocument.Sections.Last.Range
   'Destruction en mémoire de l'e-mail que nous venons d'envoyer
        .Delete
    End With
    Numero = Numero + 1
   'On avance à l'enregistrement suivant dans la source de données
Loop   'On retourne au début de la boucle pour la construction et l'envoi d'un nouvel e-mail

ActiveWindow.Close SaveChanges:=wdDoNotSaveChanges
Application.ScreenUpdating = True
StatusBar = "Opération terminée"

End Sub
   'Instruction qui indique la fin de la macro



Page précédente<--   Page 4