Code VBA pour envoyer un mail sous condition
Bonsoir,
Le but est de déclencher un mail en display lorsque la condition est remplit sur ma colonne. (Ex: C1=“x” -> le mail se déclenche).
(J’utilise Outlook)
Par contre le mail ne doit pas se créer chaque fois que l’on ouvre le fichier, j’ai donc fait comme ceci :
- Colonne C = Condition remplit
- Colonne D = bascule de la condition remplit de la colonne C pour indiquer l’envoie du mail
Ce qui je crois représente 5 boucles à créer (elles représentent chaque étapes). Sans oublier d’introduire la bascule sur la colonne à côté.
La liste de diffusion pour les 5 boucles se trouve sur une feuille a part mais dans le même classeur.
Dans l’objet du mail doit apparaître le contenu de 2 cellules de la ligne qui remplit la condition :
Ex: A1=“VBA” B1=“2018-07” C1=“x” D1=“” alors envoie du mail avec objet : VBA 2018-07
Après l’envoie du mail —> A1=“VBA” B1=“2018-07” C1=“” D1=“x”
Voilà je n’y connais absolument rien en écriture de macro, mais j’en ai besoin pour améliorer mon système de gestion.
Merci par avance.
Bonsoir,
une proposition
Sub aargh()
With Sheets("feuil1") ' à adapter
dl = .Cells(Rows.Count, "C").End(xlUp).Row
Set ol = CreateObject("Outlook.Application")
For i = 1 To dl
If .Cells(i, "C") = "x" Then
Set olm = ol.CreateItem(0)
With olm
.To = "Mail"
.Subject = .Cells(i, "A") & " " & .Cells(i, 2)
.body = "rien à dire"
.Display
End With
.Cells(i, "C") = ""
.Cells(i, "D") = "x"
End If
Next i
End With
End SubBonjour,
Merci pour la proposition !
J’ai fais des tests. Et voilà ce qu’il en ressort :
- Je n’arrive pas à récupérer la liste de diffusion (les adresses mails de la feuilles 2)
- J’ai tenté de modifier : .Subject = .Cells(i, “A”) & ...... ça ne marche pas. L’objet du mail ne récupère pas les données de la colonne À et B de la ligne correspondante
- la macro ne se déclenche pas automatiquement, il faut la faire s’executer
La limite de cette proposition :
Quand la macro s’éxecute Les mails en display s’ouvrent. Cependant, si je n’envoie pas le mail la bascule se fait quand même de la colonne C à D comme ci le mail avait été envoyé.
- Je n’arrive pas à récupérer la liste de diffusion (les adresses mails de la feuilles 2)
- J’ai tenté de modifier : .Subject = .Cells(i, “A”) & ...... ça ne marche pas. L’objet du mail ne récupère pas les données de la colonne À et B de la ligne correspondante
- la macro ne se déclenche pas automatiquement, il faut la faire s’executer
La limite de cette proposition :
Quand la macro s’éxecute Les mails en display s’ouvrent. Cependant, si je n’envoie pas le mail la bascule se fait quand même de la colonne C à D comme ci le mail avait été envoyé.
pour accéder aux données de la feuille2 mettre (exemple pour accéder à la cellule A1 sur feuille2)
sheets("feuillle2").range("A1") ou sheets("feuille2").cells(1,"A")
pour un déclenchement automatique, il faut modifier la procédure existante en procédure événementielle.
pour une mise à jour du statut quand le mail est effectivement envoyé, il faut mettre l'envoi effectif du mail sous le contrôle de la macro.
Bonjour,
C'est bon la macro fonctionne correctement voici le codage final :
Code :
Sub aargh()
With Sheets("Feuille") ' à adapter
dl = .Cells(Rows.Count, "AH").End(xlUp).Row
Set ol = CreateObject("Outlook.Application")
For i = 1 To dl
If .Cells(i, "AH") = "x" Then
Set olm = ol.CreateItem(0)
With olm
.To = "mail; mail; mail; ..."
.CC = "mail; mail; ..."
.Subject = Sheets("Feuille").Cells(i, "AG")
.body = "Corps du mail à adapter"
.Display
.Save
End With
.Cells(i, "AH") = ""
.Cells(i, "AI") = "x"
End If
Next i
End With
End Sub
Pour info :
Dans le l’objet du mail je voulais récupérer deux cellules de la ligne concernée.
Pour cela j’ai utilisé la formule CONCATENER