Lancer une macro automatiquement 1 fois par semaine

alexpepe - 5 avril 2016 à 11:15 - Dernière réponse : ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

2 réponses

BunoCS 13830 Messages postés lundi 11 juillet 2005Date d'inscriptionModérateurStatut 18 mai 2018 Dernière intervention - 5 avril 2016 à 12:02
0
Utile
Même remarque
Commenter la réponse de BunoCS
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 5/04/2016 à 17:06
0
Utile
Bonjour,
Qu'un autre utilisateur ou non soit présent sur l'application n'a aucune importance, dès lors que, comme avec Louis XVI, celui qui peut parler est celui qui peut faire. Et il y a toujours un qui "peut", forcément. REt il sera le seul à le pouvoir.
Problème (une fois de plus) de conception.
Une feuille "maj" dont une cellule (de ton choix) contient la date de dernière exécution de la macro.
On lit la valeur de cette cellule ===>> si date <= date du jour (Date) + 7 ===> on lance la macro puis on met dans cette cellule la date du jour + 7
Voilà voilà ...

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.