Envoi mail si condition respectée
Bonjour,
J'ai crée une macro vba qui me permet d'envoyer un mail si la condition est respectée.
Cependant, c'est toujours la même de mon tableau excel qui met envoyé.
Après plusieurs test, je n'arrive pas à trouver ou ca bloque.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
For Each c In Feuil1.Columns("D").SpecialCells(xlCellTypeConstants)
If Target.Value = "ALERTE STOCK MINI" Then Call EnvoiMail
Next c
End Sub
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>" & _
"Le produit " & Worksheets("Feuil1").Range("A2").Value & vbCrLf & vbCrLf & " doit être commandé.<br><br>" & _
"Fournisseur : " & Worksheets("Feuil1").Range("E2").Value & vbCrLf & vbCrLf & "<br><br>" & _
"Référence fournisseur : " & Worksheets("Feuil1").Range("F2").Value & vbCrLf & vbCrLf & "<br><br>" & _
"Quantité : " & Worksheets("Feuil1").Range("C2").Value & vbCrLf & vbCrLf & "<br><br>" & _
"Prix unitaire : " & Worksheets("Feuil1").Range("G2").Value & vbCrLf & vbCrLf & "€ <br><br>" & _
"<br><br>Cordialement," & _
"<br><br>Gestion des stocks</font>"
With OutMail
.To = "...@......"
.CC = ""
.BCC = ""
.Subject = "ALERTE STOCK MINI !!"
.HTMLBody = strbody
.Send
End With
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
Cordialement
Bonjour,
Je suppose que ton mail envoie toujours les valeurs de ta ligne 2 ?
En tout cas, c'est ce que j'en comprends dans le corps de ton message.
Je pense qu'il faut que tu intègres une boucle pour qu'il vérifie chaque ligne, et dès que ta condition est vraie, il rapatrie les valeurs de la ligne.
Bonjour,
Je suis d'accord avec toi, j'ai essayé de modifier .Range("A2").Value par .Range("A:A").Value mais ca ne marche pas.
La boucle doit être intégré dans mon code de la macro ou dans mon code feuil1?
Cordialement
Personnellement je n'aurai fait qu'un seul code avec une boucle For Next.
Ex :
Déclarations diverses
For i = 1 To DernLigne
If cells(i,4).value = "ALERTE STOCK MINI" Then
Code Mail avec : Le produit " & Worksheets("Feuil1").Cells(i,1).Value ....
End If
Next
Je vois plus un truc dans ce style.
Comme ça il boucle sur tout le tableau, et dès qu'il trouve le mot clé, il récupère les informations de la ligne.
Merci,
Effectivement en codant que dans une seule feuille (pour ma part dans le ThisWorkbook pour que la macro s'active automatiquement dès l'ouverture du fichier ) cela marche comme je le souhaité.
En faisant cela, j'ai remarqué que dès que j'ouvre mon fichier (x fois), le même mail est envoyé, est-il possible que la macro enregistre les mails déjà envoyés pour éviter de le recevoir plusieurs fois ?
Je ne sais pas faire à ce niveau...
Mais tu peux peut-être bricoler un truc dans ce style :
Ajout d'une colonne "Envoyé le"
Dans ton code après l'envoi du mail tu lui dis d'indiquer la date du jour dans ta nouvelle colonne. -> cells(i,8).Value = Now()
Au début de ton code, tu rajoutes une condition : If cells(i,4).value = "ALERTE STOCK MINI" And cells(i,8).Value = "" Then
Comme ça il n'exécute ton code que lorsque sur la même ligne tu as "ALERTE..." et un vide dans la colonne "Envoyé le"