looky62
XLDnaute Occasionnel
hELLO la communauté,
je souhaite automatiser un mail afin d'envoyer un rapport en fin de semaine, le minutage fonctionne, ce qui bloque pr moi c la capture d'ecran en fait je souhaiterai joindre ds le corps de mon mail une capture de 2 feuilles de calculs composé de graphiques et de données qui sont comprises entre A1 et R35 , j ai tenté plusieurs codes mais en vain si vous avez ds vos bibliothéques ce genre d'automatisation
ma dernieres tentatives en vain *
Sub EnvoyerEmailAvecPlage()
Dim monMail As Object
Dim strAdresse As String
Dim strObjet As String
Dim strMsg As String
Dim rngPlage As Range
'Définir la plage à capturer sous forme d'image
Set rngPlage = ThisWorkbook.Sheets("TCD").Range("A1:R35")
'Définir l'adresse du destinataire
strAdresse = "exemple@adresse.com"
'Définir l'objet de l'e-mail
strObjet = "Objet de l'e-mail"
'Définir le message de l'e-mail avec l'image capturée
strMsg = "Bonjour,<br><br>Voici la plage de cellules que vous avez demandée :<br><br><img src='data:image/png;base64," & ImageToBase64(rngPlage) & "'><br><br>Bien cordialement."
'Créer l'e-mail
Set monMail = CreateObject("Outlook.Application").CreateItem(0)
'Définir les propriétés de l'e-mail
With monMail
.To = strAdresse
.Subject = strObjet
.HTMLBody = strMsg
.Display
End With
'Créer un graphique à partir de la plage spécifiée
Set imgChart = rng.Parent.Shapes.AddChart2(201, xlColumnClustered).Chart
With imgChart
.SetSourceData rng
.ChartArea.Format.Fill.Visible = msoFalse
.ChartArea.Format.Line.Visible = msoFalse
End With
End Sub
Function ImageToBase64(rng As Range) As String
Dim cht As Chart
Dim imgStream As ADODB.Stream
'Créer un graphique à partir de la plage spécifiée
Set cht = rng.Parent.Shapes.AddChart2(201, xlColumnClustered).Chart
With cht
.SetSourceData rng
.ChartArea.Format.Fill.Visible = msoFalse
.ChartArea.Format.Line.Visible = msoFalse
End With
'Enregistrer le graphique sous forme d'image dans un flux ADODB
Set imgStream = New ADODB.Stream
With imgStream
.Type = adTypeBinary
.Open
cht.Export "C:\Temp\chart.png", "PNG"
.LoadFromFile "C:\Temp\chart.png"
End With
'Convertir l'image en chaîne Base64
ImageToBase64 = Replace(imgStream.ReadText(adReadAll), vbCrLf, "")
'Nettoyer les objets créés
cht.Parent.Delete
imgStream.Close
Kill "C:\Temp\chart.png"
End Function
************************************
ça plante Dim imgStream As ADODB.Stream, a mon avis ADOB n'est pas défini ds les extensions de mon ETS sous Excel y a t il une autre parade
je souhaite automatiser un mail afin d'envoyer un rapport en fin de semaine, le minutage fonctionne, ce qui bloque pr moi c la capture d'ecran en fait je souhaiterai joindre ds le corps de mon mail une capture de 2 feuilles de calculs composé de graphiques et de données qui sont comprises entre A1 et R35 , j ai tenté plusieurs codes mais en vain si vous avez ds vos bibliothéques ce genre d'automatisation
ma dernieres tentatives en vain *
Sub EnvoyerEmailAvecPlage()
Dim monMail As Object
Dim strAdresse As String
Dim strObjet As String
Dim strMsg As String
Dim rngPlage As Range
'Définir la plage à capturer sous forme d'image
Set rngPlage = ThisWorkbook.Sheets("TCD").Range("A1:R35")
'Définir l'adresse du destinataire
strAdresse = "exemple@adresse.com"
'Définir l'objet de l'e-mail
strObjet = "Objet de l'e-mail"
'Définir le message de l'e-mail avec l'image capturée
strMsg = "Bonjour,<br><br>Voici la plage de cellules que vous avez demandée :<br><br><img src='data:image/png;base64," & ImageToBase64(rngPlage) & "'><br><br>Bien cordialement."
'Créer l'e-mail
Set monMail = CreateObject("Outlook.Application").CreateItem(0)
'Définir les propriétés de l'e-mail
With monMail
.To = strAdresse
.Subject = strObjet
.HTMLBody = strMsg
.Display
End With
'Créer un graphique à partir de la plage spécifiée
Set imgChart = rng.Parent.Shapes.AddChart2(201, xlColumnClustered).Chart
With imgChart
.SetSourceData rng
.ChartArea.Format.Fill.Visible = msoFalse
.ChartArea.Format.Line.Visible = msoFalse
End With
End Sub
Function ImageToBase64(rng As Range) As String
Dim cht As Chart
Dim imgStream As ADODB.Stream
'Créer un graphique à partir de la plage spécifiée
Set cht = rng.Parent.Shapes.AddChart2(201, xlColumnClustered).Chart
With cht
.SetSourceData rng
.ChartArea.Format.Fill.Visible = msoFalse
.ChartArea.Format.Line.Visible = msoFalse
End With
'Enregistrer le graphique sous forme d'image dans un flux ADODB
Set imgStream = New ADODB.Stream
With imgStream
.Type = adTypeBinary
.Open
cht.Export "C:\Temp\chart.png", "PNG"
.LoadFromFile "C:\Temp\chart.png"
End With
'Convertir l'image en chaîne Base64
ImageToBase64 = Replace(imgStream.ReadText(adReadAll), vbCrLf, "")
'Nettoyer les objets créés
cht.Parent.Delete
imgStream.Close
Kill "C:\Temp\chart.png"
End Function
************************************
ça plante Dim imgStream As ADODB.Stream, a mon avis ADOB n'est pas défini ds les extensions de mon ETS sous Excel y a t il une autre parade