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
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