Envoyer un email à partir d'une liste de contacts Excel

Bonjour à tous,

Dans un premier temps, je souhaiterais savoir si le projet est réalisable et ensuite s'il y aurait des âmes charitables pour m'aiguiller dans ma démarche afin de pouvoir réaliser ce projet.

Ce que je cherche à réaliser, est que j'ai une liste de contacts avec diverses informations pour chacun.

Cette liste comporte entre autres, une adresse email pour chacun.

En filtrant la liste sur base d'un critère (ex : Nationalité), je voudrais que le tableau filtré (uniquement ces valeurs là, pas les autres valeurs cachées par le filtre) soient envoyées à la liste des personnes sélectionnés par le filtre.

Un exemple étant toujours plus parlant, voir pièce jointe.

A mon niveau, le projet me parait relativement complexe donc je ne sais pas par ou commencer (sachant qu'il faudra obligatoirement écrire une macro).

D'avance merci pour vos conseils.

526pr1.xlsx (18.21 Ko)

Bonjour Pincho, et au forum

Avant de programmer quoi que ce soit, l'envoi des mails se fait-il via OutLook ?

Si non, je passe la main....

Exact, l'envoie se fait via Outlook.

J'ai lu pas mal de choses qui mentionnent "CDO" mais c'est tjrs relatif à une macro.

Allez ma pause déjeuner se termine....

Ci-joint le fichier d'envoi en masse suivant les lignes sélectionnées.

Pour l'instant je suis parti sur l'option hypothèse de de 100 lignes sélectionnées.

Sélectionné la 1ère ligne de la sélection et lancer la macro via le bouton ENVOI MAIL

Attention (Alt + F11) dans Outils + Références la ligne suivante doit être cochée

image

Emilio, merci pour ton aide.

Cela à l'air de fonctionner à merveille, à deux exceptions près :

  • La macro m'ouvre un email séparé pour chaque adresse email de la liste. Mon souhait serait que le même email soit envoyé à toute la liste. De plus, la liste peut contenir 2 fois la même adresse email (2 lignes différentes, avec des données différentes mais adressées à la même personne). Est-il possible de prévoir qu'il identifie les adresses doublons et qu'il ne le prenne qu'une seule fois?
  • L'email doit contenir une pièce jointe. La pièce jointe est la liste (après filtre). Est-il faisable que la macro "crée" un fichier excel uniquement avec la liste après filtre et que ce fichier soit mis en pièce jointe?

J'attendrais ta prochaine pause déjeuner, si t'as l'occasion de retomber sur ce topic

PS : j'essaye de comprendre également les choses pour pouvoir à mon tour aider un jour ou si j'ai de nouveau un besoin similaire, de le faire par moi même. Pourrais-tu m'indiquer quelle partie de la macro permet d'identifier la colonne où se situent les adresses email?

'Macro lié au CommandButton50 "RELANCE IMPRIMEUR  - DEVIS NON RECEPTIONNE"
Sub ENVOI_MAIL()
Dim msg As MailItem
Dim i%, Olapp
For i = 1 To 14
    If ActiveCell <> "" Then

        Set Olapp = New Outlook.Application
        Set msg = Olapp.CreateItem(olMailItem)
        msg.To = ActiveCell.Offset(0, 6).Value
        msg.Subject = "OBJET MESSAGE"
        msg.HTMLBody = "<html><body><font color=""black""><font size=3><FONT FACE=""Georgia"">" & "Bonjour, " & _
        "<br /><br /><br />" & "TEXTE DU MAIL" & _
        "<br /><br /><br />" & " </font></font></font></body></html>"

        msg.Display

        ActiveCell.Offset(1, 0).Select
    Else
    Exit Sub
    End If

Next i

End Sub

Encore merci.

Réponse à tes questions :

L'email doit contenir une pièce jointe. La pièce jointe est la liste (après filtre). Est-il faisable que la macro "crée" un fichier excel uniquement avec la liste après filtre et que ce fichier soit mis en pièce jointe?

Pourquoi ne pas créer un tout simplement un PDF, je le fais x fois par jour.

Code pour créer le PDF :

1) Nom du PDF dans une cellule (Ex en i1)

2) En J1 code pour créer le nom du PDF (ex. =I1&".pdf")

2) Dans le corps du code mentionner le chemin où sera enrgistrer le PDF

A = Range("i1").Text
  Range("A1:G100").Select 'Plage de cellule à imprimer en PDF
        Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "Chemin pour enregistrer le fichier pdf" & A & ".pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        False

A la fin du code MAIL ajoutes le code suivant qui correspond code pour insérer la pièce jointe.

msg.Attachments.Add Range("J1").Text 'Correspond au nom du PDF situé en j1

Mon souhait serait que le même email soit envoyé à toute la liste. De plus, la liste peut contenir 2 fois la même adresse email (2 lignes différentes, avec des données différentes mais adressées à la même personne). Est-il possible de prévoir qu'il identifie les adresses doublons et qu'il ne le prenne qu'une seule fois?

Aie, pour ma part s'il y beaucoup d'adresse mail dans les destinataire dans le message il peut être interprétrer comme un spam.

Si cela te prend du temps, tu peux envoyer les mails systématiquement par Oulook avec aucune intervention

Changes le code suivant

msg.Display

par le suivant

msg.Send

Pour le reste je ne saurai pas le faire car pour ma part très compliqué

Pourrais-tu m'indiquer quelle partie de la macro permet d'identifier la colonne où se situent les adresses email?

 msg.To = ActiveCell.Offset(0, 6).Value

C'est-à-dire la sixième colonne de la ligne de la celluleactive

A te relire

En te listant , j'ai une une autre idée pour gérer les doublons -> création d'une liste reprenant toutes les adresses email (après filtre) et en supprimant les duplicates. Je modifierais alors la macro pour qu'il n'envoie l'email qu'à ma liste après duplicates. Normalement, je devrais envoyer un email à la fois -> un filtre = une liste spécifique par personne (sauf des cas très spécifiques).

Concernant la pièce jointe, ca peut être un PDF. Je parlais d'un fichier excel parce que je pensais que c'était plus simple mais le PDF fera l'affaire.

En tout cas un grand merci pour ton aide bien précieuse. Je teste cela demain dès la première heure.

EDIT : je suis en train de faire déjà quelques tests, mais il me manque un élément. Dans quelle partie de la macro "ENVOIE EMAIL" je dois introduire la macro pour la création du fichier pdf et celle de la partie pour mettre en attachement?

Voici ce que j'obtiens :

Option Explicit

'Macro lié au CommandButton50 "RELANCE IMPRIMEUR  - DEVIS NON RECEPTIONNE"
Sub ENVOI_MAIL()
Dim msg As MailItem
Dim i%, Olapp
For i = 1 To 14
    If ActiveCell <> "" Then

        Set Olapp = New Outlook.Application
        Set msg = Olapp.CreateItem(olMailItem)
        msg.To = ActiveCell.Offset(0, 9).Value
        msg.Subject = "OBJET MESSAGE"
        msg.HTMLBody = "<html><body><font color=""black""><font size=3><FONT FACE=""Georgia"">" & "Bonjour, " & _
        "<br /><br /><br />" & "TEXTE DU MAIL" & _
        "<br /><br /><br />" & " </font></font></font></body></html>"

        msg.Display

        ActiveCell.Offset(1, 0).Select

        msg.Attachments.Add Range("C4").Text 'Correspond au nom du PDF situé en j1

        A = Range("c3").Text
        Range("A19:H200").Select 'Plage de cellule à imprimer en PDF
        Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Users\PCBureau48\Desktop\" & A & ".pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        False
    Else
    Exit Sub
    End If

Next i

End Sub

Une âme charitable pourrait m'indiquer dans quel ordre grouper les macros conseillées par Emilio?

Bonjour Pincho

Mille excuses car je n'ai pas vu mon message d'alerte. Donc voici ton fichier corrigé avec la bonne macro.

A chaque lancement de la macro, un pdf est créer avec un nom défini en j1

A te relire

341version-pr1.xlsm (16.58 Ko)

Bonjour Emilio,

Un grand merci pour l'aide fournie.

Malheureusement, mon manque de connaissances en la matière me fait défaut. J'essaye d'adapter la macro à mon fichier original mais sans succès. J'obtiens continuellement le message d'erreur suivant :

"Compile Error :

User-defined type not defined".

Il semblerait que ce soit une erreur commune mais malgré mes recherches, je ne parviens pas à la corriger. Certaines parlent de références, d'autres parlent d'une mauvais "identification" des variables Dim dans la macro.

Si ce n'est pas trop abuser de vous, j'essaye un dernier truc. Je vous joins le fichier original, tel qu'il sera utilisé (le format est identique). J'ai uniquement changé le contenu de certaines cellules. Le tableau se présentera à chaque fois sous cette forme là... à savoir : on utilise le slicer manuellement pour appliquer un filtre et ensuite on clique pour envoyer le tableau filtré à la personne dont l'adresse est reprise en cellule I2.

Est-il possible d'avoir la macro adapté à cette structure là?

Encore un grand merci pour ton aide.

208fichier-macro.xlsx (22.99 Ko)

Bonjour Pincho

J'ai créé la macro suivant le contenu de ton fichier. Pour ma part ça fonctionne.

Par contre j'ai figé la plage de cellule à imprimer en PDF... Je ne sais pas si quelqu'un sur le forum saura définir la plage par défaut selon le choix effectuée....

"Une question pour un champion !!"

A te relire

Un très grand merci Emilio.

Cela fonctionne à merveille, à une exception près : étant donné que mon tableau est relativement large dans Excel, le PDF m'affiche la colonne A et B dans une page, puis C et D dans une autre page, etc. Est-ce qu'il y a un moyen de faire toutes les colonnes dans une seule page?

Une solution serait que cela enregistre en XLS. Est-ce que le processus est différent de celui qui génère le PDF?

J'ai trouvé ceci sur le net. Est-ce qu'il n'est pas possible d'inclure ce bout de code dans le tien pour remplacer le PDF par un Excel?

Sub ColleEtSauve()
'
Dim MaPlage As Range

LaDate = Year(Date) & "-" & Month(Date) & "-" & Day(Date) 'Variable qui prend la date du jour format aaaa-m-j
Set MaPlage = Range("A18:H100") 'Applique la plage voulue à la variable, changer le range pour changer la plage

    MaPlage.Copy 'Fait la copie de la zone voulue
    Workbooks.Add 'Ouvre un nouveau Fichier XL
    ActiveSheet.Paste 'Colle la sélection à copier sur la feuille active, donc la nouvelle
    'Fait la sauvegarde, la deuxième ligne en retrait reprend la variable avec la date
    ActiveWorkbook.SaveAs Filename:= _
        "C:\Users\PCBureau48\Desktop\" _
        & LaDate & ".xls", _
        FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
End Sub

Quant au fait que la plage d'impression soit fixe dans le PDF, ca ne me dérange pas du tout qu'il y ait une ou deux pages vides à la fin.

EDIT: concernant le fichier PDF, il est possible de contrôler le rendu via la mise en page (page layout) directement dans Excel. Donc j'ai au final le rendu que je souhaitais.

Tu m'épargnes beaucoup de galère Emilio. Encore merci.

Rechercher des sujets similaires à "envoyer email partir liste contacts"