Menu

VBA : envoi d'un mail auto en fonction du contenu d'une cellule [Fermé]

minia - 4 mai 2017 à 16:40 - Dernière réponse : f894009 13279 Messages postés dimanche 25 novembre 2007Date d'inscription 21 juillet 2018 Dernière intervention
- 13 avril 2018 à 13:18
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.
Afficher la suite 

31 réponses

Meilleure réponse
f894009 13279 Messages postés dimanche 25 novembre 2007Date d'inscription 21 juillet 2018 Dernière intervention - 4 mai 2017 à 17:23
1
Merci
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

Merci f894009 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

CCM a aidé 22593 internautes ce mois-ci

Meilleure réponse
1
Merci
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

Merci minia 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

CCM a aidé 22593 internautes ce mois-ci

f894009 13279 Messages postés dimanche 25 novembre 2007Date d'inscription 21 juillet 2018 Dernière intervention - 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
Meilleure réponse
1
Merci
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.

Merci minia 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

CCM a aidé 22593 internautes ce mois-ci

f894009 13279 Messages postés dimanche 25 novembre 2007Date d'inscription 21 juillet 2018 Dernière intervention - 12 avril 2018 à 17:55
Re,
+fichier se connecte seul à heure fixe
Qu'entendez vous par se connecte

cdo mais j ai pas la reference librairy microsoft
Quelle reference ??

Va pas etre facile de tester les envois, CDO ne marche pas chez moi
panthera2612 6 Messages postés jeudi 12 avril 2018Date d'inscription 13 avril 2018 Dernière intervention > f894009 13279 Messages postés dimanche 25 novembre 2007Date d'inscription 21 juillet 2018 Dernière intervention - 12 avril 2018 à 18:06
Re,
+fichier se connecte seul à heure fixe
Qu'entendez vous par se connecte

du 1 janvier au 31 decembre plus nombre de contrat je ne peut me rappeller des dates donc le fichier doit verifier chaque jour la date a echeance tache recurrente non faite par un humain

cdo mais j ai pas la reference librairy microsoft
Quelle reference ?? celle qu on me demande a chaque fois reference librairy microsoft

Va pas etre facile de tester les envois, CDO ne marche pas chez moi mais ceci peut marcher chez moi

trop de date a me rappeller dans les papiers donc mon entreprise me demande ce fichier pour un rappel
f894009 13279 Messages postés dimanche 25 novembre 2007Date d'inscription 21 juillet 2018 Dernière intervention - 13 avril 2018 à 07:18
Bonjour,
tache recurrente non faite par un humain
Tout a fait Thierry, mais il faut quand meme ouvrir le fichier!!!

Quelle reference ??
Faites une recopie d'ecran ou une image avec le lecteur Multimedia au moment ou vous avez l'erreur et mettez la a dispo

Vous avez un PC Windows ou un Mac?

donc mon entreprise me demande ce fichier pour un rappel
Oui, mais je ne pourrai que faire le code qui permettra de preparer les Messages et mettre un code pour CDO sans pouvoir tester l'envoi.
Question: si vous avez un Office pourquoi n'avez vous pas Outlook?????????????????????????????????
Bonjour J ai outlook mais pas la reference librairy.
Car votre code ici j envoi rien recoit rien pas de messages d erreur
0
Merci
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.
Pyrisis 9 Messages postés mercredi 10 mai 2017Date d'inscription 15 mai 2017 Dernière intervention - 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
panthera2612 6 Messages postés jeudi 12 avril 2018Date d'inscription 13 avril 2018 Dernière intervention > Pyrisis 9 Messages postés mercredi 10 mai 2017Date d'inscription 15 mai 2017 Dernière intervention - 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
panthera2612 6 Messages postés jeudi 12 avril 2018Date d'inscription 13 avril 2018 Dernière intervention - 12 avril 2018 à 16:31
0
Merci
bonjour on vous a donner des conseils ici pouvez vous m aider cordialement
Commenter la réponse de panthera2612
f894009 13279 Messages postés dimanche 25 novembre 2007Date d'inscription 21 juillet 2018 Dernière intervention - 13 avril 2018 à 08:01
0
Merci
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
panthera2612 6 Messages postés jeudi 12 avril 2018Date d'inscription 13 avril 2018 Dernière intervention - 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
f894009 13279 Messages postés dimanche 25 novembre 2007Date d'inscription 21 juillet 2018 Dernière intervention - 13 avril 2018 à 13:18
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
Commenter la réponse de f894009