Envoie Mail sous condition

Bonsoir à tous

J'ai pu bidouiller un code pour envoyer un mail à une condition le voici une séquence du code :

Private Sub CommandButton1_Click()

Dim ObjOutlook As Object

Dim oBjMail As Object

Dim i As Byte

i = Sheets("ALERTE").Range("A456541")

For i = 9 To ThisWorkbook.Worksheets("ALERTE").Range("E" & Rows.Count).End(xlUp).Row

If ThisWorkbook.Worksheets("ALERTE").Range("H" & i).Value = "URGENT" Then

Set ObjOutlook = New outlook.Application

Set oBjMail = ObjOutlook.CreateItem(olMailItem)

With oBjMail

.To = ThisWorkbook.Worksheets("ALERTE").Range("E" & i).Value

.Subject = "ALERTE VEHICULES"

.Body = "Bonjour Monsieur/Madame," & vbCrLf & vbCrLf _

& "Le délai pour votre Controle Technique est dans moins d'un mois. Le prochain controle Technique est prévu pour:" & vbCrLf & vbCrLf _

& ThisWorkbook.Worksheets("ALERTE").Range("G" & i).Value & vbCrLf & vbCrLf _

& "Nous vous prions de rendre le Véhicule disponible pour cette période, merci de vous preparer en conséquence et de nous informer de l'état d'avancement" & vbCrLf & vbCrLf & vbCrLf _

& "Cordialement "

.Send

End With

ThisWorkbook.Worksheets("ALERTE").Range("I" & i).Value = "Message Envoyé"

End If

Next

MsgBox "Votre message a été bien envoyé."

je rencontre deux problèmes :

  • je voudrais pourvoir envoyé le mail une seul fois, c'est à dire lorsqu'on a message envoyé pour cette action que la mail ne soit plus envoyé
  • aussi je voudrais pouvoir envoyer le fichier sans cliquer sur le bouton c'est t'a dire dès que "URGENT" apparait le mail est envoyé

mais vu que je débute je sais pas comment faire

merci de me repondre

13fiche4-v1.xlsx (18.22 Ko)

Bonjour,

je voudrais pourvoir envoyé le mail une seul fois, c'est à dire lorsqu'on a message envoyé pour cette action que la mail ne soit plus envoyé

je dirais que tu dois simplement changer la valeur de la colonne H à la fin de ta macro en mettant un autre texte. Comme ce ne sera plus le message "URGENT", il n'enverra pas le mail puisque la condition ne sera plus remplie.

par exemple, tu peux modifier cette ligne

ThisWorkbook.Worksheets("ALERTE").Range("I" & i).Value = "Message Envoyé"

en prenant la colonne H plutôt que I.

aussi je voudrais pouvoir envoyer le fichier sans cliquer sur le bouton c'est t'a dire dès que "URGENT" apparait le mail est envoyé

Alors tu dois travailler avec le worksheet change

Private Sub Worksheet_Change(ByVal Target As Range)

End Sub

tu cales ton code la dedans plutôt que sur le CommandButton1_Click. Dès que le message URGENT apparaîtra dans la colonne la macro se lancera.

Je n'ai pas testé, je te laisse le soin de le faire parce que je ne travaille pas avec outlook chez moi ...

Bonne soirée,

Rékiss

Bonjour Pedro22

merci beaucoup j'ai pu résoudre mes deux problèmes

mais je viens d'avoir un autre, voici un bout du code

Private Sub CommandButton1_Click()

Dim ObjOutlook As Object

Dim oBjMail As Object

Dim i As Byte

i = Sheets("ALERTE").Range("A456541")

'Vidange

For i = 9 To ThisWorkbook.Worksheets("ALERTE").Range("E" & Rows.Count).End(xlUp).Row

If ThisWorkbook.Worksheets("ALERTE").Range("L" & i).Value = "URGENT" Then

Set ObjOutlook = New outlook.Application

Set oBjMail = ObjOutlook.CreateItem(olMailItem)

With oBjMail

.To = ThisWorkbook.Worksheets("ALERTE").Range("E" & i).Value

.Subject = "ALERTE VEHICULES"

.Body = "Bonjour Monsieur/Madame," & vbCrLf & vbCrLf _

& "Le délai pour votre Vidange est dans moins d'un mois. La prochaine Vidange est prévue pour:" & vbCrLf & vbCrLf _

& ThisWorkbook.Worksheets("ALERTE").Range("L" & i).Value & vbCrLf & vbCrLf _

& "Nous vous prions de rendre le Véhicule disponible pour cette période, merci de vous preparer en conséquence et de nous informer de l'état d'avancement" & vbCrLf & vbCrLf & vbCrLf _

& "Cordialement "

.Send

End With

ThisWorkbook.Worksheets("ALERTE").Range("L" & i).Value = "Message Envoyé"

End If

Next

MsgBox "Votre message a été bien envoyé."

End Sub

le Problème maintenant est que le mail n'est pas envoyé avec la bonne prochaine date

je pense que le problème vient d'ici

For i = 9 To ThisWorkbook.Worksheets("ALERTE").Range("E" & Rows.Count).End(xlUp).Row

je sais pas s'il faut poser la condition pour chaque ligne en clair je sais pas trop quoi faire

Merci Rékiss

desolée je me suis trompée de nom

Salut, c'est rien pour le pseudo

je dirais que ton erreur vient plutôt de la ligne que tu renvoie pour indiquer la date

& ThisWorkbook.Worksheets("ALERTE").Range("L" & i).Value & vbCrLf & vbCrLf _

Tu as garder la colonne L hors, si le fichier n'a pas changé, concernant la vidange, c'est la colonne K qui reprend la vidange suivante ...

la L indique si c'est "Urgent" ou "OK" me semble-t-il ...

Rékiss

BONSOIR merci pour la compréhension

le fichier a changé

le voici

6fiche-5.xlsx (21.23 Ko)
Rechercher des sujets similaires à "envoie mail condition"