Lancer une macro automatiquement 1 fois par semaine

alexpepe - 5 avril 2016 à 11:15
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 5 avril 2016 à 12:38
Bonjour à tous,

J'ai besoin de votre aide car je suis novice en VBA.

Je souhaiterai qu'une macro dans un tableur Excel s'active automatiquement 1 fois par semaine le vendredi matin par exemple.

La macro en question envoi un mail à une adresse définie en colonne E si la date inscrite en colonne B se situe entre 1 et 7 jours de plus qu'aujourd'hui et si en colonne G il n'y a pas de X (ce dernier point fait l'objet d'une autre question sur le forum : mettre un X si condition respectée).

Il faudrait donc que sans intervention manuelle, le vendredi matin la macro se lance, fasse l'analyse des dates, envoi le mail si besoin et se referme.

Le problème que je voit quand à ma demande autre que le code en lui même c'est comment lier le fait de faire un lancement de mail sans que personne n'intervienne. Je ne sais pas si c'est possible.

Merci à vous pour votre aide.

ps: pour infos voici le code de mon fichier

Sub TesteDate()
'envoie un mail si la date est dans 7 jours ou moins
Dim sSujet, sBody, sAdresseMail As String 'chaines pour le sujet, corps, adresse d'envoi
Dim duree As Date 'nbre de jours entre aujourd'hui et la date à tester
Dim Lig_Deb, Lig_Fin As Integer 'ligne de début, de fin
Dim sDates_Col, sMails_Col As String 'colonnes qui contiennent les dates à tester et les adresses mail
Dim I As Integer

'initialisation des constantes de la macro :
Lig_Deb = 2 'dans ma feuille Excel, les dates à tester commencent en ligne 2
sDates_Col = "B" ' et elles sont en colonne B ( 2 ième colonne)et les adresses mail sont en colonne E à côté

'initialisation des données du mail envoyé :
sSujet = "Visite médical"
sBody = "Votre agent doit passer sa visite médicale dans sept jours ou moins."

'Ligne de fin =1ère cellule vide dans la colonne des dates
Lig_Fin = Val(Range(sDates_Col & CStr(Lig_Deb)).End(xlDown).Row)

' boucle de test dans la plage des dates (=> )

For I = Lig_Deb To Lig_Fin
Range(sDates_Col & CStr(I)).Select 'activer la cellule testée
duree = ActiveCell.Value - Now ' la date est dans la cellule active
If duree <= 7 And duree > 0 Then 'la date est dans 7 jours ou moins par rapport à aujourd'hui
sAdresseMail = ActiveCell.Offset(0, 3).Value 'l'adresse mail est dans trois colonne après offset (0,3)

' envoyer le mail :
CDO_SendMail sSujet, sBody, sAdresseMail
Else

End If

Next I

End Sub

Sub CDO_SendMail(ByVal sSujet As String, ByVal sBody As String, ByVal sAdresseMail As String)
'MARCHE IMPEC, sans demande de confirmation ;-)))))
'on peut préciser : le sujet, le corps , l'adresse mail, l'adresse de retour
Dim OutApp As Object
Dim OutMail As Object

Application.DisplayAlerts = False
ThisWorkbook.Save
Application.DisplayAlerts = True


Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)

On Error Resume Next
With OutMail
.To = sAdresseMail
.CC = ""
.BCC = ""
.Subject = sSujet
.HtmlBody = sBody
.Send
End With
On Error GoTo 0

Set OutMail = Nothing
Set OutApp = Nothing



End Sub

2 réponses

BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
5 avril 2016 à 12:02
0
Rejoignez-nous