Problème tableur automatisation envoi de mail à échéance
Bonjour à vous,
Je me permets de vous solliciter car je rencontre une difficulté pour automatiser l'envoi de mails depuis mon tableur (vous trouverez le détail de mon besoin en fichier joint).
Je me suis inspiré de cette proposition pour créer ma macro :
Sub Alertes()
Dim C As Range, OL As Object, M As Object, Plage As Range
Set olApp = CreateObject("Outlook.application")
With Sheets("Feuil1")
Set Plage = .Range(.[A2], .Cells(.Rows.Count, 1).End(xlUp))
End With
For Each C In Plage
If C.Offset(, 1) - Date = 3 Then
Set M = olApp.CreateItem(olMailItem)
With M
.Subject = C.Offset(, 3)
.Body = C.Offset(, 4)
.Recipients.Add C.Offset(, 2)
'.display
.Send
End With
End If
Next C
End SubLa macro fonctionne dans un simple tableau avec une
seule colonne de date (j'ai intégré cdo car je préfère ne pas utiliser outlook). La voici :
Sub EnvoiMailCDO()
Dim C As Range, OL As Object, M As Object, Plage As Range
Set olApp = CreateObject("CDO.Configuration")
With Sheets("Feuil2")
Set Plage = .Range(.[A2], .Cells(.Rows.Count, 1).End(xlUp))
End With
For Each C In Plage
If C.Offset(, 5) - Date = 3 Then
Set mConfig = CreateObject("CDO.Configuration")
mConfig.Load -1
Set mChps = mConfig.Fields
With mChps
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = "1"
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "***@gmail.com "
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "****"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = "True"
.Update
End With
Set mMessage = CreateObject("CDO.Message")
With mMessage
Set .Configuration = mConfig
.To = C.Offset(, 2)
.From = "***"
.Subject = "Echéance projet *** à venir"
.TextBody = C.Offset(, 4).Text & "Bonjour, je vous informe que d'ici 3 jours il conviendra de **"
.Send
End With
End If
Next C
End SubCependant mon besoin porte sur un nombre important de colonnes de dates à cibler pour l'envoi des mails (ainsi que sur plusieurs projets).
Par ailleurs, je souhaite différencier le destinataire selon le projet en question.
Et ajouter un autre destinataire en copie.
Je précise que je débute en VBA, j'ai essayé de trouver des exemples qui correspondraient à mon besoin mais je n'ai pas trouvé de solution adéquate. J'ai essayé de m'inspirer de ce qui existait, mais cette méthode a clairement ses limites.
Donc si quelqu'un aurait un peu de temps à consacrer à ce problème, je lui en serais vraiment reconnaissant. Merci par avance.
bonjour,
une proposition
Sub EnvoiMailCDO()
Dim C As Range, OL As Object, M As Object, Plage As Range
Set olApp = CreateObject("CDO.Configuration")
With Sheets("Feuil1")
Set Plage = .Range(.[A3], .Cells(.Rows.Count, 1).End(xlUp))
ncol = .Cells(2, Columns.Count).End(xlToLeft).Column
End With
Set mConfig = CreateObject("CDO.Configuration")
mConfig.Load -1
Set mChps = mConfig.Fields
With mChps
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = "1"
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "***@gmail.com "
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "****"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = "True"
.Update
End With
For Each C In Plage
For i = 5 To ncol
If C.Offset(, i) - Date = 3 Then
Set mMessage = CreateObject("CDO.Message")
With mMessage
Set .Configuration = mConfig
.To = C.Offset(, 2)
.From = "***"
.Subject = "Echéance projet *** à venir"
.TextBody = C.Offset(, 4).Text & "Bonjour, je vous informe que d'ici 3 jours il conviendra de **"
.Send
End With
Exit For
ElseIf C.Offset(, i) - Date > 3 Then
Exit For
End If
Next i
Next C
End SubBonjour h2so4 (mon sauveur),
Un grand merci pour ta réponse rapide. Ça marche !!
Je vais essayer de rajouter un destinataire, en colonne d.
Sinon comme le tableur risque d'être ouvert plusieurs fois dans la journée, je vais aussi chercher une solution pour que le tableur indique si le mail a été envoyé (pour éviter les doublons). Si je trouve pas je reviendrai par ici.
Ensuite je mettrai sujet résolu.
Merci encore !