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.

Rechercher des sujets similaires à "envoie mail valide colonne"