XL 2013 VBA - insérer une plage de cellule dans un courriel

Roseline

XLDnaute Occasionnel
Bonjour et Bonne Année 2021
J'ai besoin de votre aide concernant mon fichier. J'ai un fichier excel qui contient plusieurs données. Je prend une partie de ces données que j'envoie par courriel par VBA.
J'ai déterminé mes variables et tout va bien quand je détermine seulement une cellule, voici une variable par exemple:
ex: urgent=cells(5,6).value
cependant si je veux inclure dans mon courriel une plage de cellule, comment je peux déterminer ma variable.
ex: suite=Range("C8:F25").value
en inscrivant ceci dans mes variables, dans mon courriel ca indique "vrai". Ce que je voudrais c'est que la plage "C8:F25" soit dans le courriel et qu'on voit toutes les données de cette plage.
J'espère être claire, sinon je joindrai mon fichier.
Merci et bonne journée
 

Roseline

XLDnaute Occasionnel
Bonsoir le fil, Roseline (meilleurs voeux 2021)

=>Roseline
Regarde ce que j'ai posté dans un fil récent (à la thématique similaire)
Si tu as des questions, n'hésites pas ;)
NB: j'ai testé ce matin, le code fonctionne pour ce qui est de l'export d'une plage dans le corps du mail.
Merci de votre réponse,
Voici ma vba pour envoyer mon courriel mais je n'ai aucune idée comment ajouter ma plage et surtout à quel endroit dans ma commande la placer. Tout fonctionne très bien actuellement et elle prend mes variables et les dispose dans le courriel sans problème. Je ne vois comprend pas comment insérer la commande pour lui dire d'ajouter ma plage dans mon courriel (et non en pièce jointe) avant la signature qui s'insère automatiquement. Je suis dans l'impasse depuis quelques jours à ce niveau.


Sub envoyercourriel()

Workbooks("...").Activate
Sheets("...").Select


Dim i As Integer
Dim ol As Object, olmail As Object
Set ol = CreateObject("Outlook.Application")
Set olmail = ol.Application.CreateItem(olMailItem)
Dim sigstring As String
Dim signature As String
sigstring = Environ("appdata") & "\Microsoft\Signatures\"
f = Dir(sigstring & "*.htm")
signature = Getboiler(sigstring & f)

On Error Resume Next

Application.DisplayAlerts = False
qui = Cells(3, 2).Value
pour= Cells(7, 3).Value
jour = Cells(3, 4).Value
Plage = Range("A4:I13").Select

With olmail

If qui = "A faire" Then

.to = "..."
.Subject = "RUSH** "
.HTMLBody = "Bonjour," & "<br/><br/>" & "a faire" & "<br/><br/>" & "Qui : " & qui & "<br/><br/>" & " Pour : " & pour & " <br/><br/>" & "# important : " & plage & " <BR/><br/>" & "Date : " & jour& " <BR/><br/>" & "Merci" & " <BR/><br/> " & signature
.send

Exit Sub
 

Staple1600

XLDnaute Barbatruc
Re

[Petit conseil en passant]
Utilises les balises BBCode quand tu postes du code VBA
(cela rend le message plus lisible)
VB:
Sub envoyercourriel()
Dim i As Integer
Dim ol As Object, olmail As Object
Dim sigstring$, signature$
Workbooks("...").Activate
Sheets("...").Select
Set ol = CreateObject("Outlook.Application")
Set olmail = ol.Application.CreateItem(olMailItem)
sigstring = Environ("appdata") & "\Microsoft\Signatures\"
f = Dir(sigstring & "*.htm")
signature = Getboiler(sigstring & f)

On Error Resume Next

Application.DisplayAlerts = False
qui = Cells(3, 2).Value
pour= Cells(7, 3).Value
jour = Cells(3, 4).Value
Plage = Range("A4:I13").Select
With olmail
If qui = "A faire" Then
.to = "..."
.Subject = "RUSH** "
.HTMLBody = "Bonjour," & "<br/><br/>" & "a faire" & "<br/><br/>" & "Qui : " & qui & "<br/><br/>" & " Pour : " & pour & " <br/><br/>" & "# important : " & plage & " <BR/><br/>" & "Date : " & jour& " <BR/><br/>" & "Merci" & " <BR/><br/> " & signature
.send
Exit Sub
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

Le but n'est pas de l'intégrer mais de l'adapter
(voir plus loin dans le fil ce que j'ai proposé et qui fonctionne
test tout frais de ce matin)
Faites un test simple qui vous convaincra que cela fonctionne ;)
Et ensuite je vous aiderai volontiers à faire les adaptations nécessaires.

PS: Dans votre message#1, vous avez oublié de poster la fameuse fonction GetBoiler de Dick Kusleika.
Je la poste ci-dessous (pour ceux que cela pourrait interesser)
VB:
Function GetBoiler(ByVal sFile As String) As String
'Dick Kusleika
    Dim fso As Object
    Dim ts As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2)
    GetBoiler = ts.readall
    ts.Close
End Function
 

Roseline

XLDnaute Occasionnel
Re

Le but n'est pas de l'intégrer mais de l'adapter
(voir plus loin dans le fil ce que j'ai proposé et qui fonctionne
test tout frais de ce matin)
Faites un test simple qui vous convaincra que cela fonctionne ;)
Et ensuite je vous aiderai volontiers à faire les adaptations nécessaires.

PS: Dans votre message#1, vous avez oublié de poster la fameuse fonction GetBoiler de Dick Kusleika.
Je la poste ci-dessous (pour ceux que cela pourrait interesser)
VB:
Function GetBoiler(ByVal sFile As String) As String
'Dick Kusleika
    Dim fso As Object
    Dim ts As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2)
    GetBoiler = ts.readall
    ts.Close
End Function
J'ai bien intégrer votre vba à la mienne et tout fonctionne bien sauf que ma plage ne s'insère pas du tout dans mon courriel.
 

Staple1600

XLDnaute Barbatruc
Re

Voici ce que cela pourrait donner
(ici 1ère version de test (sans la signature)
VB:
Sub test_Roseline()
Create_Email "roseline@mail.fr", "RUSH***"
End Sub
Sub Create_Email(ByVal strTo As String, ByVal strSubject As String)
Dim rngToPicture As Range, outlookApp As Object, Outmail As Object, strBody$, strTempFilePath$, strTempFileName$
Dim qui$, pour$, jour$
strTempFileName = "RangeAsPNG"
Set rngToPicture = Range("A4:I13")
Set outlookApp = CreateObject("Outlook.Application")
Set Outmail = outlookApp.CreateItem(0)
'Create an email
qui = Cells(3, 2).Value
pour = Cells(7, 3).Value
jour = Cells(3, 4).Value
If Cells(3, 2).Value = " A faire" Then
With Outmail
    .to = strTo
    .Subject = strSubject
    Call createPNG(rngToPicture, strTempFileName)
    strTempFilePath = Environ$("temp") & "\" & strTempFileName & ".png"
    .Attachments.Add strTempFilePath, 1, 0
    strBody = "<html><body>Bonjour,<br><br>a faire<br><br>Qui : " & qui & "<br><br>"
    strBody = strBody & "Pour : " & pour & "<br><br># important :" & "<br>"
    strBody = strBody & "<img src='cid:RangeAsPNG.png' style='border:0'><br>"
    strBody = strBody & "<br><br>Date : " & jour
    strBody = strBody & "<br><br>Merci<br><br>"
    .HTMLBody = strBody
    .Display
End With
End If
Set Outmail = Nothing
Set outlookApp = Nothing
Set rngToPicture = Nothing
End Sub
Sub createPNG(ByRef rngToPicture As Range, nameFile As String)
    Dim wksName As String
    wksName = rngToPicture.Parent.Name
    On Error Resume Next
        Kill Environ$("temp") & "\" & nameFile & ".png"
    On Error GoTo 0
    rngToPicture.CopyPicture
    'Paste the picture in Chart area of same dimensions
    With ThisWorkbook.Worksheets(wksName).ChartObjects.Add(rngToPicture.Left, rngToPicture.Top, rngToPicture.Width, rngToPicture.Height)
        .Activate
        .Chart.Paste
        'Export the chart as PNG File to Temp folder
        .Chart.Export Environ$("temp") & "\" & nameFile & ".png", "PNG"
    End With
    Worksheets(wksName).ChartObjects(Worksheets(wksName).ChartObjects.Count).Delete
End Sub
Je te laisse tester in situ.
 

Roseline

XLDnaute Occasionnel
Bonsoir le fil,

Tu peux poster le code VBA que tu utilises, stp?
(Normalement si tu utilisé celui du message#9 en ne changeant rien d'autre que l'adresse mail, ca doit fonctionner puisque cela fonctionne chez moi.)

Dim
rngToPicture As Range, outlookApp As Object, Outmail As Object, strBody$, strTempFilePath$, strTempFileName$
Dim Prioritaire$, Niveau2$
Dim sigstring As String
Dim signature As String
sigstring = Environ("appdata") & "\Microsoft\Signatures\"
f = Dir(sigstring & "*.htm")
signature = Getboiler(sigstring & f)
strTempFileName = "RangeAsPNG"
Set rngToPicture = Range("A8:c13")
Set outlookApp = CreateObject("Outlook.Application")
Set Outmail = outlookApp.CreateItem(0)

'Create an email
Prioritaire = Cells(3, 2).Value
Niveau 2 = Cells(7, 3).Value

With Outmail

If Cells(6, 3) = "A faire" Then

.to = "...…….."
.Subject = "A faire "
Call createPNG(rngToPicture, strTempFileName)
strTempFilePath = Environ$("temp") & "\" & strTempFileName & ".png"
.Attachments.Add strTempFilePath, 1, 0
strBody = strBody & "Bonjour," & "<br/><br/>" & "Travail à faire" & "<br/><br/>"
strBody = strBody & "Un: " & Prioritaire & "<br/><br/>"
strBody = strBody & " Deux: " & Niveau 2 & " <br/><br/>"
strBody = strBody & "Merci" & " <BR/><br/> "
strBody = strBody & signature
.htmlbody = strBody
.send

End With
end if
Set Outmail = Nothing
Set outlookApp = Nothing
Set rngToPicture = Nothing
end sub


Sub createPNG(ByRef rngToPicture As Range, nameFile As String)
Dim wksName As String
wksName = rngToPicture.Parent.Name
On Error Resume Next
Kill Environ$("temp") & "\" & nameFile & ".png"
On Error GoTo 0
rngToPicture.CopyPicture
'Paste the picture in Chart area of same dimensions
With ThisWorkbook.Worksheets(wksName).ChartObjects.Add(rngToPicture.Left, rngToPicture.Top, rngToPicture.Width, rngToPicture.Height)
.Activate
.Chart.Paste
'Export the chart as PNG File to Temp folder
.Chart.Export Environ$("temp") & "\" & nameFile & ".png", "PNG"
End With
Worksheets(wksName).ChartObjects(Worksheets(wksName).ChartObjects.Count).Delete
End Sub

Je n'ai pas ajouté la function Getboiler mais elle est présente dans ma commande.

Merci :)
 

Staple1600

XLDnaute Barbatruc
Re

Et pourquoi ceci a disparu...:rolleyes:
strBody = strBody & "<img src='cid:RangeAsPNG.png' style='border:0'><br>"
Conseil en passant (et avant d'aller me coucher)
Quand on est en phase de test, on fait d'abord un petit test basique!
En l'occurrence, tu aurais du tester le code que j'ai posté tel quel, en ne changeant que l'adresse mail
Juste pour voir si cela fonctionne.
Ensuite seulement vient la phase de personnalisation du code

Donc retestes mon code dans les conditions suivantes
Tu copies/colles mon code (sans y toucher)
Tu mets ta vraie adresse mail
Et c'est cette macro que tu lances (en étant sur la feuille contenant la plage de cellules à exporter)
VB:
Sub test_Roseline()
Create_Email "roseline@mail.fr", "RUSH***"
End Sub
Ca doit alors fonctionner.

Si ca ne fonctionne pas , c'est que tu n'as pas respecté ce mode opératoire.

Bonne nuit et @+ sur XLD.
 

Roseline

XLDnaute Occasionnel
Re

Et pourquoi ceci a disparu...:rolleyes:
strBody = strBody & "<img src='cid:RangeAsPNG.png' style='border:0'><br>"
Conseil en passant (et avant d'aller me coucher)
Quand on est en phase de test, on fait d'abord un petit test basique!
En l'occurrence, tu aurais du tester le code que j'ai posté tel quel, en ne changeant que l'adresse mail
Juste pour voir si cela fonctionne.
Ensuite seulement vient la phase de personnalisation du code

Donc retestes mon code dans les conditions suivantes
Tu copies/colles mon code (sans y toucher)
Tu mets ta vraie adresse mail
Et c'est cette macro que tu lances (en étant sur la feuille contenant la plage de cellules à exporter)
VB:
Sub test_Roseline()
Create_Email "roseline@mail.fr", "RUSH***"
End Sub
Ca doit alors fonctionner.

Si ca ne fonctionne pas , c'est que tu n'as pas respecté ce mode opératoire.

Bonne nuit et @+ sur XLD.
Rebonjour,
Quand on est fatigué on devrait tout laisser de côté et revenir plus tard. J'avais pas vu que j'avais omis une ligne en insérant ton code au travers du mien. J'ai ajouté la ligne manquante et effectivement tout fonctionne parfaitement maintenant. Une chance que tu as été là pour m'aider. Je te remercie grandement et te souhaite une excellente journée ou une excellente nuit d'où tu es.
Bye bye et MERCI ENCORE !
 

Discussions similaires