Envoie d'un mail si "validé" dans colonne C
Bonjour à tous,
Je vous expose mon souci. Je débute en VBA
Je vous explique en colonne A j'ai un numéro d'affaire, en colonne B le nom de l'affaire et en colonne C l'état (En cours, Stand by, Abandon, Perdu et Signé sous forme de validation de donnée par liste)
Pour info 1 ligne correspond à 1 affaire ^^
Je voudrais que lorsque l'état passe en "Signé" un mail soit envoyé automatiquement à mon directeur et moi même avec dans le mail, le numéro et le nom de l'affaire.
J'y suis presque!!!!! mais je sais pas comment adapter mon code, voici mon code:
Dans la feuille j'ai ça:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 And Target.Offset(, 1).Value <= Date Then Call EnvoiMail
End Sub
et dans un module j'ai ça:
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 commercial<B> " & Cells(ActiveCell.Row, 3).Value & " </B> boby vient de signé le marché XXX nommé XXX" & _
"<br><br>Cliquez sur ce lien pour ouvrir le fichier : " & _
"<A HREF=""file://\\:\AFFAIRES\10 PLANNING\" & Cells(ActiveCell.Row, 3).Value & "Fichier de gestion.xlsm" _
& """>ici</A>" & "<br><br>Cordialement," & _
"<br><br>L'Équipe de OUF</font>"
With OutMail
.To = "moi@moi.fr"
.CC = ""
.BCC = ""
.Subject = "Affaire signé"
.HTMLBody = strbody
.Send
End With
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
Seulement voila avec ce code il m'envoie un mail dés que je change l'état... alors que je veux seulement pour l'état "Signé"
Et j'aimerais aussi remplacer les XXX par le numéro de marché et les XXX par le nom du marché.
Pouvez vous me donner un coup de main svp car je galère à modifier le code à ma guise.
Merci d'avance et passez un bon week-end
Bonjour Arafac,
Voici le code dans le module associé a la feuille:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ThisRow As Long
If Target.Column = 3 Then
ThisRow = Target.Row
If Target.Value = "Signé" Then
Call EnvoiMail
End If
End If
End Sub
et le code dans le module standard (à réviser ou à adapter la partie Cells(ActiveCell.Row, 3).Value - ça retourne toujours Signé donc il n'est pas nécessaire d'utiliser une variable ou une référence à la valeur). Pour l'envoi automatique sans afficher le message (une fois la phase de test terminée) on peut commenter la ligne de code '.Display et décommenter .Send:
Sub EnvoiMail()
Dim OutApp As Object
Dim OutMail As Object
Dim strbody As String
Dim NumeroAff As String, NomAff As String
NumeroAff = Cells(ActiveCell.Row, 1).Value
NomAff = Cells(ActiveCell.Row, 2).Value
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
strbody = "<font size=""3"" face=""Calibri"">" & _
"Bonjour,<br><br>" & _
"Le commercial<B> " & Cells(ActiveCell.Row, 3).Value & " </B> boby vient de signer le marché " & NumeroAff & " nommé " & NomAff & _
"<br><br>Cliquez sur ce lien pour ouvrir le fichier : " & _
"<A HREF=""file://\\:\AFFAIRES\10 PLANNING\" & Cells(ActiveCell.Row, 3).Value & "Fichier de gestion.xlsm" _
& """>ici</A>" & "<br><br>Cordialement," & _
"<br><br>L 'Équipe de OUF</font>"
With OutMail
.To = "moi@moi.fr"
.CC = ""
.BCC = ""
.Subject = "Affaire signé"
.HTMLBody = strbody
'.Send
.display
End With
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
Bonjour Sequoyah,
Merci beaucoup pour ton aide. J'ai adapté ton code comme cela (en espérant ne pas avoir fait de boulette lol) pour le moment ça fonctionne bien vu les premiers essaies effectués.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ThisRow As Long
If Target.Column = 3 Then
ThisRow = Target.Row
If Target.Value = "Signé" Then
Call EnvoiMail
End If
End If
End Sub
Sub EnvoiMail()
Dim OutApp As Object
Dim OutMail As Object
Dim strbody As String
Dim NumeroAff As String, NomAff As String, MontAff As String, PourcentAff As String, MbAff As String
NumeroAff = Cells(ActiveCell.Row, 1).Value
NomAff = Cells(ActiveCell.Row, 2).Value
MontAff = Cells(ActiveCell.Row, 24).Value
PourcentAff = Cells(ActiveCell.Row, 26).Value
MbAff = Cells(ActiveCell.Row, 27).Value
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
strbody = "<font size=""3"" face=""Calibri"">" & _
"Bonjour,<br><br>" & _
"Le commercial<B></B> boby vient de signer le marché " & NumeroAff & " nommé " & NomAff & " pour un montant de " & MontAff & "€ avec un coef de " & PourcentAff & " c'est à dire " & MbAff & "€ de marge brute. " & _
"<br><br>Cliquez sur ce lien pour ouvrir le fichier : " & _
"<A HREF=""file://\\:\AFFAIRES\10 PLANNING\" & Cells(ActiveCell.Row, 3).Value & "Fichier de gestion.xlsm" _
& """>ici</A>" & "<br><br>Cordialement," & _
"<br><br>L 'Équipe </font>"
With OutMail
.To = "moi@moi.fr"
.CC = ""
.BCC = ""
.Subject = "Affaire signé"
.HTMLBody = strbody
.Send
End With
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
J'ai rajouter le montant du marché, le coéf et la marge brute généré. Bon par contre pour un marché de 2 millions ça m'écris 2000000 au lieu de 2 000 000 mais bon c'est du détail ça, le principal c'est qu'il y ai le même nombre de "0" mdrrr
Merci beaucoup en tout cas pour ton aide
Salut Arafac,
merci pour ton retour.
change la ligne:
MontAff = Cells(ActiveCell.Row, 24).Value
avec
MontAff = Format(Cells(ActiveCell.Row, 24).Value, "Standard")
Salut Sequoyah,
Super ta petite modification, c'été juste un détail d'affichage du mail mais ça fait toute la différence mdrrr
Merci pour ton aide en tout cas, tu gères et ça fonctionne du tonnerre. Je pense que sa pourra en aider d'autres aussi en plus, car c'est bien pratique cette petite alerte par mail automatique.