Envoi mail CDO

Bonjour,

j'utilise ce code pour envoyer des mails :

Public Sub EnvoieMailGoogle()
Dim mMessage As Object
Dim mConfig As Object
Dim mSch
    Set mConfig = CreateObject("CDO.Configuration")
    'mConfig.Load -1
    Set mSch = mConfig.Fields
    With mSch
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
        'Adapter suivant votre serveur de mail. (exemple pour Gmail.)=> Hormail "smtp.live.com"
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
        'En principe, 25 fonctionne avec tout les serveurs.
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
        'Si le serveur demande une authentification,
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = "1"
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "*******@gmail.com"
        .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "*****"
        'Si votre serveur demande une connexion sûre (SSL)
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = "true"
        .Update
    End With
    Set mMessage = CreateObject("CDO.Message")
    With mMessage
    Set .Configuration = mConfig
        .To = "****@gmail.com"
        .From = "****@gmail.com"
        .subject = "Le sujet du mail"
        .TextBody = "Ce mail vous est envoyer pour tester la macros." 'vbCrLf = retour a la ligne
        'Pour ajouter une pièce jointe, un fichier, classeur, image etc.
        '.AddAttachment 'Chemin et nom complet du fichier à joindre
        'Envoie du mail
        .Send
    End With
    'Libère les ressources
    Set mMessage = Nothing
    Set mConfig = Nothing
    Set mSch = Nothing
    'Message de confirmation d'envoie
    MsgBox "Le mail a été envoyer"
End Sub

mon problème concerne le :

.TextBody = "Ce mail vous est envoyer pour tester la macros."

j'aimerais envoyé une plage de ma feuille du coup j'ai mis :

.TextBody = MaFeuille.Range("A1:O30").Select

je recois bien le mail avec comme corps de text : TRUE

comment faire pour envoyer la plage de A1:O30

merci pour votre aide

Bonjour,

cela fait beaucoup de données dans le texte d'un mail, est-ce que ce sera encore lisible ?

tu peux l'envoyer en pièce jointe en enregistrant la plage en pdf ...

sinon je te propose une table en html ... le temps de l'écrire !

bha en fait j'utilise ce code mais je passe par outlook

Sub envoimail()
    'declaration variable
    Dim MaFeuille As Worksheet
    Dim NbLigne As Integer

    'affectation des variables
    Set MaFeuille = ThisWorkbook.Sheets("Dashboard")

    'Deactivation du rafraichissemnet
    Application.ScreenUpdating = False

    'On calcul le nombre de ligne a prendre
    NbLigne = MaFeuille.Range("A" & Application.Rows.Count).End(xlUp).Row

    'On selectionne la plage a copier
    MaFeuille.Range("A1:O" & NbLigne).Select

    'Avec l'objet Mailenvelope on envoi dans le corps du mail
    With Selection.Parent.MailEnvelope.Item
        .To = MaFeuille.Range("R1").Value
        '.cc = ""
        '.bcc = ""
        .Subject = MaFeuille.Range("R2").Value
        '.Attachments.add "cheminfichier"
        .Send 'on envoi
        '.display 'on affiche
    End With

    MsgBox "votremail a été envoyé.", vbInformation + vbOKOnly, "CONFIRMATION ENVOYE"

    Application.ScreenUpdating = True

End Sub

mais du coup je voulais passer en CDO

mets

.htmlbody = matable

avec cette fonction

Function matable()

matable = "<table>"
For i = 1 To 30
    matable = matable & "<tr>"
    For j = 1 To 15 ' colonne A à O
        matable = matable & "<td>" & Sheets("Dashboard").Cells(i, j) & "</td>"
    Next
    matable = matable & "</tr>" 
Next
matable = matable & "</table>"

End Function

et du coup je reçois bien le message en HTML, et quelque soit l'information que j'y met, lien, image, etc..., donc si tu as une solution je suis preneur merci

Si tu utilises outlook, l'emploi de CDO n'est pas utile, qu'est-ce que cela peut apporter ?

Le désavantage avec CDO c'est qu'il faut le configurer avec les paramètres de votre serveur, certains hébergeurs comme Gmail nécessitent une authentification (votre mot de passe) et une connexion sécurisée (SSL)

en fait justement la ou je l'utilise je ne peux pas avoir outlook...

et du coup je reçois bien le message en HTML, et quelque soit l'information que j'y met, lien, image, etc..., donc si tu as une solution je suis preneur merci

dans ce que je t'ai mis, tu n'as qu'une information texte

si tu veux mieux (images etc ... ) tu peux faire un copier coller et utiliser sendkeys comme dans l'exemple ci-après

en fait justement la ou je l'utilise je ne peux pas avoir outlook...

donc sendkeys ne va pas fonctionner sans outlook !

si tu veux envoyer images, liens etc. je ne vois que la solution pdf attaché !

du coup avec ton code, j'ai bien tout ce qui est en texte mais je n'ai plus les images

ok merci du coup je vais essayer de passer par outlook, merci pour ton aide

en effet

pour les images, il y a la solution pdf, sinon je pense qu'il faut d'abord charger l'image sur un serveur distant ! cela devient compliqué ...

oui c'est clair, après ce qui m’embête c'est que j'avais deux soucis pas outlook sur le poste (je pense pouvoir le mettre en expliquant) et l'autre c'est que si j'envois un mail une premiere fois c'est bon mais la deuxieme fois j'ai une erreur : la methode mailenvelope a echoué faudrait que je la reinit mais je ne vois pas comment ...

Sub envoimail()
    'declaration variable
    Dim MaFeuille As Worksheet
    Dim NbLigne As Integer

    'affectation des variables
    Set MaFeuille = ThisWorkbook.Sheets("Dashboard")

    'Deactivation du rafraichissemnet
    Application.ScreenUpdating = False

    'On calcul le nombre de ligne a prendre
    NbLigne = MaFeuille.Range("A" & Application.Rows.Count).End(xlUp).Row

    'On selectionne la plage a copier
    MaFeuille.Range("A1:O" & NbLigne).Select

    'Avec l'objet Mailenvelope on envoi dans le corps du mail
    With Selection.Parent.MailEnvelope.Item
        .To = MaFeuille.Range("R1").Value
        '.cc = ""
        '.bcc = ""
        .Subject = MaFeuille.Range("R2").Value
        '.Attachments.add "cheminfichier"
        .Send 'on envoi
        '.display 'on affiche
    End With

    Set MailEnvelope = Nothing

    MsgBox "votremail a été envoyé.", vbInformation + vbOKOnly, "CONFIRMATION ENVOYE"

    Application.ScreenUpdating = True    

End Sub

je fais un

Set MailEnvelope = Nothing 

mais pareil j'ai l'erreur si tu aurais une solution ? merci

oui c'est clair, après ce qui m’embête c'est que j'avais deux soucis pas outlook sur le poste (je pense pouvoir le mettre en expliquant) et l'autre c'est que si j'envois un mail une premiere fois c'est bon mais la deuxieme fois j'ai une erreur

Plusieurs pistes :
  • avec display tu ne pourras pas en envoyer plusieurs à la file
  • ajoute aussi ( à essayer )
ActiveWorkbook.EnvelopeVisible = True
ActiveWorkbook.EnvelopeVisible = False

- en désespoir de cause, ajoute une tempo entre tes send

Application.Wait Now + TimeValue ( "0:00:01" )

ecoute avec

ActiveWorkbook.EnvelopeVisible = True
ActiveWorkbook.EnvelopeVisible = False

ca fonctionne parfaitement merci du coup de main

Ouf !

Rechercher des sujets similaires à "envoi mail cdo"