Comment créer un publipostage automatique avec Excel ? (sans Word !) - Excel formation
Comment créer un publipostage automatique avec Excel ? (sans Word !)
Le publipostage est une fonctionnalité puissante pour la création de courriers personnalisés, que ce soit pour des campagnes d'emailing, des invitations, des avis de promotion ou pour gérer efficacement la relation client.
Dans ce tutoriel, je vais vous montrer comment Excel, avec sa capacité à organiser et manipuler de grandes quantités de données, peut simplifier considérablement ce processus.
Nous verrons les Ă©tapes essentielles pour mettre en place un publipostage complet et automatique, sans avoir besoin de jongler avec d’autres applications, comme Word.
Nous verrons ainsi comment préparer vos données, saisir votre courrier, et automatiser le publipostage à l'aide de macros VBA.
Que vous soyez débutant ou utilisateur chevronné, ce tutoriel vous permettra de maßtriser cette fonctionnalité clé d'Excel pour optimiser vos communications professionnelles.
TĂLĂCHARGEMENT
Vous pouvez télécharger le fichier d'exemple de cet article en cliquant sur le lien suivant :
TUTORIEL VIDĂO
Partie 1 : Création d'un publipostage courrier
Partie 2 : Création d'un publipostage e-mail
1. QU’EST-CE QUE LE PUBLIPOSTAGE ?
Le terme de « publipostage » dĂ©signe une fonctionnalitĂ© trĂšs utile dans le cadre de la rĂ©daction de courrier, ou de communication.
En effet, il s'agit d'une méthode permettant de créer une série de documents qui sont presque identiques dans leur contenu général, mais qui contiennent certains éléments spécifiques à chaque destinataire, tels que le nom, l'adresse ou toute autre information personnalisée.
Ce processus est souvent utilisé pour les campagnes d'emailing, les invitations, les avis de promotion ou les informations relatives à la gestion de la relation client.
S’il est plutĂŽt d’usage d’utiliser une application de traitement de texte pour mettre en place le publipostage en utilisant la fonctionnalitĂ© directement intĂ©grĂ©e qui permet d'insĂ©rer des champs de donnĂ©es provenant d'une source externe.
Mais lorsqu’il s’agit de rĂ©aliser un publipostage rapide, Excel peut alors se distingue par sa capacitĂ© Ă organiser et Ă manipuler de grands volumes de donnĂ©es avant de les exporter pour le publipostage sans nĂ©cessiter de passer d’une application Ă l’autre.
2. PRĂPARATION DES DONNĂES
La prĂ©paration des donnĂ©es est une Ă©tape prĂ©alable importante Ă la mise en place d’un publipostage efficace.
La structure de la base de donnĂ©es doit ĂȘtre claire et logique pour permettre une identification rapide et optimale des informations.
Pour illustrer ce tutoriel, nous allons pourvoir utiliser la mini-base de données suivante dans laquelle chaque information est présentée dans une colonne dédiée.
De plus, chaque enregistrement (ou chaque client) est placé sur une ligne distincte.
Cela permet non seulement de visualiser clairement les informations associées à chaque personne, mais aussi de faciliter l'extraction de ces données pour le publipostage.
3. SAISIE DU COURRIER
Une fois que la base est mise en place, nous pouvons passer à la rédaction du courrier.
Cette étape de rédaction est essentielle dans le processus de publipostage.
Pour simplifier cette rĂ©daction, nous utiliserons ici une zone de texte qui va nous permettre de saisir le corps du courrier d’une maniĂšre structurĂ©e et flexible.
Pour insĂ©rer une zone de texte, rendez-vous dans le menu « Insertion » / « Texte » / « Zone de texte ».
Ensuite, nous allons faire apparaĂźtre les champs Ă personnaliser dans le cadre du publipostage entre crochets (« [Nom] », « [PrĂ©nom] », « [Adresse] »…).
Il est important que vérifier que les noms des champs utilisés correspondent bien aux titres de de colonne de la base de données.
4. MISE EN PLACE DU PUBLIPOSTAGE
Maintenant que la base de notre publipostage est bien paramétrée, nous allons pouvoir créer celui-ci.
Et pour cela, nous allons mettre en place une petite macro commande en VBA.
Une macro-commande VBA (Visual Basic for Applications) est un ensemble d'instructions Ă©crites dans le langage de programmation VBA qui peut ĂȘtre exĂ©cutĂ© dans les applications Microsoft Office pour automatiser des tĂąches rĂ©pĂ©titives.
Ces macros peuvent effectuer des opérations complexes et répétitives en un seul clic, comme le formatage des données, le calcul de formules ou, dans notre cas, le publipostage.
Comme d’habitude, pour que tout le monde puisse suivre ce tutoriel, quelque soit le niveau de connaissance en VBA, je vais vous expliquer chacune des lignes de code.
Mais si vous souhaitez aller plus loin et dĂ©couvrir comment les macro-commandes peuvent rĂ©volutionner votre utilisation d’Excel, cliquez ici pour dĂ©couvrir mon livre « Le VBA pour les dĂ©butants ».
Dans ce livre je vous prĂ©sente les bases du langage VBA et comment crĂ©er vos propres macros, mĂȘme si vous n’avez aucune connaissance en dĂ©veloppement Ă ce jour.
Donc pour crĂ©er la macro VBA, nous allons commencer par ouvrir l’Ă©diteur de code VBA en appuyant sur les touches [Alt]+[F11].
Celui-ci s’ouvre alors sur le projet en cours de xxx, c’est-Ă -dire sur le classeur actif.
Ensuite, nous allons insĂ©rer un nouveau module dans ce projet afin de pouvoir y insĂ©rer notre macro, en nous rendant dans le menu « Insertion » et en cliquant sur « Module ».
Une fois le module ajouté, nous allons y saisir les lignes de code de la macro.
Pour cela, nous commençons par crĂ©er la nouvelle macro en utilisant la commande « Sub », suivi du nom que nous souhaitons donner Ă celle-ci, ici nous l’appellerons simplement « publipostage » :
Sub publipostage
Lorsque nous validons la crĂ©ation de la macro en appuyant sur la touche [EntrĂ©e], VBA va alors ajouter la ligne « End Sub » Ă notre code, ce qui va permettre de fermer la macro, et donc tout ce que nous allons saisir entre ces deux lignes s’exĂ©cutera Ă chaque fois que nous appellerons la macro « publipostage ».
Maintenant, dans la macro, nous allons pourvoir déclarer deux variables pour stocker les noms des classeurs utilisés dans le processus :
- « classeurOrigine » sera le nom du classeur actif dans lequel se trouve les donnĂ©es, et a partir duquel nous appelons la macro,
- et « classeurPublipostage » sera le nom du nouveau classeur que nous allons crĂ©er pour le publipostage.
Une variable est une zone allouĂ©e dans la mĂ©moire de l’ordinateur qui permet de stocker et de manipuler des informations.
Pour la crĂ©er, nous utilisons le mot-clĂ© « Dim », suivi du nom que nous souhaitons lui attribuer.
Nous pouvons Ă©galement un type Ă celles-ci, c’est-Ă -dire que nous allons prĂ©ciser le type d’information que nous allons souhaiter manipuler avec ces variables.
Ici, Ă©tant donnĂ© que nous souhaitons y stocker des noms de feuilles, nous les typons en tant que « String », c’est-Ă -dire en tant que chaĂźne de caractĂšres.
Dim classeurOrigine As String, classeurPublipostage As String
Nous pouvons maintenant enregistrer le nom du classeur actif dans la variable « classeurOrigine » que nous venons de dĂ©clarer grĂące Ă l’instruction « ActiveWorkbook.Name »
classeurOrigine = ActiveWorkbook.Name
Ensuite, nous allons souhaiter que le publipostage se mette en place dans un nouveau classeur dans lequel chaque courrier nominatif sera une feuille de classeur dédiée.
Pour crĂ©er un nouveau classeur, nous utilisons la commande « Workbooks.Add » :
Workbooks.Add
Puis, nous stockons son nom dans la variable « classeurPublipostage » :
classeurPublipostage = ActiveWorkbook.Name
Nous ajoutons ensuite, une cellule en A1 indiquant la date et l'heure du publipostage automatique :
[A1] = "Publipostage automatique réalisé le " & Format(Now, "dd/mm/yyyy hh:mm")
Cela Ă©tant fait, nous pouvons revenir dans le classeur d'origine pour continuer Ă y travailler.
Windows(classeurOrigine).Activate
Maintenant, nous allons enregistrer le tableau dans lequel se trouvent les informations de publipostage dans une nouvelle variable que nous nommons « table ».
Nous typons cette variable comme un objet « Range », c’est-Ă -dire comme une plage de cellules.
Dim table As Range
Pour dĂ©terminer automatiquement l’ensemble des cellules qui le compose, nous pouvons utiliser l’instruction VBA « CurrentRegion » qui Ă©tant automatiquement une cellule donnĂ©e Ă l’ensemble de la zone qui la compose.
Ici, nous partons de la cellule [A8], qui est la premiĂšre cellule du tableau.
Enfin, Ă©tant donnĂ© que la variable « table » est un objet VBA, nous devons utiliser le mot-clĂ© « Set » pour lui affecter une plage de cellule :
Set table = [a8].CurrentRegion
Nous allons maintenant mettre en place une boucle qui va permettre de parcourir toutes les lignes de la base de données, puis sur chacune de ces lignes, nous analyserons les colonnes correspondantes.
Pour cela, nous initialisons deux variables « ligne » et « colonne » qui vont stocker les numĂ©ros de lignes et de colonnes :
Dim ligne As Integer, colonne As Integer
Puis, pour passer en revue toutes les lignes, nous dĂ©marrons une boucle « For », en commençant directement Ă la deuxiĂšme ligne pour Ă©viter les en-tĂȘtes.
Une boucle « For » est une instruction VBA qui permet rĂ©pĂ©ter une opĂ©ration tant qu’une condition est remplie.
Ici, nous allons utiliser la variable « ligne » pour mettre en place cette boucle, en commençant par lui donner la valeur de 2, et incrĂ©mentant cette valeur jusqu’Ă ce que celle-ci soit Ă©gale au nombre de lignes de la base de donnĂ©es
For ligne = 2 To table.Rows.Count
Ă l'intĂ©rieur de cette boucle, nous dĂ©clarons encore une nouvelle variable nommĂ©e « enregistrements » qui va permettre de recueillir les donnĂ©es de la ligne actuelle.
Dim enregistrements as String
Enregistrements = ""
Ă l'intĂ©rieur de la boucle de ligne, nous dĂ©marrons une autre boucle pour parcourir cette fois-ci les colonnes de la table et construire la chaĂźne « enregistrements ».
Celle-ci va ĂȘtre consitutuĂ©e de couple de donnĂ©es avec le nom de la colonne, et l’information en cours d’analyse, sĂ©parĂ©s par des points-virgules.
Puis, chaque cellule sera ajoutée à la suite, en utilisant cette fois-ci des points d'exclamation comme caractÚre de séparation :
For colonne = 1 To table.Columns.Count
enregistrements = enregistrements & table(1, colonne) & ";" & table(ligne, colonne) & "!"
Next
Cette maniĂšre d’organiser les donnĂ©es va ensuite nous permettre de retrouver l’arborescence de la base de donnĂ©es de maniĂšre simplifiĂ©e en utilisant l’instruction Split(), comme nous le verrons juste aprĂšs.
En effet, avant cela, nous allons souhaiter transfĂ©rer la zone de texte contenant le texte Ă publiposter sur le nouveau classeur, au sein d’une nouvelle feuille de calcul.
Pour simplifier ce processus, comme nous devons nous assurer qu’un seul objet se trouve sur la feuille de calcul, ce qui nous permettra de le sĂ©lectionner rapidement Ă partir de l’instruction :
ActiveSheet.Shapes(1).Copy
Ensuite, nous allons revenir sur le classeur de publipostage afin d’insĂ©rer une nouvelle feuille de calcul :
Windows(classeurPublipostage).Activate
Sheets.Add After:=ActiveSheet
Puis nous y collons la zone de texte :
ActiveSheet.Paste
Il ne restera alors plus qu’Ă remplacer les balises placĂ©es entre crochets par la valeur correspondante, en sachant que nous avions enregistrĂ© les paires de donnĂ©es titre/valeur dans la variable « enregistrement ».
Pour cela, nous allons maintenant dĂ©clarer une nouvelle variable « enregistrement » (au singulier cette fois) pour traiter chaque paire de donnĂ©es et une variable « nouveauTexte » afin de manipuler le contenu de la zone de texte :
Dim enregistrement As Variant, nouveauTexte As String
Nous pouvons maintenant dĂ©marre une boucle « For Each » pour traiter chaque paire de donnĂ©es de la variable « enregistrements ».
Cette dĂ©clinaison de la boucle « For » de passer en revue tous les Ă©lĂ©ments d’un ensemble de donnĂ©es.
Ici, nous utiliserons donc la fonction VBA Split() qui va utiliser le caractĂšre de sĂ©paration de chacune des lignes de la variable « enregistrements », en nous rappelant que nous avions utilisĂ© le point d’exclamation comme sĂ©parateur de ligne un peu plus tĂŽt :
For Each enregistrement In Split(enregistrements, "!")
Ă l'intĂ©rieur de cette boucle, nous vĂ©rifions si l'enregistrement n'est pas vide, puis remplaçons le texte entre crochets par les donnĂ©es correspondantes, aprĂšs avoir enregistrĂ© le contenu de la zone de texte dans la variable « nouveauTexte » :
If enregistrement <> "" Then
nouveauTexte = ActiveSheet.Shapes(1).TextFrame.Characters.Text
nouveauTexte = Replace(nouveauTexte, "[" & Split(enregistrement, ";")(0) & "]", Split(enregistrement, ";")(1), 1)
ActiveSheet.Shapes(1).TextFrame.Characters.Text = nouveauTexte
End If
Comme vous pouvez le constater, nous accĂ©dons et nous modifions le contenu de cette zone de texte avec l’instruction « ActiveSheet.Shapes(1).TextFrame.Characters.Text ».
Ensuite, nous pouvons revenir le classeur « classeurOrigine » afin de passer Ă l’analyse de la ligne suivante :
Windows(classeurOrigine).Activate
Et voilà , notre macro est maintenant terminée.
Pour la tester, il suffit de revenir sur la feuille de calcul, d’appuyer sur les touches [Alt]+[F8] afin de lancer la fenĂȘtre d’exĂ©cution des macros.
Sur cette fenĂȘtre, nous sĂ©lectionnons la macro « publipostage », puis nous attendons qu’Excel ait terminĂ© son travail.
Lors du lancement de la macro, il est possible que vous soyez confrontĂ© Ă une erreur ‘1004’
Si c’est le cas, pas d’inquiĂ©tude, cette erreur est liĂ©e au fait qu’Excel n’a pas eu le temps de copier la zone de texte avant que nous lui demandions de se placer sur la nouvelle feuille afin de la coller.
Dans ce cas, il suffit d’ajouter une lĂ©gĂšre pose entre ces deux opĂ©rations en insĂ©rant la ligne suivante, juste aprĂšs « ActiveSheet.Shapes(1).Copy »
Application.Wait (Now + TimeValue("0:00:01"))
Normalement maintenant tout devait rentre dans l’ordre.
Une fois le classeur de publipostage gĂ©nĂ©rĂ©e, vous pourrez Ă©diter l’ensemble des courriers trĂšs rapidement en sĂ©lectionnant « Imprimer le classeur entier » dans les options d’Ă©dition :
Et voilà , le publipostage est maintenant terminé !
5. EFFECTUER LE PUBLIPOSTAGE PAR EMAIL
Maintenant, continuons sur notre lancée pour découvrir cette fois-ci comment mettre en place un publipostage par email. Cette méthode permet de diffuser rapidement et efficacement vos documents personnalisés à chaque destinataire, en utilisant leur adresse mail.
Ici, nous allons utiliser la zone de texte qui nous servait dĂ©jĂ d’exemple pour la publication classique, mais bien entendu, il sera nĂ©cessaire d’adapter le texte pour que celui-ci corresponde au contexte de l’envoi d’un email.
Entrons maintenant dans le vif du sujet en lançant d’Ă©diteur de code VBA (pour rappel celui-ci s’affiche en utilisant le raccourci clavier [Alt]+[F11]).
Nous y retrouvons alors la macro précédente, mais pour éviter tout risque de confusion, nous allons souhaiter créer un nouveau module pour celle-ci.
Dans ce module, nous insĂ©rons la macro « creerEmail » :
Sub creerEmail()
End Sub
Comme nous l’avons vu un peu plus tĂŽt, cela permet de crĂ©er une macro, dans laquelle nous saisirons les lignes de code permettant d’envoyer le mail.
Avant de commencer, nous devons activer la référence à la librairie Microsoft Outlook dans notre projet pour interagir directement avec l'application de messagerie.
Pour cela, allez dans le menu Outils > RĂ©fĂ©rences, puis trouvez la ligne « Microsoft Outlook 16.0 Object Library » dans la liste alphabĂ©tique des librairies (le numĂ©ro de version varie selon votre Office).
Activez la référence en cochant la case et confirmez avec le bouton [OK].
Ainsi, nous pourrons utiliser des variables, objets et procédures pour contrÎler Outlook directement depuis Excel.
Maintenant, nous allons pouvoir créer un nouvel objet de gestion de l'application Outlook, que nous nommerons oOutlook.
Sub creerEmail()
Dim oOutlook As Object
Set oOutlook = CreateObject("Outlook.Application")
Cela Ă©tant fait, nous insĂ©rerons un nouveau mail dans l'application en utilisant un objet spĂ©cifique nommĂ© « oMail ».
Ce mail peut ĂȘtre crĂ©Ă© en employant la mĂ©thode « CreateItem(0) » sur l'objet « oOutlook ».
Dim oMail As Object
Set oMail = oOutlook.CreateItem(0)
Et voilĂ le mail est crĂ©Ă©, il ne reste plus qu’Ă le paramĂ©trer !
Pour faciliter le processus de personnalisation du mail, nous utiliserons l'instruction « With » de VBA, qui nous Ă©vitera de devoir rĂ©pĂ©ter l'appel du mail Ă chaque fois.
En effet, cette instruction « With » est utilisĂ©e pour simplifier l'Ă©criture du code lorsque vous devez exĂ©cuter plusieurs opĂ©rations sur un mĂȘme objet. Au lieu de rĂ©pĂ©ter le nom de l'objet Ă chaque fois que vous accĂ©dez Ă ses propriĂ©tĂ©s ou mĂ©thodes, vous pouvez l'encapsuler dans un bloc With, ce qui rend le code plus propre, plus facile Ă lire et Ă maintenir, surtout lorsque vous travaillez avec des objets ayant de nombreuses propriĂ©tĂ©s Ă configurer, comme c'est le cas pour un email dans une application de messagerie.
With oMail
End With
La premiĂšre chose Ă faire va alors ĂȘtre de renseigner l’adresse du destinataire du mail :
.To = email
Cette adresse mail que nous allons passer en tant qu’argument de la fonction « creerMail », en saisissant simplement le nom de cette variable entre les parenthĂšses de la macro, et en utilisant le type « String » :
Sub creerEmail (email as String)
Nous allons Ă©galement utiliser cette technique pour gĂ©nĂ©rer le corps du mail, avec l’argument « corps » et la propriĂ©tĂ© « Body » de l’objet « oMail » :
Sub creerEmail(email As String, corps As String)
…
.Body = corps
Enfin, nous allons Ă©galement insĂ©rer le titre du mail avec la propriĂ©tĂ© « .Subject » :
.Subject = "RĂ©siliation de votre abonnement"
Maintenant, le mail est prĂ©parĂ©, nous pouvons soit l’afficher dans l’interface d’Outlook, ce qui va nous permettre de contrĂŽler l’ensemble des champs avant de l’envoyer manuellement, et dans ce cas, nous allons utiliser la mĂ©thode .Display de oMail,
Soit, et uniquement si nous sommes certains du contenu de celui-ci, nous pouvons Ă©galement opter pour l’envoi direct du mail de maniĂšre transparente et dans ce cas, nous utiliserons plutĂŽt la mĂ©thode .Send (attention dans ce cas, le mail va partir immĂ©diatement sans possibilitĂ© de le contrĂŽler !)
Dans notre exemple, nous allons préférer afficher le message avant son envoi :
.Display
La macro que nous venons de crĂ©er va donc permettre d’envoyer un mail vers une adresse donnĂ©e.
Nous allons maintenant pouvoir l’exploiter dans le cadre du publipostage automatique.
Pour cela, revenons dans la macro « publipostage » que nous avions crĂ©Ă© dans la partie prĂ©cĂ©dente, dans laquelle il va nous suffire d’appeler cette nouvelle macro.
Pour commencer, plaçons-nous dans la boucle de gĂ©nĂ©ration du publipostage afin d’y dĂ©clarer une nouvelle variable que nous appelons simplement « email » et qui va permettre de capturer l’adresse email du destinataire lors de la crĂ©ation du publipostage :
Dim ligne As Integer, colonne As Integer
For ligne = 2 To table.Rows.Count
Dim enregistrements As String, email As String
Ensuite, dans la seconde boucle qui se trouve Ă l’intĂ©rieur de celle-ci et qui permet d’effectuer les remplacements de champs, nous allons vĂ©rifier si le champ en cours d’analyse est celui qui correspond Ă la colonne « Mail » de notre base. Lorsque ce sera effectivement le cas, alors nous pourrons l’enregistrer dans cette variable « email » :
If Split(enregistrement, ";")(0) = "Mail" Then
email = Split(enregistrement, ";")(1)
End If
Ensuite, juste aprĂšs cette boucle, il ne reste plus qu’Ă appeler notre nouvelle macro « creerMail » en passant en argument l’email et le contenu du texte modifiĂ© :
creerEmail email, nouveauTexte
Et voilà , la macro est maintenant terminée, nous pouvons revenir sur la feuille de calcul, adapter le contenu de la zone de texte, et cliquer sur le bouton permettant de générer le publipostage !
Ce processus de publipostage par email maximise l'efficacité de vos communications en vous permettant d'envoyer des messages personnalisés à un grand nombre de destinataires de maniÚre rapide et organisée.
Commentaires
Enregistrer un commentaire
đ Hello,
N'hĂ©sitez pas Ă commenter ou vous exprimer si vous avez des trucs Ă dire . . .đ