Macro de envío de correos con Excel y Outlook en 4 niveles de dificultad

Macro Excel VBA envoie mail Outlook(3)

4 niveles para crear una macro de envío de correos con Excel y Outlook. Automatiza el envío de correos desde Excel.

Índice

1. Nivel principiante: utiliza esta macro sencilla para enviar un correo de Outlook desde Excel.

¿Quieres poder enviar automáticamente un correo de Outlook desde Excel? Sigue el código súper sencillo de abajo:

mail_vba_debutant

2. Nivel intermedio: formatea el correo (negrita, subrayado, cursiva, colores, saltos de línea) con HTML sencillo.

Gracias al HTML, puedes fácilmente:

  • Dar formato al texto de tu correo
  • Poner tu texto en cursiva, en negrita, subrayado, en rojo, etc.
  • Para más opciones de formato de texto en HTML, consulta este sitio: ¡las posibilidades son enormes!
mail_vba_intermediaire

3. Nivel avanzado: correo de Outlook con un rango de datos de Excel en el cuerpo del correo usando una función

Utilizando una función (muy sencilla), puedes integrar una tabla o una serie de datos en el cuerpo de tu correo.

mail_vba_avance

Para que esta macro funcione, tienes que añadir la función de abajo en el mismo módulo:

				
					Public Function RangetoHTML(rng_mail As Range)
    Dim fso As Object 'Déclare l'objet système de fichiers
    Dim ts As Object 'Déclare l'objet flux de texte
    Dim TempFile As String 'Déclare la variable de chaîne pour le fichier temporaire
    Dim TempWB As Workbook 'Déclare le classeur temporaire
    
    TempFile = Environ$("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm" 'Définit le chemin du fichier temporaire

    'Copie la plage et crée un nouveau classeur pour coller les données
    rng_mail.Copy
    Set TempWB = Workbooks.Add(1)
    With TempWB.Sheets(1)
        .Cells(1).PasteSpecial Paste:=8
        .Cells(1).PasteSpecial xlPasteValues, , False, False
        .Cells(1).PasteSpecial xlPasteFormats, , False, False
        .Cells(1).Select
        Excel.Application.CutCopyMode = False
        On Error Resume Next
        .DrawingObjects.Visible = True
        .DrawingObjects.Delete
        On Error GoTo 0
    End With
    
    'Publie la feuille dans un fichier htm
    With TempWB.PublishObjects.Add( _
         SourceType:=xlSourceRange, _
         Filename:=TempFile, _
         Sheet:=TempWB.Sheets(1).Name, _
         Source:=TempWB.Sheets(1).UsedRange.Address, _
         HtmlType:=xlHtmlStatic)
        .Publish (True)
    End With

    'Lit toutes les données du fichier htm dans RangetoHTML
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
    RangetoHTML = ts.ReadAll
    ts.Close
    RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
                          "align=left x:publishsource=")
    'Ferme TempWB
    TempWB.Close savechanges:=False

    'Supprime le fichier htm que nous avons utilisé dans cette fonction
    Kill TempFile

    Set ts = Nothing 'Nettoie l'objet flux de texte
    Set fso = Nothing 'Nettoie l'objet système de fichiers
    Set TempWB = Nothing 'Nettoie le classeur temporaire

End Function
				
			

4. Nivel avanzado 2: correo de Outlook con un gráfico como archivo adjunto

Añade un gráfico como archivo adjunto al correo de Outlook.

5. Nivel experto: correo de Outlook con una tabla y un gráfico en el cuerpo del correo

Añade una tabla y un gráfico en el cuerpo del correo de Outlook.

mail_vba_expert

Para que esta macro funcione, tienes que añadir la función de abajo en el mismo módulo:

				
					Function ConvertRangeToHTML(rng As Range) As String

Dim htmlTable As String 'Déclare la variable de chaîne pour le tableau HTML
Dim row As Range 'Déclare l'objet de plage pour la ligne
Dim cell As Range 'Déclare l'objet de plage pour la cellule

'Début du tableau HTML
htmlTable = "<thead><tr>"
For Each cell In rng.Rows(1).Cells
    htmlTable = htmlTable & "<th>" & cell.Value & "</th>" 'Ajoute chaque cellule de la première ligne de la plage à l'en-tête du tableau
Next cell
htmlTable = htmlTable & "</tr></thead><tbody>"

'Ajoute les lignes et les cellules au tableau
For Each row In rng.Rows
    htmlTable = htmlTable & "<tr>"
    For Each cell In row.Cells
        htmlTable = htmlTable & "<td>" & cell.Value & "</td>" 'Ajoute chaque cellule de la ligne aux données du tableau
    Next cell
    htmlTable = htmlTable & "</tr>"
Next row

'Fin du tableau HTML
htmlTable = htmlTable & "</tbody>"

ConvertRangeToHTML = htmlTable 'Renvoie le tableau HTML


End Function
				
			

Artículos relacionados