Envoi tableau Excel dans e-mail avec condition

Bonjour,

Je me permet de faire encore appel à vous car je cherche depuis plusieurs jours et n'arrive pas à résoudre mon problème :

Je cherche à envoyer uniquement les colonnes C à G et les lignes qui contiennent "en attente d'envoi" dans ma colonne "Email". Puis une fois que mon mail est envoyé les cases "en attente d'envoi" se remplisse en "mail envoyé"

exemple :

Marque    Catégorie            Statut         E-mail

Dell    Portables      En stock       Mail envoyé
Lenovo    Ordinateurs    En stock        En attente d'envoi
Lenovo    Ordinateurs    En stock        En attente d'envoi

J'ai déjà fais un bout de code mais cela ne "fusionne" pas mes lignes et envoi un email pour une ligne ...

Public Sub EnvoiMail()
Dim OutlookApp As Object
Dim OutlookMail As Object
Dim adresse As String
Dim message As String
Dim sujet As String
Dim strHTML As String

sujet = "Test" 'Définition du sujet de l'email
For i = 2 To Range("a" & Rows.Count).End(xlUp).Row 'Définition de la plage de test (de la 2ème ligne jusqu'à première cellule vide de la colonne a

strHTML = ""
strHTML = strHTML & "<HEAD>"
strHTML = strHTML & "<BODY>"
strHTML = strHTML & "Bonjour , <BR>vous trouverez ci joint le tableau demandé<BR><BR>"
strHTML = strHTML & "<B><SPAN STYLE='background-color:green;font-size:6mm'>Résultats : </SPAN></B><BR><BR>"
strHTML = strHTML & "<TABLE BORDER>"

    strHTML = strHTML & "<TR halign='middle'nowrap>"
    For j = 3 To 7 'nombre de colonnes

        strHTML = strHTML & "<TD bgcolor='yellow'align='center'><FONT COLOR='blue'SIZE=3>" _
        & Cells(i, j) & "</FONT></TD>"

    Next j

    strHTML = strHTML & "</TR>"

strHTML = strHTML & "</TABLE>"

strHTML = strHTML & "<BR><BR>Cordialement<BR>" & Environ("username")
strHTML = strHTML & "</BODY>"
strHTML = strHTML & ""

If Range("I" & i) = "En attente d'envoi de mail" Then

'Paramètres de l'application mail
Set OutlookApp = CreateObject("outlook.application")
Set OutlookMail = OutlookApp.createitem(0)
With OutlookMail
.Subject = sujet
.To = "test@test.com"

.HTMLBody = strHTML
.send 'envoi du mail

End With

Range("I" & i).Value = "Mail envoyé"
End If
Next i

End Sub

D'avance merci pour votre aide et bonne fêtes à tous !

Bonsoir,

Essayer cette modification

Public Sub EnvoiMail()

Dim OutlookApp As Object
Dim OutlookMail As Object
Dim adresse As String
Dim message As String
Dim sujet As String
Dim strHTML As String
Dim envoi_mail As Range

sujet = "Test" 'Définition du sujet de l'email

strHTML = ""
strHTML = strHTML & "<HEAD>"
strHTML = strHTML & "<BODY>"
strHTML = strHTML & "Bonjour , <BR>vous trouverez ci joint le tableau demandé<BR><BR>"
strHTML = strHTML & "<B><SPAN STYLE='background-color:green;font-size:6mm'>Résultats : </SPAN></B><BR><BR>"
strHTML = strHTML & "<TABLE BORDER>"

For i = 2 To Range("A" & Rows.Count).End(xlUp).Row 'Définition de la plage de test (de la 2ème ligne jusqu'à première cellule vide de la colonne a
    If Cells(i, "I") = "En attente d'envoi de mail" Then
        strHTML = strHTML & "<TR halign='middle'nowrap>"
        For j = 3 To 7 'nombre de colonnes
            strHTML = strHTML & "<TD bgcolor='yellow'align='center'><FONT COLOR='blue'SIZE=3>" & Cells(i, j) & "</FONT></TD>"
        Next j
        strHTML = strHTML & "</TR>"
        If envoi_mail Is Nothing Then Set envoi_mail = Cells(i, "I") _
        Else Set envoi_mail = Union(envoi_mail, Cells(i, "I"))
    End If
Next i

strHTML = strHTML & "</TABLE>"
strHTML = strHTML & "<BR><BR>Cordialement<BR>" & Environ("username")
strHTML = strHTML & "</BODY>"
strHTML = strHTML & ""

'Paramètres de l'application mail
Set OutlookApp = CreateObject("outlook.application")
Set OutlookMail = OutlookApp.createitem(0)
With OutlookMail
.Subject = sujet
.To = "test@test.com"
.HTMLBody = strHTML
.send 'envoi du mail
End With

'mise à jour indicateur des lignes envoyées
envoi_mail.Value = "Mail envoyé"

End Sub

Bonjour,

Un grand merci pour votre aide ça marche nickel !!!!

Par contre je ne connaissais pas du tout cette "formule" :

If envoi_mail Is Nothing Then Set envoi_mail = Cells(i, "I") _
        Else Set envoi_mail = Union(envoi_mail, Cells(i, "I"))

Auriez vous quelques explications ?

Encore merci !

L'instruction "Set" définit un objet qui dans ce cas, est une plage de cellules (Range).

La méthode "Union" permet de définir un ensemble de plages de cellules continues ou discontinues.

Dans le cas présent, elle définit dans la colonne I , la plage de cellules correspondant aux lignes envoyées.

Rechercher des sujets similaires à "envoi tableau mail condition"