XL 2021 Exporter un graphique dans Outlook

NLSCt

XLDnaute Nouveau
Bonjour,
J'ai un petit soucis d'exportation d'un graphique de la feuille active (mon fichier contient plusieurs feuilles avec plusieurs graphiques). J'ai bien un code qui fonctionne parfaitement sur mon PC, le problème est que ce fichier est partagé sur un réseau et dès que je le mets sur le réseau, la macro fonctionne, ouvre bien un nouveau Email, mais il n'y a pas de fichier (le graphique) en PJ.
je mets le code ci dessous:

Sub SendChartMail()
Dim OutApp As Object, OutMail As Object
Dim OutMsg As String, ChartPath As String
Dim oChart As ChartObject
On Error Resume Next
' Créer une instance d'outlook
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
OutMsg = "Bonjour,<br> <br> Vous trouverez ci-joint le graphique en cours <br> <br>"
OutMail.display
OutMail.To = "adresse@gmail.com"
OutMail.Subject = "Bilan Graphique"
' Pour chaque graphique de la feuille active
For Each oChart In ActiveSheet.ChartObjects
If oChart Is Nothing Then Exit Sub
' Sinon
ChartPath = ThisWorkbook.Path & "\" & Environ("Bilan") & Format(Now(), "yyyy.mm.dd_HHMM") & ".png"
oChart.Chart.Export ChartPath
OutMail.Attachments.Add ChartPath
Kill ChartPath
Next oChart
OutMail.HTMLBody = OutMsg & OutMail.HTMLBody
' Effacer les variables objet
Set OutMail = Nothing
Set OutApp = Nothing
End Sub

Est il possible de résoudre ce problème, avec en complément la mise en place au lieu d'un fichier en PJ de mettre dans le mail l'image du graphique de la feuille active.
Merci
Cordialement
 
Solution
re
Bonjour @NLSCt
et pourquoi tu n'essaierais pas d'exporter sur le pc utilisateur tout simplement ? ;)
d'autre part tu fait 3 autres erreurs
l'erreur 1
c'est de mettre une gestion d'erreur sans que l'utilsateur sache
pourquoi ca à merdouiller dans le potage

l'erreur 2
c'est de tester le chart nothing dans la boucles
en effet tester si ochart est nothing en bouclent sur les chart c'est moyen

l'erreur 3 (et celle là elle est grosse comme une maison )
c'est de nommer ton png de la même manière avec les même arguments dans ta boucle
il ta faut incrémenter une différence dans les noms
car ca va tellement vite que ton format "yyyy.mm.dd_HHMM" donnera la le même nom pour tout tes graphiques exportés...

NLSCt

XLDnaute Nouveau
Bonjour
Pour le coup je viens de voir pourquoi le graphique n'était pas pris en compte, celui ci est en bas de la feuille, non visible, si je suis au niveau du graphique et que je lance la macro pas de soucis graphique en PJ, mais si je suis en haut de la feuille (avec le graphique non visible) et que je lance la macro pas de graphique en PJ dans le mail.
Comment je peux modifier le code pour éviter ce problème.
merci
 

patricktoulon

XLDnaute Barbatruc
re
Bonjour @NLSCt
et pourquoi tu n'essaierais pas d'exporter sur le pc utilisateur tout simplement ? ;)
d'autre part tu fait 3 autres erreurs
l'erreur 1
c'est de mettre une gestion d'erreur sans que l'utilsateur sache
pourquoi ca à merdouiller dans le potage

l'erreur 2
c'est de tester le chart nothing dans la boucles
en effet tester si ochart est nothing en bouclent sur les chart c'est moyen

l'erreur 3 (et celle là elle est grosse comme une maison )
c'est de nommer ton png de la même manière avec les même arguments dans ta boucle
il ta faut incrémenter une différence dans les noms
car ca va tellement vite que ton format "yyyy.mm.dd_HHMM" donnera la le même nom pour tout tes graphiques exportés au final tu joins plusieurs fichiers du même noms
et outlook devient dingue et envoie bouler tes pièces jointes puisque il se retrouve avec 36 fichies png différents avec le même nom C EST BALLO!!!!!

maintenant que tu sais tout
tu pourrais peut être faire comme ceci

donc
VB:
Sub SendChartMail()
    Dim OutApp As Object, OutMail As Object, OutMsg$, ChartPath$, oChart As ChartObject, x&
    On Error Resume Next
    ' Créer une instance d'outlook
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)
    OutMsg = "Bonjour,<br> <br> Vous trouverez ci-joint le graphique en cours <br> <br>"
    OutMail.display
    OutMail.To = "adresse@gmail.com"
    OutMail.Subject = "Bilan Graphique"
    ' Pour chaque graphique de la feuille active
   
   For Each oChart In ActiveSheet.ChartObjects
        x = x + 1
        If oChart Is Nothing Then Exit Sub
        ' Sinon
        ChartPath = Environ("userprofile") & "\Graph " & x & Format(Now(), """_""yyyy.mm.dd_HHMM") & ".png"
        oChart.Chart.Export ChartPath
        OutMail.Attachments.Add ChartPath
        Kill ChartPath
    Next oChart
    OutMail.HTMLBody = OutMsg & OutMail.HTMLBody
    ' Effacer les variables objet
    Set OutMail = Nothing
    Set OutApp = Nothing

If Err Then MsgBox "il y a eu une erreur!" & vbCrLf & Err.Description
End Sub
End Sub
demo.gif


à l'avenir tache de mettre ton code dans une balise code
1705488487016.png

c'est plus facile a lire et à récupérer dans le message
Bonne journée
Patrick
 
Dernière édition:

Statistiques des forums

Discussions
312 215
Messages
2 086 324
Membres
103 179
dernier inscrit
BERSEB50