VBA : envoi d'un mail auto en fonction du contenu d'une cellule

Fermé
minia - 4 mai 2017 à 16:40
f894009
Messages postés
16487
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 mai 2022
- 5 oct. 2018 à 13:06
Bonjour,

Apres plusieurs jour de recherche je n'ai pas trouvé de réponse à ma question.

J'ai un tableau excel avec 3 colonnes, j'aimerai qu'une macro s'exécute automatiquement lorsqu'une cellule de la 3e colonne contient le texte "A valider" et envoi un mail contenant les textes écrit dans les 2 autres colonnes de la même ligne.

Exemple :

A1 B1 C1
A2 B2 C2
A3 B3 C3

Si C1 contient "A valider" -> envoi auto d'un mail contenant le texte "A1 et B1 sont disponibles" ou A1 et B1 sont les contenu des cellules.


Voila mon code actuellement :

Sub mail_auto_fin_procédure()
Dim OutApp As Object
Dim OutMail As Object
Dim strbody As String
Dim L As String
L = "A valider" 'ne fonctionne que si c'est un nombre, j'ai une erreur de compilation quand c'est un texte
For L = "A valider" To Range("C65356").End(xlUp).Row
If Range("C" & L) = "A valider" Then

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

strbody = "A1 et B1 sont disponibles"

On Error Resume Next
With OutMail
.To = "***@***"
.CC = ""
.BCC = ""
.Subject = "A vérifier"
.Body = strbody
.Display 'utiliser .Send pour l'envoi du mail
End With
On Error GoTo 0

Set OutMail = Nothing
Set OutApp = Nothing
End If
Next L
End Sub

Merci pour votre aide.

6 réponses

f894009
Messages postés
16487
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 mai 2022
1 633
4 mai 2017 à 17:23
Bonjour,

Sub mail_auto_fin_procédure()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim strbody As String
    Dim L As Long

    With Worksheets("feuil1")    'adaptez le nom de feuille
        derlig = Range("C" & Rows.Count).End(xlUp).Row
        For L = 1 To derlig
            strbody = ""
            If Range("C" & L) = "A valider" Then
                Set OutApp = CreateObject("Outlook.Application")
                Set OutMail = OutApp.CreateItem(0)
                strbody = .Range("A" & L) & " et " & .Range("B" & L) & " sont disponibles"
                'On Error Resume Next
                With OutMail
                    .To = "xxxxxxxx@xxxxxx"
                    .CC = ""
                    .BCC = ""
                    .Subject = "A vérifier"
                    .Body = strbody
                    .Display 'visu @Mail
                    '.Send       ' pour l'envoi du @mail
                End With
                On Error GoTo 0
            End If
            Set OutMail = Nothing
            Set OutApp = Nothing
        Next L
    End With
End Sub
5
L'objectif est d'envoyé une seule fois le mail par ligne et pas tout réenvoyé à chaque fois tant que la case n'a pas changé.

Merci
1
f894009
Messages postés
16487
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 mai 2022
1 633
5 mai 2017 à 10:35
Bonjour,

Sub mail_auto_fin_procédure()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim strbody As String
    Dim L As Long

    With Worksheets("feuil1")    'adaptez le nom de feuille
        derlig = .Range("C" & Rows.Count).End(xlUp).Row
        For L = 1 To derlig
            strbody = ""
            If .Range("C" & L) = "A valider" And .Range("D" & L) = Date Then
                Set OutApp = CreateObject("Outlook.Application")
                Set OutMail = OutApp.CreateItem(0)
                strbody = .Range("A" & L) & " et " & .Range("B" & L) & " sont disponibles"
                'On Error Resume Next
                With OutMail
                    .To = "xxxxxxxx@xxxxxx"
                    .CC = ""
                    .BCC = ""
                    .Subject = "A vérifier"
                    .Body = strbody
                    .Display 'visu @Mail
                    '.Send       ' pour l'envoi du @mail
                End With
                .Range("C" & L) = "A valider" & " Ok"     'modification pour eviter x envoi
                On Error GoTo 0
            End If
            Set OutMail = Nothing
            Set OutApp = Nothing
        Next L
    End With
End Sub
0
Super ça marche parfaitement comme je le voulais !!

Dernière question : Comment lancer l'exécution de la macro automatiquement à 16h00 tous les jours par exemple ?

Merci.
1
ou plutot dès la modification de la colonne C par le texte "A verifier"
0
f894009
Messages postés
16487
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 mai 2022
1 633 > minia
Modifié le 5 mai 2017 à 16:06
Re,

Que decidez vous, modification de la colonne C par le texte "A verifier" ou a 16h00.

modification de la colonne C par le texte "A verifier"

code a mettre dans VBA de la feuille que vous remplissez
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim OutApp As Object
    Dim OutMail As Object
    Dim strbody As String
    Dim L As Long

    If Target.Count > 1 Then Exit Sub
    derlig = Range("C" & Rows.Count).End(xlUp).Row
    If Not Application.Intersect(Target, Range("C1:C" & derlig)) Is Nothing And Target <> "" Then
        strbody = "": L = Target.Row
        If Range("C" & L) = "A valider" And Range("D" & L) = Date Then
            Set OutApp = CreateObject("Outlook.Application")
            Set OutMail = OutApp.CreateItem(0)
            strbody = Range("A" & L) & " et " & Range("B" & L) & " sont disponibles"
            With OutMail
                .To = "xxxxxxxx@xxxxxx"
                .CC = ""
                .BCC = ""
                .Subject = "A vérifier"
                .Body = strbody
                .Display 'visu @Mail
                '.Send       ' pour l'envoi du @mail
            End With
        End If
        Set OutMail = Nothing
        Set OutApp = Nothing
    End If
End Sub
0
minia > f894009
Messages postés
16487
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 mai 2022

5 mai 2017 à 16:43
Cette partie : .Range("C" & L) = "A valider" & " Ok" n'est plus nécessaire ?
0
f894009
Messages postés
16487
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 mai 2022
1 633 > minia
5 mai 2017 à 16:55
Re,

Oui, plus necessaire puisque c'est la cellule qui vient d'etre saisie avec "A valider" qui permet d'envoyer le @Mail
0
Quand je veux exécuter ce code pour tester rien ne se passe... Pourquoi ?
0
Bonjour,

Merci pour votre réponse c'est exactement ce qu'il me fallait !
Autre question, j'ai ajouté une colonne date (Colonne D) pour que le mail s'envoi seulement si la date renseigné est celle du jour et non a chaque fois que je lance la macro. Comment faire pour dire si la date est celle d'aujourd'hui -> exécuter la macro ?

Merci.
0
Pyrisis
Messages postés
9
Date d'inscription
mercredi 10 mai 2017
Statut
Membre
Dernière intervention
15 mai 2017
1
15 mai 2017 à 16:03
essaye ça
If Range("D1") = Now() Then
mail_auto_fin_procédure
Else
MsgBox("Mail déjà envoyer)
End If
0
panthera2612
Messages postés
6
Date d'inscription
jeudi 12 avril 2018
Statut
Membre
Dernière intervention
13 avril 2018
> Pyrisis
Messages postés
9
Date d'inscription
mercredi 10 mai 2017
Statut
Membre
Dernière intervention
15 mai 2017

12 avril 2018 à 16:30
bonjour j aimerai adapter ce code a mon fichier mais rien de ne se passe pouvez vous m aider svp
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
panthera2612
Messages postés
6
Date d'inscription
jeudi 12 avril 2018
Statut
Membre
Dernière intervention
13 avril 2018

12 avril 2018 à 16:31
bonjour on vous a donner des conseils ici pouvez vous m aider cordialement
0
f894009
Messages postés
16487
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 mai 2022
1 633
13 avril 2018 à 08:01
Re,

Avec "mon" code normalement pas besoin de la reference Microsoft Outlook xx,0 Object Library mais une library qui permet beaucoup de "chose" sans avoir a cocher x libraray: Microsoft Office xx.0 Objec Library



Si vous vous envoyez les messages, vous devez mettre .Display en commentaire en mettant un ' devant et enlever le ' devant '.Send sinon les message ne partent pas
0
panthera2612
Messages postés
6
Date d'inscription
jeudi 12 avril 2018
Statut
Membre
Dernière intervention
13 avril 2018

13 avril 2018 à 13:06
cc voila la procedure mail marche, j ai regler le probleme et le code fonctionne.

maintenant me reste la variable qui declenche le mail la c un bouton j aimerai automatique

colonne A = alerte envoi le mail corps du texte mail C et D de la ligne ou le probleme se pose et boucle autant de fois necessaire
0
f894009
Messages postés
16487
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 mai 2022
1 633
Modifié le 13 avril 2018 à 13:28
Re,

Bonjour,
tache recurrente non faite par un humain
Tout a fait Thierry, mais il faut quand meme ouvrir le fichier!!!

Toujours valable

Il faut une colonne pour marquer le @Mail de la ligne a ete deja envoye
0
Bonjour,

Merci tout d'abord car votre VBA est très utile.
Cependant je me demandais si il était possible, au lieu d'envoyer X messages pour X lignes dans la boucle , d'envoyer 1 seul mail avec les X lignes de la boucle qui vérifient la condition ?

Merci beaucoup
0
f894009
Messages postés
16487
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 mai 2022
1 633
5 oct. 2018 à 13:06
Bonjour,

Vous pourriez replacer le contexte et surtout quel code je vous ai mis a dispo!!!!!!!
0