IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Outlook Discussion :

Émailing via publipostage avec plusieurs destinataires (to et cc)


Sujet :

VBA Outlook

  1. #1
    Membre régulier
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    septembre 2015
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : septembre 2015
    Messages : 64
    Points : 75
    Points
    75
    Par défaut Émailing via publipostage avec plusieurs destinataires (to et cc)
    Salut le fofo,

    Question existentielle du jour : rajouter un cc sur un émailing via publipostage.

    Je viens de vérifier sur différents sites de Crosoft, il n'est pas possible lorsque l'on fait un publipostage de sélectionner plusieurs destinataires par mail (et en mettre plusieurs dans un même champ séparé par des ";" ne fonctionne pas non plus).

    J'essaie de passer par une macro en VB via excel, mais je reste limité aussi quant au fait que .MailMerge ne gère qu'un .MailAddressFieldName unique ...

    Donc je regarde maintenant du côté d'outlook en vb. J'ai trouvé quelques pistes intéressantes dont celle-ci dessous mais qui ne me satisfait pas non plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    Sub emailFromDoc()
        Dim wd As Object, editor As Object
        Dim doc As Object
        Dim oMail As Object
        Dim oApp As Object
     
        Dim iR As Integer
        Dim i As Integer
        Dim oDoc As Document
        Dim oDS As MailMergeDataSource
        Dim DocName1 As String
        Dim DocName2 As String
     
        Set oDoc = ActiveDocument
        Set oDS = oDoc.MailMerge.DataSource
        Set oApp = CreateObject("Outlook.Application")
     
        Set wd = CreateObject("Word.Application")
        Set doc = ActiveDocument
        doc.Content.Copy
        Set wd = Nothing
     
     
     
    iR = oDoc.MailMerge.DataSource.RecordCount
    Debug.Print iR
    For i = 1 To iR
     
        Set oMail = oApp.CreateItem(olMailItem)
        With oMail
     
     
             With oDoc.MailMerge
                 'Définition du premier et dernier enregistrement
                 .DataSource.FirstRecord = i
     
                 .DataSource.LastRecord = i
                ' Actualisation de l'enregistrement pour la sauvegarde
                 .DataSource.ActiveRecord = i
                  DocName1 = .DataSource.DataFields(3).Value
                  DocName2 = .DataSource.DataFields(4).Value
            End With
     
            'Ajout des destinataires
                .To = DocName1
                .CC = DocName2
                .Subject = "It's a fuckin'Test "
     
    '        .BodyFormat = olFormatRichText
            Set editor = .GetInspector.WordEditor
            editor.Content.Paste
           .Display
           .Send
     
        End With
     
    Next i
    End Sub
    la raison en est en simple, il faut pour que ce code fonctionne, que j'ouvre le .docx qui me sert à la fusion des données (par ailleurs sur un .xlsx). l'envoi multiple fonctionne, là-dessus, pas de sujet, toutefois, le document étant ouvert sur une valeur, et donc figé, je ne peux pas réellement parler de publipostage avec cette fonction.

    D'où ma question, est-il possible à partir d'outlook, de générer un émailing personnalisé (le body contient des données fusionnées, chaque émail est donc unique) à plusieurs destinataires par email ?

    Merci par avance pour le coup de main

    Pet's

  2. #2
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : mars 2006
    Messages : 4 087
    Points : 7 169
    Points
    7 169
    Billets dans le blog
    20
    Par défaut
    Salut,
    le CC est-il différent à chaque Email ?

  3. #3
    Membre régulier
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    septembre 2015
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : septembre 2015
    Messages : 64
    Points : 75
    Points
    75
    Par défaut
    Salut Oliv,

    pardonne ma réponse tardive, j'ai été un peu happé sur d'autres sujets !

    Oui le CC varie.

  4. #4
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : mars 2006
    Messages : 4 087
    Points : 7 169
    Points
    7 169
    Billets dans le blog
    20
    Par défaut
    Salut,

    2 idées qui me viennent.

    1ère solution

    Tu créés un "groupe de contact" (liste de distribution) par ligne , ce groupe devenant le destinataire de ton mail.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub AddNewMember()
        'Adds a member to a new distribution list
     
        Dim objItem As Outlook.DistListItem
        Dim objRcpnt As Outlook.Recipient
     
        Set objItem = Application.CreateItem(olDistributionListItem)
        'Create recipient for distlist
        Set objRcpnt = Application.Session.CreateRecipient("Dan.Wilson@toto.fr")
        objRcpnt.Resolve
        objItem.AddMember objRcpnt
        'Add note to list and display
        objItem.DLName = "tmp 1 publipostage"
         objItem.Save
    '    objItem.Display
    End Sub

    2ème solution
    Tu indiques dans le sujet "PUBLIPOSTAGE" et dans le corps de ton mail un truc du genre

    #CC=toto@toto.fr

    qui sera intercepté par l’événement itemSend de Outlook et indiqué en destinataire.


    tu mets dans outlook dans ThisOutlookSession
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Private Sub Application_ItemSend(ByVal item As Object, Cancel As Boolean)
     
     
        If Not item.Class = olMail Then GoTo fin
     
        If InStr(1, item.Subject, "PUBLIPOSTAGE", vbTextCompare) > 0 Then
            On Error Resume Next
     
            'On supprime le terme PUBLIPOSTAGE du sujet
            item.Subject = Replace(item.Subject, _
                    "PUBLIPOSTAGE", "")
     
           'on vérifie la présence d'un CC
     
    If InStr(1, item.Body, "#CC=", vbTextCompare) > 0 Then
     
    CC = Split(Split(item.Body, "#CC=", -1, vbTextCompare)(1), Chr(13))(0)
      Set objOutlookRecip = item.Recipients.add(CC)
          objOutlookRecip.Type = olCC
        objOutlookRecip.Resolve
     
    'on supprime la ligne
    If item.BodyFormat = olFormatHTML Then
    item.HTMLBody = Replace(item.HTMLBody, "#CC=" & CC, "", , , vbTextCompare)
    Else
    item.Body = Replace(item.Body, "#CC=" & CC, "", , , vbTextCompare)
    End If
     
    End If
     
            'On sauvegarde le mail
            item.Save
        End If
     
    fin:
     
    End Sub

  5. #5
    Membre régulier
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    septembre 2015
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : septembre 2015
    Messages : 64
    Points : 75
    Points
    75
    Par défaut
    Merci pour ton retour Oliv,

    Je vais tester les deux soluces que tu proposes pour valider la plus mieux !

    Je posterai le résultat dans la journée.

    Encore merci pour ta si précieuse (habituelle) aide.

  6. #6
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : mars 2006
    Messages : 4 087
    Points : 7 169
    Points
    7 169
    Billets dans le blog
    20
    Par défaut
    Salut,
    On peut aussi faire comme cela :

    https://www.slipstick.com/developer/...l-merge-excel/

  7. #7
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    décembre 2021
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : décembre 2021
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Oliv- Voir le message
    Salut,

    2 idées qui me viennent.

    1ère solution

    Tu créés un "groupe de contact" (liste de distribution) par ligne , ce groupe devenant le destinataire de ton mail.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub AddNewMember()
        'Adds a member to a new distribution list
     
        Dim objItem As Outlook.DistListItem
        Dim objRcpnt As Outlook.Recipient
     
        Set objItem = Application.CreateItem(olDistributionListItem)
        'Create recipient for distlist
        Set objRcpnt = Application.Session.CreateRecipient("Dan.Wilson@toto.fr")
        objRcpnt.Resolve
        objItem.AddMember objRcpnt
        'Add note to list and display
        objItem.DLName = "tmp 1 publipostage"
         objItem.Save
    '    objItem.Display
    End Sub

    2ème solution
    Tu indiques dans le sujet "PUBLIPOSTAGE" et dans le corps de ton mail un truc du genre

    #CC=toto@toto.fr

    qui sera intercepté par l’événement itemSend de Outlook et indiqué en destinataire.


    tu mets dans outlook dans ThisOutlookSession
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Private Sub Application_ItemSend(ByVal item As Object, Cancel As Boolean)
     
     
        If Not item.Class = olMail Then GoTo fin
     
        If InStr(1, item.Subject, "PUBLIPOSTAGE", vbTextCompare) > 0 Then
            On Error Resume Next
     
            'On supprime le terme PUBLIPOSTAGE du sujet
            item.Subject = Replace(item.Subject, _
                    "PUBLIPOSTAGE", "")
     
           'on vérifie la présence d'un CC
     
    If InStr(1, item.Body, "#CC=", vbTextCompare) > 0 Then
     
    CC = Split(Split(item.Body, "#CC=", -1, vbTextCompare)(1), Chr(13))(0)
      Set objOutlookRecip = item.Recipients.add(CC)
          objOutlookRecip.Type = olCC
        objOutlookRecip.Resolve
     
    'on supprime la ligne
    If item.BodyFormat = olFormatHTML Then
    item.HTMLBody = Replace(item.HTMLBody, "#CC=" & CC, "", , , vbTextCompare)
    Else
    item.Body = Replace(item.Body, "#CC=" & CC, "", , , vbTextCompare)
    End If
     
    End If
     
            'On sauvegarde le mail
            item.Save
        End If
     
    fin:
     
    End Sub
    Bonjour Oliv Tout d'abord un grand merci pour le code. J'ai essayé d'intégrer la solution 2 pour un publipostage. ça marche bien (pièce jointe + CC) quand il y a une seule adresse mail en CC mais s'i il y en a plusieurs comment procéder ? mon niveau est un peu ras des pâquerettes :/

Discussions similaires

  1. Publipostage avec plusieurs destinataires
    Par Youpikai dans le forum Word
    Réponses: 4
    Dernier message: 24/03/2018, 09h18
  2. Réponses: 7
    Dernier message: 13/07/2017, 16h50
  3. [AC-2010] Générer mail dans Outlook avec plusieurs destinataires
    Par zeuch dans le forum VBA Access
    Réponses: 6
    Dernier message: 14/01/2014, 23h29
  4. Réponses: 5
    Dernier message: 20/03/2012, 16h01
  5. Réponses: 4
    Dernier message: 02/02/2009, 22h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo