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

47classeur2.xlsm (21.84 Ko)

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"

Rechercher des sujets similaires à "envoi mail condition respectee"