Envoi automatique plusieurs Mails Excel - Outlook
Bonjour à tous et à toutes,
J'espère que vous allez bien.
Je vous sollicite aujourd'hui car je rencontre actuellement un problème concernant ma macro.
En effet, je souhaite envoyer un mail automatique dès que la date d'échéance arrive. Dans ce cas tous les fins de mois.
J''ai créé un bouton pour faire cet envoi automatique dès l'ouverture de mon classeur que j'ai configuré dans le planificateur de tâche Windows.
Dans ma colonne A se trouvera toutes les adresses mails des personnes concernées et dans ma colonne B le nom des collaborateurs.
Actuellement ma macro qui ne marche par ^^' :
Sub envoiClasseur()
Dim Fichier As Variant
Dim tabContactNames As Variant
DIM tabContactEmails As Variant
Fichier = Application.GetOpenFilename("Tous les fichiers(*.*),*.*")
MsgBox Fichier
Dim MaMessagerie As Object
Dim MonMessage As Object
Set MaMessagerie = CreateObject("Outlook.application")
Set MonMessage = MaMessagerie.CreateItem(0)
tabContactNames = Range("D11:D13").Value -->> Ici je souhaite mettre le nom des personne de ma colonne B
tabContactEmails = Range("A11:A13").Value -->> Ici je souhaite mettre les adresses mails
MonMessage.Attachments.Add Fichier
'Sujet du Mail'
MonMessage = "Rappel échéance kilométrage"
'Corps du mail'
contenu = "Bonjour,"
contenu = contenu & Chr(10) & Chr(13)
'Chr pour le saut de ligne'
contenu = contenu & "Ci-joint, le tableau a complété" & Chr(10) & Chr(13)
contenu = contenu & "Bonne journée" & Chr(10) & Chr(13)
contenu = contenu & "Cordialement,"
MonMessage.Body = contenu
'on provoque l'envoi du message'
MonMessage.Send
'rénitialisation de la messagerie pour ne pas tourner en boucle'
Set MaMessagerie = Nothing
'Boite de dialogue qui confirme l'envoi du message avec PJ'
MsgBox "Votre mail a bien été envoyé"
End SubJe suis sincèrement désolée mais je débute en VBA et j'essaye d'apprendre par moi-même mais parfois je bloque...
Je vous remercie par avance pour votre aide et vous souhaite une bonne fin de journée.
Salut LuanaDDC,
J'ai au préalable réalisé une macro très similaire. Je te propose que je regarde ça dès que je rentre chez moi d'ici 45min.
Tu peux déjà regarder ceci qui te donnera les bons codes pour envoyer un mail.
Essaie déjà de corriger cela et je reviens vers toi un peu plus tard !
Bonne fin de journée,
Baboutz
Bonjour LuanaDDC, Baboutz,
Un léger doute subsiste : il s'agit d'un mail groupé ou d'une série de mails individuels ?
Cdlt,
Bonjour Luana
Pendant que Baboutz est sur route ... un petit truc
'Corps du mail'
contenu = "Bonjour,"& "<br>"
contenu = contenu & "Ci-joint, le tableau à compléter" & "<br>"
contenu = contenu & "Bonne journée" & "<br>"
contenu = contenu & "Cordialement," & "<br>"
MonMessage.htmlBody = contenu & MonMessage.htmlBodytu auras un mail en html avec ta signature outlook au bas du mail
et au passage j'ai corrigé les 2 fautes d'orthografes.
Pour le sujet, il manque Subject
MonMessage.Subject = "Rappel échéance kilométrage"Subject est la propriété de l'objet MonMessage
Bonjour Steelson,
Alors puisqu'on pinaille, je fais monter les enchères et je rajoute 3 retours à la ligne
'Corps du mail'
contenu = "Bonjour,"& "<br><br>"
contenu = contenu & "Ci-joint, le tableau à compléter." & "<br>"
contenu = contenu & "Bonne journée," & "<br><br>"
contenu = contenu & "Cordialement," & "<br><br>"
MonMessage.htmlBody = contenu & MonMessage.htmlBodyet même un peu de ponctuation...
Et plus sérieusement, il ne manquerait pas les balises <html> et <body> ?
Merci à tous pour vos réponses et vos explications.
Je vais voir cela dès que je serai rentrée à la maison :)
@3GB : Il s'agit d'un mail groupé. En fait quand je vais cliquer sur le bouton, il va envoyer le même mail à tous les destinataires :). Merci pour les fautes ^^'
Il manque enfin les destinataires
destinataires = ""
For j = 1 To UBound(tabContactEmails)
destinataires = destinataires & Join(Application.Index(tabContactEmails, j, 0), ";") & ";"
Next
MonMessage.to = destinatairessois prudente au début
'on provoque l'envoi du message'
MonMessage.DisplayBon, il est rentré Baboutz ?
Bon, il est rentré Baboutz ?
Me voilàà !
Bon finalement tu as quasiment tout fait Steelson ahah !
Je pensais que c'était une série de mails, pas un mail groupé avec plusieurs destinataires.
Du coup, en adaptant la macro que j'avais pour LuanaDDC :
Sub EnvoyerEmail()
'On désactive les messages d'alertes d'excel et on désactive le défilement des macros
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'On déclare les variables
Dim OutApp, OutMail As Object
Dim strbody, Destinataire As String
'On ouvre un nouvel email
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
'On indique le corps du mail avec du HTML
strbody = "<HTML><BODY><H4>Dear " & NomContact & ",</H4>" & "<p>ICI MON MESSAGE</p>" & _
"<p><font color=""#2F5496"" size=""4"" face=""Arial""><b>LuanaDDC</b>(Boss)</font><br><font color=""#2F5496"" size=""2"" face=""Arial"">OEKOTEX Officer - Quality Asia</font><br><font color=""#2F5496"" size=""2"" face=""Arial"">MaSuperbeEntreprise</font><br><font color=""#2F5496"" size=""2"" face=""Arial"">Tel. : +336 XX XX XX XX</font><br><font color=""#2F5496"" size=""2"" face=""Arial"">E-MAIL: LuanaDDC@MaSuperbeEntreprise.com</font></p></BODY></HTML>"
'Si erreur pas au code suivant
On Error Resume Next
'Ce code permet l'ajout de la signature dans le corps du texte
With OutMail
' .Display 'Affiche la fenêtre du mail | Obligatoire pour ajouter la signature, à masquer si pas nécessaire
.To = Destinataire 'Le ou les destinataire(s) du mail
.CC = "Collègue1@MaSuperbeEntreprise.com ; Collègue2@MaSuperbeEntreprise.com" 'La ou les personne(s) en copie du mail ----
.BCC = "" 'la ou les personne(s) en copie caché du mail
.Subject = "Revue Kilométrage" 'L'objet du mail
.HTMLBody = strbody & .HTMLBody 'Le corps du mail + signature
.Send 'Envoie du mail automatique
End With
Application.DisplayAlerts = True
On Error GoTo 0
'on vide les variables objet
Set OutMail = Nothing
Set OutApp = Nothing
End SubD'ailleurs LuanaDDC, on pourrai presque automatiser ta macro pour qu'elle se lance automatiquement dès que le classeur s'ouvre !
D'ailleurs, je te conseil de rentrer les destinataires dans ta cellule directement sous la forme "XX@X.XX ; XX@X.XX ; XX@X.XX", comme ça pas besoin du petit code de Steelson !
Le gros pâté en HTML c'est par ce que dans mon cas, je devais envoyer une vingtaine de mails en automatique, donc j'ai recréé la signature du type.
Bizarre, tu passes à la charcuterie et tu nous fais un gros pâté !
Perso, je vote pour la solution de Steelson, pratique en cas de changement...
Ahah j'imagine que c'est corrélé
Je pense aussi qu'elle est plus pratique... !
Bonjour !
Avant tout merci pour votre aide ! C'est très gentil.
@Babtouz : Alors oui pour pour le body, je vais écarter le format en html ^^' mais merci ! Pour répondre à ta question. J'ai ma colonne A où j'ai mentionné toutes les adresses mails sous le format xx@xxx.xx. Dans ton code, Destinataire prends en compte ma colonne A ?
Autre chose, je t'ai dis n'importe quoi... le mieux c'est un mail séparé... Donc est-il possible de faire .Subject = "Rappel Kilométrage pour Mr ou Mme " & ("b" & lignes)
Pour l'envoi automatique dès l'ouverture du classeur, je suis preneuse ^^'
Je souhaite rajouter une condition également..."si cellule de ma colonne E est vide, alors tu m'envois le mail aux personnes concernées". J'ai pensé à mettre ça :
Dim ligne As Integer
For ligne = 11 à 19
If Range ("d" & ligne") = 0 Then
@Steelson : Je vais essayer également ton code ! Merciii !
Je souhaite essayer les deux, pour bien comprendre surtout et pouvoir l'adapter ensuite pour autre chose ^^.
Promis je vous ne embêterai plus après.
Salut LuanaDDC,
Il n'y a pas de soucis, tu ne nous embêtes pas voyons !
Babtouz... Je prend ça pour une insulte !
Je ne peux pas t'aider avant ce soir (boulot oblige), peut-être que mes camarades pourront, mais ce que je te conseil déjà c'est de mettre un fichier exemple anonymisé, ça sera plus facile pour traiter ton sujet !
Bonne journée,
Baboutz
PS : Tu peux mettre les bouts de codes dans la balise </>
Hooo désolée Baboutz ^^
Ci-joint le fichier anonyme.
Donc j'ai bien ma colonne A avec mes différentes adresses mails et ma colonne B avec les noms. Ensuite j'ai mes colonnes qui correspondent à mes mois. Donc Octobre, Novembre et Décembre. Chaque fin de mois, les collaborateurs doivent remplir la colonne du mois en cours.
En fin de page j'ai mis un Sujet, Contenu et le Path, que je vais masquer, pour faciliter le tout. J'ai rédigé un code en l'adaptant mais il ne marche pas...
Encore merci par avance...
Bonne journée !
Option Explicit
Private OL_App As Object
Private OL_Mail As Object
Private sSubject As String, sBody As String, sPath As String
Sub SendDocuments()
' Generate e-mails to be sent to a list of mail recipients, with a customized attachment and message for each person
Dim i As Long
Dim tabContactNames As Variant, tabContactEmails As Variant
' Init
Application.ScreenUpdating = False
' Open Outlook
On Error Resume Next
Set OL_App = GetObject(, "Outlook.Application")
If OL_App Is Nothing Then
Set OL_App = CreateObject("Outlook.Application")
End If
On Error GoTo 0
' Read E-mail parameters
sSubject = Range("B33").Value
sBody = Range("B35").Value
sPath = Range("B36).Value
' Read Contact list
tabContactEmails = Range("A11:A29").Value
tabContactNames = Range("B11:B29").Value
' Generate e-mails
For i = 1 To UBound(tabContactNames, 1)
If tabContactNames(i, 1) <> vbNullString Then
Call CreateNewMessage(tabContactNames(i, 1), tabContactEmails(i, 1), tabFNames(i, 1))
End If
Next i
MsgBox "The process has been entirely completed."
Set OL_App = Nothing
Set OL_Mail = Nothing
Application.ScreenUpdating = True
End Sub
Salut à tous,
LuanaDDC, voici ton fichier :
Attention les mails vont s'ouvrir à l'ouverture du fichier (mais pas se lancer).
Comment la macro se déclenche-t-elle ? À partir du 20 de chaque mois, si la macro n'a pas été lancé ce mois-ci, la macro s'exécute. Pour vérifier que la macro a été lancé ou non, on a besoin d'inscrire le numéro du dernier mois où elle a été lancé, en P1.
Comme tu le vois, les mails ne s'envoient pas en automatique. Le "problème" de l'envoie en automatique, est que ta signature n'y sera pas. C'est pourquoi je te conseille la signature préfabriqué que je t'ai mit, couplé avec l'envoi automatique !
Je n'ai pas compris cela :
Je souhaite rajouter une condition également..."si cellule de ma colonne E est vide, alors tu m'envois le mail aux personnes concernées".
Donc pour le moment je n'ai rien fait, mais explique moi et je l'ajouterai dans le code.
J'ai pris mes aises avec un tableau dans le mail.
Bonne soirée,
Baboutz
Bonjour Babtoutz,
J'espère que tu vas bien !
Désolée pour le temps de réponse ! Tout d'abord merci infiniment pour ton aide.
Concernant le dernier point sur la colonne E, en fait il s'agit d'un fichier unique qui est sur un serveur donc je pars du principe que les gens de sont pas tous disciplinés (^^') donc je souhaitais au début du mois suivant, renvoyer le fichier uniquement aux personnes n'ayant pas rempli la la cellule E qui correspond au kilométrage.
Avec le même bouton que j'ai crée dans ma macro.
En gros avec le planificateur Windows, le 20 de chaque mois, le fichier Excel s'ouvre et je n'ai plus a cliquer sur le bouton mais si c'est automatique comme tu as fait c'est top ! Puis au début du mois suivant, j'aurais ouvert le fichier et re cliquer sur le bouton qui aurait envoyé le même rappel juste a ceux qui n'ont pas rempli la cellule E.
Je ne sais pas si j'ai été très clair ^^' ! Quoiqu'il arrive, je te remercie beaucoup ! C'est déjà top avec ça !