Créer une alerte mail automatique Excel

Bonjour à tous et à toutes, ceci est un appel à l'aide.En me basant sur les dates de validité de formations, visites médicales etc... On me demande de créer une alerte mail automatique un mois avant la date d’échéance.

Mes dates d’échéances sont en cellules C3 à C44; E3 à E44; G3 à G44; I3 à I44

J'ai créé une petite formule permettant de me calculer en cellules D3 à D44; F3 à F44; H3 à H44; J3 à J44 le nombre de jours restants avant échéance

Formule qui est : =SI(C3="";"NUL";(C3-A$46))

*En cellule A46 se trouve une formule pour me donner la date du jour : =AUJOURDHUI()

J'ai trouvé une macro très simple et qui fonctionne pour m'envoyer un mail en partant d'Excel qui est la suivante :

Sub Macromail() With ThisWorkbook .SendMail Recipients:=Array("XXX@gmail.com "), Subject:="Alerte date personnel accès" & Format(Date, "dd/mmm/yy") End With End Sub

J'ai créé une mise en forme conditionnelle pour que les cellules D3 à D44; F3 à F44; H3 à H44; J3 à J44 soient vertes si la date de validité est encore bonne; oranges si la date expire dans un mois (soit 30 jours); rouges si la date est dépassée.

Voila donc des jours que je m'arrache les cheveux à essayer toute sortes de macros, avec de la VBA que je ne comprends pas, avec pour mission l'envoi d'une alerte un mois avant dépassement d'une date, dès lors qu'une cellule devienne orange, donc atteigne la valeur 30, le tout automatiquement, sans avoir besoin d'ouvrir ce tableau Excel.

S'il faut modifier un peu ce tableau, le simplifier ou quoi que ce soit pour que cela fonctionne, pas de souci, je suis dans l'impasse.

Est-ce possible ? Quelqu'un pourrait m'aider ? En vous remerciant, Paul

Bonjour,

J'ai retrouvé ton post.

Donc sans ouvrir le fichier ce ne sera pas possible je pense, Excel doit être ouvert pour lancer la programmation. Que ce soit pour compter le nombre de jour entre ta date et la date du jour ou pour envoyer le mail.

Tu peux peut être essayer :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Sujet As String
Dim Destinataire As String

Destinataire = "XXX@gmail.com"

If Not Intersect(Target, Range("D4:D44")) Is Nothing Then
    If Target.Value < 30 Then
        If Sujet = "" Then
            Sujet = Target.Address
        Else
            Sujet = Sujet & " / " & Target.Address
        End If
    End If
End If

If Not Intersect(Target, Range("F4:F44")) Is Nothing Then
    If Target.Value < 30 Then
        If Sujet = "" Then
            Sujet = Target.Address
        Else
            Sujet = Sujet & " / " & Target.Address
        End If
    End If
End If

If Not Intersect(Target, Range("G4:G44")) Is Nothing Then
    If Target.Value < 30 Then
        If Sujet = "" Then
            Sujet = Target.Address
        Else
            Sujet = Sujet & " / " & Target.Address
        End If
    End If
End If

If Sujet = "" Then Exit Sub

With ThisWorkbook
    .SendMail Destinataire, Sujet
End With

End Sub

Je ne l'ai pas testé vu que je n'ai pas ton fichier...

Tient moi au courant !

Moul, je te remercie tout d'abord de l'aide, cependant cette macro n'a pas fonctionné, j'ai modifié mon tableau en supprimant ce que je ne pouvais pas communiquer pour pouvoir te le partager, le voici en PJ, merci encore

Le problème est compliqué parce qu'une cellule avec formule qui change semble ne pas être reconnu par Worksheet_Change....

Essai cela : (Le programme se lancera lorsque tu modifiera la date du jour en A46)

Bonjour Moul, fin de weekend rime avec début de semaine. Merci beaucoup pour cette macro qui fonctionne très bien, j'aurais cependant quelques questions en plus. Dans les case A,B de mon tableau figurent les noms et prénoms des personnes.

Serait-ce possible de mentionner dans l'alerte mail, par exemple, au lieu de de H4, "Validité visite médicale de XXX" soit le champ H2 et A4 pour recevoir un mail plus précis ?

Deuxième chose, il me paraissait logique aussi qu'excel ne puisse pas effectuer une tache comme celle-ci sans avoir besoin d'ouvrir le tableau, ce que tu m'as confirmé. Je risque surement de dire n'importe quoi, mais bon, je me demande si l'installation d'un logiciel automate qui irait seul ouvrir ce tableau pourrait donc déclencher toute cette macro, il m'a semblé trouver sur des forums que le terme worksheet calculate prenait en compte la modification via formule et donc je pense pourrait déclencher tout ceci si un automate ouvrait le tableau, qu'en penses-tu ?

Et, encore merci

Update, j'ai réussi à automatiser complètement l’exécution de cette macro, pour se faire je l'ai faite passer en auto open, et j'ai entré le raccourci de mon tableau Excel dans les programmes démarrage de mon ordinateur. C'est une affaire rondement menée. Seule chose qu'il me manquerait serait comme expliqué dans le post précédent, la précision du nom et de la formation de la personne concernée, merci.

Le voici en PJ.

508personnel-dates.xlsm (24.42 Ko)

Bonjour,

Désolé pour le retard.

Comme ceci ?

446personnel-dates.xlsm (23.92 Ko)

A bientot,

Eh bien je ne sais pas trop. Celui-ci ne s'active pas lorsque j'ouvre le tableau, de plus je reçois l'erreur d'exécution 1004, methode sendmail de l'objet '_workbook' a echoué

Merci encore

J'ai pensé qu'à coté du "/" des 4 fonctions de la macro écrire l'intitulé de la formation (fsa, cc, vm, msq) serait un moyen simple de parvenir a l'envoyer à chaque fois, voila ce que cela donne. Ça fonctionne bien pour tous sauf pour le premier déclencheur d'alerte, je ne reçois que la cellule D8 sans FSA, le tout, suivi de toute les autres avec les lettres correspondantes. Mais du coup rien de plus pour avoir la ligne A de chaque déclencheur.

Bonjour,

Effectivement le sujet contient trop de caractère pour être envoyer.

Essai comme cela

701personnel-dates.xlsm (24.45 Ko)

Re, celui la fonctionne superbement bien, je l'ai testé en mettant seulement 3 lettres dans chaque cellule A dans le but de tester. Pas de problème, mail bien reçu, structuré, nickel.

J'ai donc tapé les vrais noms complets du personnel, et la, erreur 1004, la même que tout à l'heure, je suppose donc que cela génère ici encore un texte trop long

Si l'on passe tout ce texte en corps du mail et non pas en titre ? Je ne sais pas

Oui mais le problème c'est que la fonction .sendmail ne gère pas le contenu d'un mail.

Au mieux regarde dans le pack de 88 fonctions dans les addin sur ce site. Une fonction de Sébastien fonctionne il me semble

J'ai regardé, je vais me pencher sur ça et chercher si l'un d'eux convient.

Sinon, en parallèle, est-ce possible de modifier cette macro pour qu'elle envoie 4 mails, un par formation a chaque fin de for each ? Cela allégerait le contenu de sujet normalement ?

Encore merci, vraiment

Le sujet est clos, voici le résultat final :

-4 macros nommées comme désiré

-1 macro autoopen permettant d'activer les 4 macros citées au dessus, les voici si quelqu'un rencontre le même type de problème que moi

Sub FSA()
Dim Sujet As String
Dim Destinataire As String

Destinataire = "xxxx@gmail.com"

Sujet = ""

For Each cell In Feuil1.Range("D3:D44")
    If cell.Value < 30 Then
        If Sujet = "" Then
            Sujet = Feuil1.Cells(2, "D") & " " & cell.Offset(0, -3).Value
        Else
            Sujet = Sujet & " / " & cell.Offset(0, -3).Value
        End If
    End If
Next

i = 0

If Sujet = "" Then Exit Sub

'Sujet = Replace(Sujet, "$", "")
Sujet = Replace(Sujet, "     ", "")

With ThisWorkbook
    .SendMail Destinataire, Sujet
End With

End Sub
Sub MSQ()
Dim Sujet As String
Dim Destinataire As String

Destinataire = "xxxx@gmail.com"

Sujet = ""

For Each cell In Feuil1.Range("J3:J44")
    If cell.Value < 30 Then
        If Sujet = "" Then
            Sujet = Feuil1.Cells(2, "J") & " " & cell.Offset(0, -9).Value
            i = 1
        Else
            If i = 0 Then
                Sujet = Sujet & " - " & Feuil1.Cells(2, "J") & " " & cell.Offset(0, -9).Value
                i = 1
            Else
                Sujet = Sujet & " / " & cell.Offset(0, -9).Value
            End If
        End If
    End If
Next

If Sujet = "" Then Exit Sub

'Sujet = Replace(Sujet, "$", "")
Sujet = Replace(Sujet, "     ", "")

With ThisWorkbook
    .SendMail Destinataire, Sujet
End With

End Sub
Sub CC()
Dim Sujet As String
Dim Destinataire As String

Destinataire = "xxxx@gmail.com"

Sujet = ""

For Each cell In Feuil1.Range("F3:F44")
    If cell.Value < 30 Then
        If Sujet = "" Then
            Sujet = Feuil1.Cells(2, "F") & " " & cell.Offset(0, -5).Value
            i = 1
        Else
            If i = 0 Then
                Sujet = Sujet & " - " & Feuil1.Cells(2, "F") & " " & cell.Offset(0, -5).Value
                i = 1
            Else
                Sujet = Sujet & " / " & cell.Offset(0, -5).Value
            End If
        End If
    End If
Next

i = 0

If Sujet = "" Then Exit Sub

'Sujet = Replace(Sujet, "$", "")
Sujet = Replace(Sujet, "     ", "")

With ThisWorkbook
    .SendMail Destinataire, Sujet
End With

End Sub
Sub VM()
Dim Sujet As String
Dim Destinataire As String

Destinataire = "xxxx@gmail.com"

Sujet = ""

For Each cell In Feuil1.Range("H3:H44")
    If cell.Value < 30 Then
        If Sujet = "" Then
            Sujet = Feuil1.Cells(2, "H") & " " & cell.Offset(0, -7).Value
            i = 1
        Else
            If i = 0 Then
                Sujet = Sujet & " - " & Feuil1.Cells(2, "H") & " " & cell.Offset(0, -7).Value
                i = 1
            Else
                Sujet = Sujet & " / " & cell.Offset(0, -7).Value
            End If
        End If
    End If
Next

i = 0

If Sujet = "" Then Exit Sub

'Sujet = Replace(Sujet, "$", "")
Sujet = Replace(Sujet, "     ", "")

With ThisWorkbook
    .SendMail Destinataire, Sujet
End With

End Sub
Sub Auto_OPen()
    FSA ' macro1 nom à remplacer par le nom de la macro à exécuter
    CC
    VM
    MSQ
    ' etc ...
End Sub

Voila le travail, bon c'est un peu long tout ça, mais, si ça peut aider quelqu'un d'autre ça vaut le coup.
Quoi qu'il en soit, un énorme merci à toi Moul.

Rechercher des sujets similaires à "creer alerte mail automatique"