Envoyer un mail par VBA avec des cellules copiées
Bonjour à tous,
je souhaite envoyer par mail, un tableau qui est dans un de mes onglets
Très précisément il va s'agir de copier des cellules, située dans le 8ème onglet, selon un nom qu'on aura cliqué dans un onglet mail.
J'ai trouvé comment envoyer un mail en reprenant des exemples citées sur un autre site mais je voudrai ajouter les cellules copiées ou sélectionnées.
Sub TestEnvoiEmail()
Dim a As Integer
Dim b As Integer
Dim c As Integer
Dim d As Integer
Dim e As Integer
a = 5
b = 1
nom:
Range("T7") = a
Range("u7") = b
If Sheets("Planning des jeunes").Cells(a, b) = Cells(9, 20) Then GoTo edt
a = a + 31
If a > 284 Then
a = 5
b = b + 7
If b > 8 Then Exit Sub
End If
GoTo nom
edt:
Sheets("Planning des jeunes").Select
a = Sheets("Mail").Range("T7")
b = Sheets("Mail").Range("u7")
ActiveSheet.Range("A183") = a
ActiveSheet.Range("B183") = b
c = a - 4
d = a + 22
e = b + 5
ActiveSheet.Range(ActiveSheet.Cells(c, b), ActiveSheet.Cells(d, e)).Select
'définition des variables
Dim MonSujet As String
Dim MonDestinataire As String
Dim MonContenu As String
'attribution des valeurs aux variables
MonSujet = "Emploi du temps de " & Sheets("Mail").Range("T9")
MonDestinataire = "machinchose@truc.fr"
MonContenu = "Bonjour, Voici l’emploi du temps de " & Sheets("Mail").Range("T9") & " pour la semaine prochaine. Cordialement, l'équipe éducative"
'que dois je mettre ici pour que j'ai mes cellules dans le mail
'les cellules à copier sont
'ActiveSheet.Range(ActiveSheet.Cells(c, b), ActiveSheet.Cells(d, e))
'ou Sheets(8) car les données sont en sheets(8)
'test envoi de l'email
Call EnvoyerEmail(MonSujet, MonDestinataire, MonContenu)
MsgBox "Test terminé..."
End Sub
Merci.
Ne tenais pas compte du bout de code sans doute dégueu du début de la macro. Ce qui m'intéresse c'est que mettre pour qu'il envoie les cellules copiées ou sélectionjnées
Merci d'avance
Est-ce que ton code EnvoyerEmail est programmé en htmlbody
?
Un programme pour transformer une plage en un tableau html à intégrer dans ton mail
Function tableauhtml(plage As Range) As String
Dim cel As Range
Set cel = plage.Cells(1, 1)
tableauhtml = "<table>"
For i = 1 To plage.Rows.Count
tableauhtml = tableauhtml & "<tr>"
For j = 1 To plage.Columns.Count
tableauhtml = tableauhtml & "<td>" & texthtml(cel.Offset(i - 1, j - 1).Value) & "</td>"
Next
tableauhtml = tableauhtml & "</tr>"
Next
tableauhtml = tableauhtml & "</table>"
End Function
Function texthtml(texte As String)
texthtml = ""
For i = 1 To Len(texte)
Select Case Asc(Mid(texte, i, 1))
Case Is = 10
texthtml = texthtml & "<br/>"
Case Is = 39
texthtml = texthtml & "&#" & Application.Trim(Str(Asc(Mid(texte, i, 1)))) & ";"
Case Is > 127
texthtml = texthtml & "&#" & Application.Trim(Str(Asc(Mid(texte, i, 1)))) & ";"
Case Else
texthtml = texthtml & Mid(texte, i, 1)
End Select
Next
End Function
Bonjour et merci,
j'ai effectivement possibilité de l'envoyer en html.
Call EnvoyerEmail("Test email HTML 1", "adresse@fournisseur.fr", "Ceci est un <strong>test</strong><br>avec les formats <span style=""color: #f55; font-weight: bold;"">HTML</span>...")
Cela appelle ce module
Sub EnvoyerEmail(ByVal Sujet As String, ByVal Destinataire As String, ByVal ContenuEmail As String, Optional ByVal PieceJointe As String)
On Error GoTo EnvoyerEmailErreur
'définition des variables
Dim oOutlook As Outlook.Application
Dim WasOutlookOpen As Boolean
Dim oMailItem As Outlook.MailItem
Dim Body As Variant
Body = ContenuEmail
'vérification si le Contenu du mail n'est pas vide. Si oui, email n'est pas envoyé. Si vous voulez pouvoir envoyer les email vides, mettez en commentaire les 4 lignes de code qui suivent.
If (Body = False) Then
MsgBox "Mail non envoyé car vide", vbOKOnly, "Message"
Exit Sub
End If
'préparer Outlook
PreparerOutlook oOutlook
Set oMailItem = oOutlook.CreateItem(0)
'création de l'email
With oMailItem
.To = Destinataire
.Subject = Sujet
'CHOIX DU FORMAT
'----------------------
'email formaté comme texte
'.BodyFormat = olFormatRichText
'.Body = Body
'OU
'email formaté comme HTML
.BodyFormat = olFormatHTML
.HTMLBody = "<html><p>" & Body & "</p></html>"
'----------------------
If PieceJointe <> "" Then .Attachments.Add PieceJointe
.Display '<- affiche l'email (si vous ne voulez pas l'afficher, mettez cette ligne en commentaire)
.Save '<- sauvegarde l'email avant l'envoi (pour ne pas le sauvegarder, mettez cette ligne en commentaire)
.Send '<- envoie l'email (si vous voulez seulement préparer l'email et l'envoyer manuellement, mettez cette ligne en commentaire)
End With
'nettoyage...
If (Not (oMailItem Is Nothing)) Then Set oMailItem = Nothing
If (Not (oOutlook Is Nothing)) Then Set oOutlook = Nothing
Exit Sub
J'ai deux questions. Comment appeler la fonction qui a récupéré mon tableau (la fonction tableauhtml)
Et pouvez vous expliquer cette fonction.
Pour ma part je dois récupérer un tableau (copier les cellules) qui est en
Range(Sheet(8).Cells(c, b), Sheets(8).Cells(d, e))
Merci beaucoup
Essaie ceci
MonContenu = "Bonjour, Voici l’emploi du temps de " & Sheets("Mail").Range("T9") & " pour la semaine prochaine. Cordialement, l'équipe éducative<br>" & tableauhtml(ActiveSheet.Range(ActiveSheet.Cells(c, b), ActiveSheet.Cells(d, e)))
Call EnvoyerEmail(MonSujet, MonDestinataire, MonContenu)
La fonction a pour objet de balayer toutes les cellules et de mettre
avant et après l'ensemble les balises <table> et </table>
avant et après chaque ligne les balises <tr> et </tr>
avant et après chaque cellule <td> et <td>
Elle va aussi code tous les caractères ASCII supérieurs à 127
Merci beaucoup.
Je progresse dans mon apprentissage.
Ce n'est pas encore exactement ce que je veux mais je vais tenter de me débrouiller seul avant de revenir poser une question ici.
Merci beaucoup.
Bonne journée