Envoi de mail automatique si condition remplie

Soulmat

XLDnaute Nouveau
Bonjour,

Je viens vous demander un petit coup de main sur une automatisation Excel que j'essaye - désespérément - de faire.

J'ai un classeur Excel avec une feuille contenant un tableau, permettant d'indexer toutes nos documentations, avec différentes colonnes permettant de gérer entre autres les dates de révision. Une colonne "Dernière date de révision" est remplie manuellement, et en fonction du type de documentation que c'est (trigramme dans la première colonne), une formule excel permet de calculer la "Prochaine date de révision" dans la dernière colonne, avec une mise en forme conditionnelle visuelle (je passe sur les détails des codes couleur). Voir pièce jointe "LigneExcel" pour visualiser le tout.

Ce que je cherche à faire c'est :

- Si la date de prochaine révision d'une documentation dépasse la date du jour, alors cela envoie un mail
- Le contenu du mail comprend le nom de la documentation (colonne C Nom de la documentation) MAIS aussi le lien hypertexte associé pour que les destinataires n'aient plus qu'à cliquer dessus pour procéder à la révision.

J'ai essayé de combiner du code sur la feuille avec une Macro d'envoi de mail, mais je m'y perds et surtout je n'arrive pas à faire de l'automatisme de code, c'est-à-dire un code que je n'aurai pas à modifier pour chaque ligne que je veux gérer, aussi bien au niveau du VBA que de la Macro.... Je suis obligé de ruser pour un peu près tout, et je me dis qu'il doit y avoir des moyens plus simples... (je suis par ailleurs obligé de mettre l'extension du fichier en dur dans la Macro si je ne veux pas avoir à créer une colonne spécialement pour ça, vu que je n'arrive pas à récupérer le lien hypertexte de la colonne C...)

Voici mes pistes :

Code VBA :

Code:
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("O12") <= Date Then
    Call EnvoiMail
    End If
    End Sub

Macro EnvoiMail :

Code:
Sub EnvoiMail()

    Dim OutApp As Object
    Dim OutMail As Object
    Dim strbody As String

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

        strbody = "<font size=""3"" face=""Calibri"">" & _
                  "Bonjour,<br><br>" & _
                  "La documentation<B> " & ActiveCell.Offset(0, -11).Value & " </B>doit être révisée, merci d'en faire une relecture." & _
                  "<br><br>Cliquez sur ce lien pour ouvrir le fichier concerné : " & _
                  "<A HREF=""file://\\CHEMIN_DU_DOSSIER_DOCUMENTATION\" & Range ("O12").Value & ".docx" & _
                  """>ici</A>" & _
                  "<br><br>Cordialement," & _
                  "<br><br>L'Équipe Système et Réseau</font>"

        On Error Resume Next
        With OutMail
            .To = "DESTINATAIRE"
            .CC = ""
            .BCC = ""
            .Subject = "DOCUMENTATION - Révision nécessaire"
            .HTMLBody = strbody
            .Send
        End With

Pourriez-vous s'il vous plait m'aider à finaliser mon code pour le rendre aux petits oignons, ça serait super sympa... :)

Merci par avance à ceux qui essaieront ! N'hésitez pas à me dire si je ne suis pas clair ou si vous avez besoin de précisions quelconques.

Geoffrey
 

Pièces jointes

  • LigneExcel.jpg
    LigneExcel.jpg
    10.4 KB · Affichages: 320
  • mailexcel.jpg
    mailexcel.jpg
    11.3 KB · Affichages: 324

Soulmat

XLDnaute Nouveau
Re : Envoi de mail automatique si condition remplie

Super merci !!!

Je te joins le fichier Excel que j'ai allégé. Le code VBA pointe vers la cellule O12 pour test. La macro d'envoi de mail s'appelle EnvoiMail.

Synthèse de ce que j'aimerais faire :

- lorsqu'une cellule de la colonne O voit sa date dépasser la date du jour, un mail est généré fichier fermé et sans client de messagerie ouvert (ce qui ne doit pas aller avec le code que j'ai trouvé je pense de toute façon, qui utilise Outlook...) ;
- le mail envoyé est en HTML, à destination d'une seule adresse (liste de diffusion de toute façon) et son contenu comprend le nom de la documentation à réviser et le lien hypertexte la concernant (en somme, j'essaye de récupérer l'intégralité du contenu de la cellule de la colonne NOM DE LA DOCUMENTATION (C) pour la ligne correspondante).

Un grand merci pour ton aide (et celle d'autres amateurs éventuels).

N'hésite pas à me solliciter au besoin pour des précisions, questions ou autres !
 

Pièces jointes

  • TDB - 000 - 01 - Base documentaire - AVEC MACRO ET VBA ENVOI MAIL REVISION.xlsm
    29.7 KB · Affichages: 543

JCGL

XLDnaute Barbatruc
Re : Envoi de mail automatique si condition remplie

Bonjour à tous,

Peux-tu essayer ceci :

VB:
Sub EnvoiMail()    Dim OutApp As Object
    Dim OutMail As Object
    Dim strbody As String


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


        strbody = "<font size=""3"" face=""Calibri"">" & _
                  "Bonjour,<br><br>" & _
                  "La documentation<B> " & Cells(ActiveCell.Row, 3).Value & " </B>doit être révisée, merci d'en faire une relecture." & _
                  "<br><br>Cliquez sur ce lien pour ouvrir le fichier concerné : " & _
                  "<A HREF=""file://\\SERVEUR\Services\DCI\Service%20Informatique\Système%20et%20Réseau\Système\Documentation\" & Cells(ActiveCell.Row, 3).Value & ".docx" _
                  & """>ici</A>" & "<br><br>Cordialement," & _
                  "<br><br>L'Équipe Système et Réseau</font>"


        With OutMail
            .To = "jcgl@xld.fr"
            .CC = ""
            .BCC = ""
            .Subject = "DOCUMENTATION - Révision nécessaire"
            .HTMLBody = strbody
            .Send
        End With
        On Error GoTo 0
        Set OutMail = Nothing
        Set OutApp = Nothing
End Sub

Et ceci dans le module de la feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 14 And Target.Offset(, 1).Value <= Date Then Call EnvoiMail
End Sub

A+ à tous
 

Soulmat

XLDnaute Nouveau
Re : Envoi de mail automatique si condition remplie

Bonjour,

Enorme merci en tout premier lieu pour votre réponse, vraiment très gentil.

J'ai copié votre code, cela fonctionne pour l'envoi de mail, mais comme avant il me faut être dans le fichier et sur la cellule de la colonne "prochaine date de révision" pour que cela génère l'envoi de mail. J'ai mis une date de dernière révision au 16/09/2014, permettant d'avoir dans la colonne "prochaine date de révision" la date du 16/12/2014, donc normalement à 00h je devrais recevoir un mail si cela fonctionne correctement.

Pour info, j'ai vu que vous aviez laissé le ".docx", mais cela ne marchera pas pour toutes les lignes, certains documents étant en .docx, d'autres en .xls, .xlsx, .doc, etc., d'où mon souhaite de réussir à récupérer le lien hypertexte exact contenu dans cellule "NOM DE LA DOCUMENTATION" relative à la ligne.
 
Dernière édition:

angoul

XLDnaute Impliqué
Re : Envoi de mail automatique si condition remplie

Je revient sur le sujet, car j'ai une petite question
j'ai repris le code qui fonctionne, mais j'ai besoin d'une modification

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 14 And Target.Offset(, 1).Value <= Date Then Call EnvoiMail
End Sub

sur la ligne : If Target.Column = 14 And Target.Offset(, 1).Value <= Date Then Call EnvoiMail
j'ai mis la colonne 12, mais j'aimerai qu'il envoi un mail juste quand on modifie la colonne 12, (c'est une liste de choix)
donc il faut changer date then call envoimail, mais par quoi??

merci de votre aide
 

procuris

XLDnaute Nouveau
Bonjour à tous,

J'ai observé toutes vos réponses et ça m'a beaucoup aidé. Seulement je suis un novice dans le VBA et du coup j'ai du mal à adapter la formule à mon cas spécifique.

Vous trouverez mon fichier joint.

En fait, j'aimerais que le mail s'envoie automatiquement à partir du moment où dans la colonne E il y a un changement dans l'une des cellules de la colonne.

Il faut imaginer que le fichier final contiendra pas mal de lignes et dans cette démarche que le corps du mail envoyé soit :

Bonjour,

La tâche cellule de la colonne B correspondante a subit un changement. Elle est passé en statut cellule de la colonne E correspondante.

Cordialement,


J'espère avoir été clair. Si vous avez besoin de plus de précisions n'hésitez pas. Je vous remercie par avance de votre aide.
 

Pièces jointes

  • Planning.xlsm
    16.9 KB · Affichages: 62

jl456

XLDnaute Junior
Bonjour,
Je voudrais adapter le code ci-dessous à mon cas et je sollicite votre aide.
Je voudrais envoyer le mail en fin de journée avec les conditions suivantes :
- la date dans la feuille "Check" correspond à la date du jour
- et envoyer le mail en automatique à 18h00.
Je vous joins mon fichier exemple.
Merci pour votre aide.
 

Pièces jointes

  • Exemple.xlsm
    26.6 KB · Affichages: 38

Statistiques des forums

Discussions
311 740
Messages
2 082 047
Membres
101 880
dernier inscrit
Anton_2024