Erreur envoi de mail avec Outlook 15.0

Bonjour tout le monde,

J'ai un fichier Excel qui envoie un mail automatiquement à la suite de plusieurs autres opérations

Il fonctionnait jusqu'à maintenant, ce n'est plus cas et je soupçonne Outlook d'être responsable. J'ai eu quelques problèmes avec récemment et l'ai réinstallé mais rien ne change

Je précise que mon code n'a pas changé

Je précise aussi que ce fichier a fonctionné avec Outlook 15.0, puis 14.0 (au travail) et que rapatrié chez moi (télétravail oblige) j'ai veillé à ce qu'il tourne avec Outlook 15.0 (en fait, il a automatiquement basculé avec la bonne référence)

J'ai cherché la cause mais je suis perdu là

Le code :

PreparerOutlook oOutlook
Set oMailItem = oOutlook.CreateItem(0)

With oMailItem
.To = "blablabla@hotmail.fr"
.Subject = "blablabla"
.HTMLBody = "<html><p>" & "Bonjour,<br><br>Merci de m'aider :<br><br>" & contenu & "<html><p>" & "Merci encore.<br><br>Cordialement,<br>"

.Send
End With

If (Not (oMailItem Is Nothing)) Then Set oMailItem = Nothing
If (Not (oOutlook Is Nothing)) Then Set oOutlook = Nothing

Exit Sub

EnvoyerEmailErreur:
If (Not (oMailItem Is Nothing)) Then Set oMailItem = Nothing
If (Not (oOutlook Is Nothing)) Then Set oOutlook = Nothing

MsgBox "Le mail n'a pas pu être envoyé...", vbCritical, "Erreur"

End Sub

En l’occurrence ça dit ce qu'on voit en fin de code : "Le mail n'a pas pu être envoyé..."

Si quelqu'un peut me venir en aide en me suggérant où chercher par exemple ce serait super, je suis à court d'idée

Merci !

Bonjour Sk8Strong

Il manque le début de ta procédure

A priori tu as coché une référence Outlook dans ton éditeur VBA ?

A+

Bonjour BrunoM45,

Le début de mon code c'est celui-ci :

On Error GoTo EnvoyerEmailErreur

Dim oOutlook As Outlook.Application
Dim WasOutlookOpen As Boolean
Dim oMailItem As Outlook.MailItem
Dim Body As Variant
Dim MyBench As String

MyBench = Sheets("bla").Range("H10").Value
MyBench2 = Sheets("bla").Range("F10").Value
MyBench3 = Sheets("bla").Range("H12").Value
MyBench41 = Sheets("blabla").Range("D2").Value
MyBench42 = Sheets("blabla").Range("D3").Value
MyBench43 = Sheets("blabla").Range("D4").Value

contenu = _
    "<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'>" & _
    "<style>.tdblack {font-family: times new roman,arial,sans-serif;font-size: 16px;border: 1px solid black;}" & _
    ".tdred {font-family: times new roman,arial,sans-serif;font-size: 16px;font-weight: bold;color: white;background-color: red;border: 1px solid black;}" & _
    "</style>" & _
    "<body><table>" & "<th>" & "Désignation" & "<th>" & "Nbre" & "<th>" & "Stock" & "</th>"
        If MyBench41 <= 5 Then couleur41 = "tdred" Else couleur41 = "tdblack"
    contenu = contenu & "<tr><td class='" & couleur41 & "'>" & MyBench & "</td><td class='" & couleur41 & "'>" & MyBench2 & "</td><td class='" & couleur41 & "'>" & MyBench41 & "</td></tr>"
        If MyBench42 <= 5 Then couleur42 = "tdred" Else couleur42 = "tdblack"
    contenu = contenu & "<tr><td class='" & couleur42 & "'>" & MyBench3 & "</td><td class='" & couleur42 & "'>" & MyBench4 & "</td><td class='" & couleur42 & "'>" & MyBench42 & "</td></tr>"
        If MyBench43 <= 5 Then couleur43 = "tdred" Else couleur43 = "tdblack"
    contenu = contenu & "<tr><td class='" & couleur43 & "'>" & MyBench5 & "</td><td class='" & couleur43 & "'>" & MyBench6 & "</td><td class='" & couleur43 & "'>" & MyBench43 & "</td></tr>"
        If MyBench44 <= 5 Then couleur44 = "tdred" Else couleur44 = "tdblack" & _
    "</table></body>"

Je l'ai un peu raccourcis (j'ai nettement plus de ligne au tableau qui constitue le corps de mon mail)

Pour la référence, elle a basculé automatiquement sur la bonne à savoir : Microsoft Outlook 15.0 Object Library

Re,

Donc c'est bien ça

Dim oOutlook As Outlook.Application
Dim oMailItem As Outlook.MailItem

Décoche ta référence et recherche Outlook en Late binding

Pas sûr de comprendre, je viens de décocher la référence comme tu dis et quand je tente à nouveau j'ai un nouveau message qui me dit :

Erreur de compilation :

Type défini par l'utilisateur non défini

Late binding, ça veut dire quoi ?

Re,

Mon ami Google est là pour ça

Cocher une référence de DLL ou OCX dans l'éditeur VBA, t'oblige à rester avec la même version en général

Le late binding permet de déclarer ton objet en création tardive et du coup peut importe la version

Ouais c'est précisément ce que j'ai fait en attendant ta réponse

J'ai trouvé des trucs en CDO (je ne sais pas ce que c'est)

J'avais espéré un peu de vulgarisation pour m'aider un peu (je ne suis pas super fortiche en vba, je bricole)

Euh j'ai pas tout saisi... en plus ce que j'ai déclaré correspond à la version d'Outlook que j'utilise alors où est le mal !?

Re,

Euh j'ai pas tout saisi... en plus ce que j'ai déclaré correspond à la version d'Outlook que j'utilise alors où est le mal !?

Il n'y a pas de mal, j'ai juste à minima 30 ans de métier, c'est tout

Pas de référence Outlook à cocher

Voici un des nombreux code que j'utilise et qui t'aidera peut-être à comprendre

Private Sub SosBug()
  Dim OutObj As Object, Email As Object
  ' Création d'une instance Outlook pour envoyer un mail
  Set OutObj = CreateObject("Outlook.Application")
  Set Email = OutObj.CreateItem(0)
  Email.To = "BrunoM45@Provider.fr"
  Email.Subject = "Sujet de mon mail"
  Email.HtmlBody = "Bonjour,<BR><BR>" & "Tu trouveras ci-joint"
  'Email.Attachments.Add sPath & sNomFic
  ' Ne pas envoyer directement, afficher le mail
  Email.Display
  ' Sinon l'envoyer
  'Email.Send
  ' Effacer les variables objets
  Set OutObj = Nothing: Set Email = Nothing
  ' Supprimer le fichier temporaire
  'Kill sPath & sNomFic
End Sub

Au fait... quel est ton message d'erreur, j'aurais peut être dû commencer par là

A+

Whouah, ça fonctionne !

Pour ceux qui comme moi sont pas très forts et ont des problèmes avec les références Outlook selon les versions voici le code avec la référence Outlook déclarée qui merde :

On Error GoTo EnvoyerEmailErreur

Dim oOutlook As Outlook.Application
Dim WasOutlookOpen As Boolean
Dim oMailItem As Outlook.MailItem
Dim Body As Variant
Dim MyBench As String

MyBench = Sheets("bla").Range("H10").Value
MyBench2 = Sheets("bla").Range("F10").Value
MyBench3 = Sheets("bla").Range("H12").Value
MyBench41 = Sheets("blabla").Range("D2").Value
MyBench42 = Sheets("blabla").Range("D3").Value
MyBench43 = Sheets("blabla").Range("D4").Value

contenu = _
    "<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'>" & _
    "<style>.tdblack {font-family: times new roman,arial,sans-serif;font-size: 16px;border: 1px solid black;}" & _
    ".tdred {font-family: times new roman,arial,sans-serif;font-size: 16px;font-weight: bold;color: white;background-color: red;border: 1px solid black;}" & _
    "</style>" & _
    "<body><table>" & "<th>" & "Désignation" & "<th>" & "Nbre" & "<th>" & "Stock" & "</th>"
        If MyBench41 <= 5 Then couleur41 = "tdred" Else couleur41 = "tdblack"
    contenu = contenu & "<tr><td class='" & couleur41 & "'>" & MyBench & "</td><td class='" & couleur41 & "'>" & MyBench2 & "</td><td class='" & couleur41 & "'>" & MyBench41 & "</td></tr>"
        If MyBench42 <= 5 Then couleur42 = "tdred" Else couleur42 = "tdblack"
    contenu = contenu & "<tr><td class='" & couleur42 & "'>" & MyBench3 & "</td><td class='" & couleur42 & "'>" & MyBench4 & "</td><td class='" & couleur42 & "'>" & MyBench42 & "</td></tr>"
        If MyBench43 <= 5 Then couleur43 = "tdred" Else couleur43 = "tdblack"
    contenu = contenu & "<tr><td class='" & couleur43 & "'>" & MyBench5 & "</td><td class='" & couleur43 & "'>" & MyBench6 & "</td><td class='" & couleur43 & "'>" & MyBench43 & "</td></tr>"
        If MyBench44 <= 5 Then couleur44 = "tdred" Else couleur44 = "tdblack" & _
    "</table></body>"

PreparerOutlook oOutlook
Set oMailItem = oOutlook.CreateItem(0)

With oMailItem
.To = "blablabla@hotmail.fr"
.Subject = "blablabla"
.HTMLBody = "<html><p>" & "Bonjour,<br><br>Merci de m'aider :<br><br>" & contenu & "<html><p>" & "Merci encore.<br><br>Cordialement,<br>"

.Send
End With

If (Not (oMailItem Is Nothing)) Then Set oMailItem = Nothing
If (Not (oOutlook Is Nothing)) Then Set oOutlook = Nothing

Exit Sub

EnvoyerEmailErreur:
If (Not (oMailItem Is Nothing)) Then Set oMailItem = Nothing
If (Not (oOutlook Is Nothing)) Then Set oOutlook = Nothing

MsgBox "Le mail n'a pas pu être envoyé...", vbCritical, "Erreur"

End Sub

Et voici la version en Late binding qui enverra le mail quelle que soit la version Outlook :

Dim OutObj As Object
Dim Email As Object
Set OutObj = CreateObject("Outlook.Application")
Set Email = OutObj.CreateItem(0)

MyBench = Sheets("bla").Range("H10").Value
MyBench2 = Sheets("bla").Range("F10").Value
MyBench3 = Sheets("bla").Range("H12").Value
MyBench41 = Sheets("blabla").Range("D2").Value
MyBench42 = Sheets("blabla").Range("D3").Value
MyBench43 = Sheets("blabla").Range("D4").Value

contenu = _
    "<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'>" & _
    "<style>.tdblack {font-family: times new roman,arial,sans-serif;font-size: 16px;border: 1px solid black;}" & _
    ".tdred {font-family: times new roman,arial,sans-serif;font-size: 16px;font-weight: bold;color: white;background-color: red;border: 1px solid black;}" & _
    "</style>" & _
    "<body><table>" & "<th>" & "Désignation" & "<th>" & "Nbre" & "<th>" & "Stock" & "</th>"
        If MyBench41 <= 5 Then couleur41 = "tdred" Else couleur41 = "tdblack"
    contenu = contenu & "<tr><td class='" & couleur41 & "'>" & MyBench & "</td><td class='" & couleur41 & "'>" & MyBench2 & "</td><td class='" & couleur41 & "'>" & MyBench41 & "</td></tr>"
        If MyBench42 <= 5 Then couleur42 = "tdred" Else couleur42 = "tdblack"
    contenu = contenu & "<tr><td class='" & couleur42 & "'>" & MyBench3 & "</td><td class='" & couleur42 & "'>" & MyBench4 & "</td><td class='" & couleur42 & "'>" & MyBench42 & "</td></tr>"
        If MyBench43 <= 5 Then couleur43 = "tdred" Else couleur43 = "tdblack"
    contenu = contenu & "<tr><td class='" & couleur43 & "'>" & MyBench5 & "</td><td class='" & couleur43 & "'>" & MyBench6 & "</td><td class='" & couleur43 & "'>" & MyBench43 & "</td></tr>"
        If MyBench44 <= 5 Then couleur44 = "tdred" Else couleur44 = "tdblack" & _
    "</table></body>"

Email.To = "blablabla@hotmail.fr"
Email.Subject = "blablabla"
Email.HTMLBody = "<html><p>" & "Bonjour,<br><br>Merci de m'avoir aidé :<br><br>" & contenu & "<html><p>" & "Merci encore.<br><br>Cordialement,<br>"
Email.Send
Set OutObj = Nothing: Set Email = Nothing

End Sub

Merci beaucoup BrunoM45, ton bout de code m'a précisément aidé. Je ne pensais pas que je pourrais l'adapter à mon code, mais il semblerait que je progresse !

Merci encore !

D'ailleurs BrunoM45,

Ma référence Microsoft Outlook 15.0 Object Library est cochée mais cela ne semble pas empêcher le mail de partir en Late binding

Normal ?

Re,

Un petit oubli dans le code donné et celui que tu as posté, tu peut supprimer la ligne

Exit Sub

C'est parce que chez moi en dessous j'ai un traitement d'erreur

Ma référence Microsoft Outlook 15.0 Object Library est cochée mais cela ne semble pas empêcher le mail de partir en Late binding

Normal ?

Oui normal, car le code n'en as pas besoin, en revanche si tu la laisse cochée et que tu mets ce classeur à dispo sur un PC avec une autre version... tu auras une erreur

Ok, j'ai modifié le modèle que j'ai partagé

Question, ce que tu appelles traitement d'erreur c'est au cas où le mail ne part pas ?

Parce que j'avais ça dans mon code précédent c'est justement le message d'erreur dont je parle sur mon premier commentaire

J'aimerais avoir cette sécurité, d'être certain que le mail est parti

Re,

Voici avec la gestion d'erreur

Sub EnvoiMail()
  Dim OutObj As Object
  Dim Email As Object
  ' En cas d'erreur
  On Error GoTo Erreur_Proc
  ' Définir les objets Outlook et Mail
  Set OutObj = CreateObject("Outlook.Application")
  Set Email = OutObj.CreateItem(0)
  ' Préparer le message
  MyBench = Sheets("bla").Range("H10").Value
  MyBench2 = Sheets("bla").Range("F10").Value
  MyBench3 = Sheets("bla").Range("H12").Value
  MyBench41 = Sheets("blabla").Range("D2").Value
  MyBench42 = Sheets("blabla").Range("D3").Value
  MyBench43 = Sheets("blabla").Range("D4").Value

  contenu = _
    "<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'>" & _
    "<style>.tdblack {font-family: times new roman,arial,sans-serif;font-size: 16px;border: 1px solid black;}" & _
    ".tdred {font-family: times new roman,arial,sans-serif;font-size: 16px;font-weight: bold;color: white;background-color: red;border: 1px solid black;}" & _
    "</style>" & _
    "<body><table>" & "<th>" & "Désignation" & "<th>" & "Nbre" & "<th>" & "Stock" & "</th>"
  If MyBench41 <= 5 Then couleur41 = "tdred" Else couleur41 = "tdblack"
  contenu = contenu & "<tr><td class='" & couleur41 & "'>" & MyBench & "</td><td class='" & couleur41 & "'>" & MyBench2 & "</td><td class='" & couleur41 & "'>" & MyBench41 & "</td></tr>"
  If MyBench42 <= 5 Then couleur42 = "tdred" Else couleur42 = "tdblack"
  contenu = contenu & "<tr><td class='" & couleur42 & "'>" & MyBench3 & "</td><td class='" & couleur42 & "'>" & MyBench4 & "</td><td class='" & couleur42 & "'>" & MyBench42 & "</td></tr>"
  If MyBench43 <= 5 Then couleur43 = "tdred" Else couleur43 = "tdblack"
  contenu = contenu & "<tr><td class='" & couleur43 & "'>" & MyBench5 & "</td><td class='" & couleur43 & "'>" & MyBench6 & "</td><td class='" & couleur43 & "'>" & MyBench43 & "</td></tr>"
  If MyBench44 <= 5 Then couleur44 = "tdred" Else couleur44 = "tdblack" & _
    "</table></body>"

  Email.To = "blablabla@hotmail.fr"
  Email.Subject = "blablabla"
  Email.HTMLBody = "<html><p>" & "Bonjour,<br><br>Merci de m'avoir aidé :<br><br>" & contenu & "<html><p>" & "Merci encore.<br><br>Cordialement,<br>"
  Email.Send
  Set OutObj = Nothing: Set Email = Nothing
  ' Si tout est ok, sortir de la sub ici
  Exit Sub

' En cas d'erreur
Erreur_Proc:
  MsgBox "Un erreur c'est produite : " & Err.Number & " - " & Err.Description _
    & "Le mail n'a pas été envoyé (à vérifier)", vbCritical, "OUPS..."
   Set OutObj = Nothing: Set Email = Nothing
   ' On arrête
End Sub

A+

Merci encore et à plus !

Rechercher des sujets similaires à "erreur envoi mail outlook"