Formule conditionnelle dans envoi de mail

Bonjour,

Je re-poste un sujet que j'avais cloturé car je ne m'en sors pas avec la proposition de code que j'avais reçu.

Je pense que mon exemple n'étant pas assez clair, voici donc un nouvel exemple.

l'idée générale est de pouvoir envoyer des mails à des clients à partir d'une base de données selon certaines conditions.

Chaque client ne doit recevoir qu'un mail, même si j'ai plusieurs entrées pour lui dans ma base de données.

C'est là où ma connaissance en VBA a atteint ses limites...

Le fichier joint sera plus clair pour vous qu'un long texte.

j'y ai mis un embryon de code, notamment la partie de l'envoi du mail que je souhaiterais conserver.

Merci d'avance pour votre aide !

8exemple.xlsm (21.66 Ko)

Bonjour,

en faisant un TCD tu auras directement une liste triée excluant les valeurs nulles

tu pourras alors plus facilement écrire ta boucle d'envoi à chacun

A tester (je n'ai plus outlook)

Private Sub CommandButton1_Click()
Dim x As Integer, qui As String, texte As String
qui = ""
texte = ""
Application.ScreenUpdating = False

With Sheets("TCD")
For x = 5 To .Cells(Rows.Count, 2).End(xlUp).Row
    If .Cells(x, 1) = "" Then
        texte = texte & .Cells(x, 2) & "<br>"
    Else
        If qui <> "" Then envoimail qui, texte
        qui = .Cells(x, 3)
        texte = .Cells(x, 2) & "<br>"
    End If
Next x
envoimail qui, texte ' le dernier
End With

Application.ScreenUpdating = True

End Sub
Sub envoimail(qui, texte)
Dim ObjOutlook As New Outlook.Application
Dim oBjMail
                     Set ObjOutlook = New Outlook.Application
                     Set oBjMail = ObjOutlook.CreateItem(olMailItem)
                       With oBjMail
                         .To = qui
                         .Subject = "Votre compte client !"
                         .htmlBody = "Bonjour,<br>" & texte & .htmlBody
                         .Display
                         .Send
                       End With
                     Set oBjMail = Nothing
                     Set ObjOutlook = Nothing
                     Application.DisplayAlerts = True
End Sub
2exemple.xlsm (28.46 Ko)

je vais te préparer une version sans TCD (avec dico)

autre version plus élégante

Private Sub CommandButton1_Click()
Dim x As Integer, texte As String, qui As String, client As Variant
Dim dico As Object
Set dico = CreateObject("Scripting.Dictionary")

    For i = 2 To [A2].End(xlDown).Row
        dico(Cells(i, "A").Value) = Cells(i, "F").Value
    Next

    For Each client In dico.Keys
        texte = ""
        For i = 2 To [A2].End(xlDown).Row
            If Cells(i, "C") <> 0 And Cells(i, "A") = client Then
                texte = texte & Cells(i, "E") & "<br>"
            End If
        Next
        If texte <> "" Then envoimail dico(client), texte
    Next

End Sub
Sub envoimail(qui, texte)
Dim ObjOutlook As New Outlook.Application
Dim oBjMail
                     Set ObjOutlook = New Outlook.Application
                     Set oBjMail = ObjOutlook.CreateItem(olMailItem)
                       With oBjMail
                         .To = qui
                         .Subject = "Votre compte client !"
                         .htmlBody = "Bonjour,<br>" & texte & .htmlBody
                         .Display
                         .Send
                       End With
                     Set oBjMail = Nothing
                     Set ObjOutlook = Nothing
                     Application.DisplayAlerts = True
End Sub
4exemple.xlsm (23.41 Ko)

Un très grand merci!

Je teste tout ça dès que j’ai Outlook

Steelson a écrit :

A tester (je n'ai plus outlook)

alcibiade a écrit :

Je teste tout ça dès que j’ai Outlook

quelle complicité entre eux deux ! Steelson n'a plus Outlook, et le demandeur ne l'a pas !

bon, c'qui m'rassure, c'est qu'moi j'ai toujours mon VBA, même si jmd ne s'en sert pas !

dhany

C’est vrai que c’est marrant à lire comme ça

Je n’ai Outlook qu’au boulot donc obligé d’attendre pour tester une solution

@Steelson,

J'ai testé et ca marche nickel

et ça me fait un exemple concret d'une méthode "dico" que je voulais creuser.

TOP !!!

Merci !!

Merci pour ce retour

Juste une question Steelson :

je ne comprends pas comment la procédure Sub envoimail(qui, texte) sait comment envoyer à "qui" le mail

je ne vois nulle part un lien entre "qui" et l'entrée dans le dico :

dico(Cells(i, "A").Value) = Cells(i, "F").Value

je m'attendrais à un truc du genre : qui = cells(i, "F").value

tu vois ce que je veux dire ?

Merci

AS-tu essayé ? Les informations paraissent-elles sur le mail ?

dico(Cells(i, "A").Value) = Cells(i, "F").Value
...
For Each client In dico.Keys
...
envoimail dico(client), texte
...
Sub envoimail(qui, texte)

avec cela ça devrait fonctionner ! merci de confirmer

Cela fonctionne très bien !

c'est juste que je cherche à comprendre comment cela fonctionne

Dans dico, la clé est le nom du client et le contenu son email

dico(Cells(i, "A").Value) = Cells(i, "F").Value

Ensuite, pour chaque clé-client

For Each client In dico.Keys

j'envoie un mail avec comme premier paramètre l'email

envoimail dico(client), texte

et le sous-programme en tient compte comme premier paramètre

Sub envoimail(qui, texte)

Pour des questions de compréhensions, j'aurais du mettre une terme comme email plutôt que qui

C'est très très bien de chercher à comprendre, c'est comme cela que l'on devient autonome !

super, merci beaucoup à toi !

Rechercher des sujets similaires à "formule conditionnelle envoi mail"