Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Intégrer une image au milieu d'un mail créé via Excel VBA

chubart

XLDnaute Nouveau
Bonjour
Malgré plusieurs recherches dans ce sujet je n'arrive pas à trouver la solution pour ce qui me concerne.
J'ai créé un mail via Excel vba et je n'arrive pas à intégrer une image située sur mon disque dur. Etant donné que cette image doit arriver au milieu de mon texte, j'ai créé 2 strbody que je reprends ensuite dans mon HTMLbody en y intercalant mon image (est-ce indispensable ?) mais, rien à faire, l'image y est mais elle est vide. Problème de chemin ?
Quelqu'un pour me montrer où est l'erreur ?
MERCI !

Voici ma macro


et voici le résultat :
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Chulard,
Un petit fichier aurait été plus utile que des photos. Ensuite pour le code vous pouvez l'insérer directement avec la balise </> à droite de l'icone GIF.
Ensuite regardez cette discussion sur XLD :
 

chubart

XLDnaute Nouveau
Heu, désolée mais je ne comprends pas. Je suis béotienne sans doute mais quelle icône GIF ?
 

chubart

XLDnaute Nouveau
Ok je crois avoir compris
Voici mon code :

Code:
Sub envoimail3()

  Dim OutApp As Outlook.Application
    Dim OutMail As Outlook.MailItem
    Dim OutAccount As Outlook.Account
    Dim Chemin$, NomImage$
    Dim strbody As String
    Dim strbody2 As String
'    Chemin = "C:\Users\Chantal\Dropbox\IMHEB\image base.jpg"
'    NomImage = Mid(Chemin, InStrRev(Chemin, "\") + 1) 'nom du fichier image sans le chemin complet
    NomImage = "C:\Users\Chantal\Dropbox\IMHEB\image base.jpg"
For Ligne = 6 To 30
    If Not Range("a" & Ligne) = "" Then

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(olMailItem)
    Set OutAccount = OutApp.Session.accounts.Item(3)

    strbody = "Première partie du texte" & "<br><br>"

    strbody2 = "Deuxième partie du texte" & "<br><br>" & "Bien à vous"
    
    With OutMail
        .SendUsingAccount = OutAccount
        .To = "test@gmail.com"
        .Subject = Range("a" & Ligne) & " Confirmation d'inscription et facture"

        .HTMLBody = strbody & Chr(10) & "<img src='" & NomImage & "' & width='600' height='300'><br><br> " & strbody2 & Chr(10) & .HTMLBody 'image n'apparaît pas
        .Attachments.Add NomImage
        .Display
    End With
    On Error GoTo 0


Else: Exit For
End If

Next Ligne
End Sub
 

patricktoulon

XLDnaute Barbatruc
re
pense a travailler en late binding on a tous des versions d'excel différente de 2007 à 2024
et les versions d'outlook ne sont pas les mêmes
on créé donc les objects en late binding bna se charge de prendre la bonne référence
VB:
Sub envoimail3()
    Dim OutApp As Object, OutMail As Object, OutAccount As Object, Chemin$, NomImage$, strbody$, strbody2$

    'l 'un ou l'autre de chemin
    'Chemin = "C:\Users\Chantal\Dropbox\IMHEB\image base.jpg"
    'ou
    Chemin = "C:\Users\Chantal\Dropbox\IMHEB\image base.jpg"
    
    'l'image nas le body c'est juste le nom de l'image car dans le mail on l'address par son nom
    'pas le path de ton disque dur ou dropbox
    NomImage = Mid(Chemin, InStrRev(Chemin, "\") + 1) 'nom du fichier image sans le chemin complet

    'on ne crée qu'une seule instance de l'application outlook
    Set OutApp = CreateObject("Outlook.Application")


    For Ligne = 6 To 30
        If Not Range("a" & Ligne) = "" Then

            Set OutMail = OutApp.CreateItem(olMailItem) 'création de l'instance(ligne) du mail
            
            Set OutAccount = OutApp.Session.accounts.Item(3)

            strbody = "Première partie du texte" & "<br><br>" 'blablabla

            strbody2 = "Deuxième partie du texte" & "<br><br>" & "Bien à vous" 'blablabla

            With OutMail
                .SendUsingAccount = OutAccount
                .To = "test@gmail.com"
                .Subject = Range("a" & Ligne) & " Confirmation d'inscription et facture"
                .HTMLBody = strbody & Chr(10) & "<img src='" & NomImage & "' & width='600' height='300'><br><br> " & strbody2 & Chr(10) & .HTMLBody 'image n'apparaît pas
                .Attachments.Add Chemin 'c'est le chemin complet de l'image pour l'attachement
                .Display
            End With
            On Error GoTo 0
            Else: Exit For
        End If
    Next Ligne
End Sub
patrick
 

chubart

XLDnaute Nouveau
HA HA HA HA Bon sang mais c'est bien sûr, en Late binding !!! Comment n'y avais-je pas pensé plus tôt ? HA HA HA. Au fait, ça veut dire quoi late binding ?
Blague à part, je viens de trouver la source du problème : tout était ok sauf le nom de mon fichier image qui comportait un espace ! J'ai changé ça et tout roule.
En tout cas merci à toi Patrick et à Sylvanu pour m'avoir aidée. Je n'y serais pas arrivée sans vous pour ce qui est des appels à l'image. Merci encore.
Chantal
 

patricktoulon

XLDnaute Barbatruc
re
Bonjour @chubart
ravi pour toi
early binding
VB:
Dim OutApp As Outlook.Application
    Dim OutMail As Outlook.MailItem
cela implique l'obligation d'avoir les référence a ces objects activées
par exemple ici chez moi c'est la ( version 15)
le probleme si j'active cette référence
et que demain je teste le fichier sur un autre pc avec une version plus récente ou ancienne de office ben la ref c'est pas la même (par exemple chez toi c'est probablement la (16)



maintenant si je travaille en late binding(déclaration tardive)
Code:
dim outapp AS object
Dim OutMail As object
set outapp=createobject("outlook.application")
Set OutMail = OutApp.CreateItem(0)

le code va me créer les object avec les références disponibles sur la bécanne sur la quelle il s’exécute
tout simplement

voilou
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…