Macro créateur d'alerte date butoir
Bonsoir à tous et à toutes
Je me permets de vous solliciter car mes connaissances en VBA sont proches du néant.
J'espère que vous pourrez m'aider. J'ai joins mon dossier excel de base.
Je vais avec le planificateur windows faire ouvrir mon fichier excel une fois par jour. J'aimerai avoir une macro qui s'active alors automatiquement à l'ouverture afin de vérifier la colonne P (Date butoir accord). Je souhaiterai que la macro envoie un mail sur ma boite gmail 15 jours avant la date butoir mais également créer un événement dans google agenda.
Vous pensez que c'est faisable ? Merci pour votre aide en tout cas.
Cordialement.
Armorik
Re bonsoir à tous
Je m''interroge sur une chose...est ce qu'il vaut mieux dans un cas comme celui là "formuler" dans une nouvelle colonne de mon fichier la date finalement à moins 15 jours pour ensuite faire la macro ou pas ? (Je l'ai fait pour une autre action dans ce tableau avec la fonction "aujourd'hui"). Je ne sais pas si cela peut simplifier le codage de la macro car je galère pour le faire. Après le problème c'est que ce choix va alourdir le fichier qui dans sa version définitive est déjà conséquent) mais est ce que cela peut alléger la macro ?
J"ai récupéré ce codage dans un post de Lilette en 2016 que je viens de commencer à adapter à mon fichier et mes taches, mais c'est un casse tête pour moi. J'ai d'ailleurs l'impression au fil de mes lectures de ce site depuis des semaines, qu'il n'y a pas forcément une seule et même solution (codage) à un problème (vous me direz c'est ce qui fait la beauté du codage informatique) mais pour un débutant comme moi c'est comme un horizon qui s'éloigne à chaque fois que je pense avoir compris quelque chose.
Sur un autre codage, le worbook à l'ouverture me donnait bien une exécution automatique de la macro mais elle me donnait n'importe quoi en résultat.
Voilà ou j'en suis dans le codage (autant dire nul part)
Sub TesteDate()
'envoie un mail si la date est dépassée
Dim sSujet, sAdresseMail As String 'chaines pour le sujet, adresse d'envoi
Dim duree As Long '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 'colonne qui contiennent les dates à tester'
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 = "P" ' et elles sont en colonne P
'initialisation des données du mail envoyé :
sSujet = "Alerte Clauses suspensives"
'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 = Now - ActiveCell.Value ' la date est dans la cellule active
If duree < 15 Then 'la date est dépassée
sAdresseMail = ActiveCell.Offset(0, 3).Value 'l'adresse mail est dans la colonne suivante offset (0,1)
'MsgBox ("Envoi de courrier à " & sAdresseMail)
' envoyer le mail :
CDO_SendMail sSujet, sBody, sAdresseMail, sAdresseRetour
Else
'MsgBox ("La date n'est pas atteinte")
End If
Next I
End Sub
Sub CDO_SendMail(ByVal sSujet As String, ByVal sBody As String, ByVal sAdresseMail As String, ByVal sAdresseRetour)
'MARCHE IMPEC, sans demande de confirmation
'on peut préciser : le sujet, le corps , l'adresse mail, l'adresse de retour
Dim iMsg As Object
Dim iConf As Object
Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")
With iMsg
.Configuration = iConf
.To = sAdresseMail
.Sender = sAdresseRetour 'adresse de l'expéditeur pour le rapport envoyé
.From = sAdresseRetour 'adresse de l'expéditeur du mail
.ReplyTo = sAdresseRetour 'adresse à laquelle sera envoyée la réponse
.CC = ""
.BCC = ""
.Subject = sSujet 'sujet du message
.TextBody = sBody 'corps du message
'.AddAttachment Fichier 'fichier joint
.DSNOptions 14 'confirmation demandée dans tous les cas (voir ci-dessous avec 14 8 + 4 + 2)
' (0=pas réponse ; 2=rapport si échec ; 4=rapport si réussi ; 8=rapport si délai)
' pour demander des confirmations de réception ou d'envoi :
.Fields("urn:schemas:mailheader:return-receipt-to") = sAdresseRetour
.Fields("urn:schemas:mailheader:disposition-notification-to") = sAdresseRetour
' Update fields
.Fields.Update
' envoi
.Send
End With
End Sub
Private Sub Workbook_Open()
End Sub
Bonjour à tous
J'ai fait une partie du codage en m'appuyant sur un ancien post...je vais y aller petit à petit
Il ouvre la macro automatiquement à l'ouverture du fichier et m'averti des dossiers arrivant à 15 jours de l'échéance (je pense que le code n'est pas le plus jolie mais apparemment cela fonctionne).
Sauf que je voudrais pouvoir introduire des restrictions d'alerte comme par exemple si ma cellule P3 est vide (pas de date) il n'y ai pas d'alerte.
De même si une autre cellule du dossier client concerné indique que l'offre a été émise (je précise elle n'est pas présente dans le fichier joint pour le forum puisque je n'ai pas mis tout le tableau) elle se situe à la colonne AJ. Je ne sais pas si c'est important de le souligner mais toute la colonne est en Mise en forme conditionnel (0=Non , 1=en cours et 2= Oui). Je voudrais donc qu'à Oui la macro n'envoi pas d'alerte sur ce dossier.....désolé si je ne suis pas très clair.
Est ce que vous pouvez m'aider à introduire ces restrictions ? Merci par avance pour votre aide.
Voici le code que j'ai fait :
Sub Workbook_Open()
derlig = Sheets("Tableau suivi clients").Cells(Cells.Rows.Count, "A").End(xlUp).Row
For Each c In Sheets("Tableau suivi clients").Range("P2:P" & derlig)
ecart = c - Date
c.Interior.Color = RGB(255, 0, 0)
If ecart <= 15 Then
MsgBox "Alerte présentation des offres pour dossier " & c.Offset(0, -15) & " est définie dans " & ecart & " jours" & vbLf & _
"Merci de faire le nécessaire "
c.Interior.Color = RGB(255, 0, 0)
End If
Next
End Sub