Bonjour à tous,
Je suis sur excel 2013.
J'ai crée une macro pour envoyer des mails automatiques lorsqu'une condition de date est remplie (la date du jour) couplé à un script vba et le planificateur de tâche pour que l'envoi soit automatique.
L'envoi automatique se fait bien mais la macro n’envoie qu'un seul mail même s'il y a la condition plusieurs fois (désolé j'ai du mal à expliquer)
Lorsque je lance la macro via l’éditeur visual basic d'excel TOUS les mails sont bien envoyés.
Voici ma macro : J'ai super détaillée car je ne suis pas très douée ^^
Merci pour votre aide
Je suis sur excel 2013.
J'ai crée une macro pour envoyer des mails automatiques lorsqu'une condition de date est remplie (la date du jour) couplé à un script vba et le planificateur de tâche pour que l'envoi soit automatique.
L'envoi automatique se fait bien mais la macro n’envoie qu'un seul mail même s'il y a la condition plusieurs fois (désolé j'ai du mal à expliquer)
Lorsque je lance la macro via l’éditeur visual basic d'excel TOUS les mails sont bien envoyés.
Voici ma macro : J'ai super détaillée car je ne suis pas très douée ^^
VB:
Sub Envoi_mail()
'définition des variables et du client de messagerie utilisé
Dim NOM As String
Dim DM As String
Dim ENVOI2 As Date
Dim Email As String
Dim message As String
Dim i As Long
Dim OLApplication As Outlook.Application, OLMail As Outlook.mailItem
Set OLApplication = CreateObject("Outlook.Application")
With Feuil1.ListObjects(1)
For i = 1 To .ListRows.Count
NOM = .ListColumns("Nom").DataBodyRange(i)
ENVOI2 = 0 ' pour dire que la colonne n'a pas forcément qu'une date mais ça ne marche pas :'(
If IsDate(.ListColumns("ENVOI2").DataBodyRange(i)) Then ENVOI2 = .ListColumns("ENVOI2").DataBodyRange(i)
Email = .ListColumns("Email").DataBodyRange(i)
DM = .ListColumns("DM").DataBodyRange(i)
If ENVOI2 = Date Then 'condition
'Envoi du mail
Set OLMail = OLApplication.createItem(olMailItem)
With OLMail
.To = Email ' Destinataire
.CC = >Destinataire en Copie '(je n'en ai pas besoin)
'.BCC = CopieCarboneInvisible 'Destinataire en Copie Caché '(je n'en ai pas besoin)
.Importance = olImportanceNormal 'Niveau importance du mail
.Subject = "Fin de période d'essai " ' Sujet du mail
.Categories = "Daily"
.Display 'insertion signature
message = "Salut " & DM & "<br>" & "<br>" & "Le délai de prévenance de fin de période d'essai de " & NOM & " arrive à échéance."
.HTMLBody = message & .HTMLBody
' .Attachments.Add CheminDestination ' Pièce jointe '(je n'en ai pas besoin)
' .OriginatorDeliveryReportRequested = True ' Accusé de dépôt '(je n'en ai pas besoin)
' .ReadReceiptRequested = True 'Accusé de lecture '(je n'en ai pas besoin)
.Send 'Envoi du mail sans visualisation
End With
Set OLMail = Nothing
End If
Next i
End With
Set OLApplication = Nothing
End Sub
'Prévoir un envoi automatiquement 1 fois le matin à l'ouverture du classeur (il s'ouvre automatiquement à l'ouverture de windows)
'avec le planificateur de tâches : créer un .vbs avec les instructions : ok ça fonctionne
'le code utilisé :
'Option Explicit
'On Error Resume Next
'TacheExcel
'Sub TacheExcel()
'Dim ApplicationExcel
'Dim ClasseurExcel
'Set ApplicationExcel = CreateObject("Excel.Application")
'Set ClasseurExcel = ApplicationExcel.Workbooks.Open("C:\Users\04250-G2\Documents\Suivi_PE_TEST_moi.xlsm") 'ouvre excel
'ApplicationExcel.Visible = True 'les actions seront visibles. Pour tout lancer en arrière-plan, remplacer True par False
'ApplicationExcel.Run "'C:\Users\04250-G2\Documents\Suivi_PE_TEST_moi.xlsm'!Feuil1.Envoi_mail" 'va lancer la macro
'ApplicationExcel.Quit 'pour quitter excel
'Set ClasseurExcel = Nothing
'Set ApplicationExcel = Nothing
'End Sub
Merci pour votre aide
Pièces jointes
Dernière édition: