Remplacer chaine de caractères dans du html

Bonjour à tous,

Je débute en VBA et j'aurais besoin de votre aide pour automatiser un mail en html. Je vous explique :

J'ai la structure de mon mail en html format txt (le html est assez lourd car c'est un mail aussi responsive) et dans ce mail je voudrais rajouter des données qui viennent de mes cellules sur excel et seront le coeur de mon mail sans changer le design.

Je souhaiterais donc avoir sur excel un tableau ou je peux rentrer mes données dans chaque cellule et ensuite en validant mon programme VBA me sort directement le html avec les données intégrés dans mon html.

Je pense que la solution serait d'ajouter des variables dans mon html qui serait remplacé par les cellules.

Mon html est donc sous la forme d'un txt sur mon pc.

Avez-vous des idées de fonction pour m'aider a réaliser mon code ?

Je vous remercie d'avance,

Cordialement

Tourntsou

Bonjour et

Tu peux utiliser la fonction tableauhtml incluse dans le fichier suivant

.htmlbody = tableauhtml(maPlage) & .htmlbody

Bonjour Steelson merci beaucoup pour ta réponse rapide

En effet la fonction tableauhtml est très efficace. J'ai vu dans ton tableau que les données s'ajoute directement dans excel mais sais-tu comment je peux les remplacer et les exporter dans mon fichier html.txt directement dans les endroits souhaités ?

Encore merci de ton aide !!

Pas tout compris,

Il faudrait que tu joignes un fichier à ta demande.

Pour être un peu plus clair voici mon objectif :

J'ai réalisé le design d'un mail que j'envoie chaque semaine mais le contenu est différent. Le contenu c'est des liens hypertextes. Je possède donc le html de mon mail (qui est très compliqué) que j'envoie et je suis actuellement obligé de changer le corps du html manuellement chaque semaine quand j'envoie les mails pour mettre les nouveaux liens hypertextes à jour.

C'est pourquoi je souhaite rentrer directement mes données (les liens) dans mon excel et que le programme VBA aille directement mettre les données dans mon html au bon endroit. Cela me permettrait de seulement rajouter les données dans Excel et non dans le html.

Est ce plus clair?

Merci d'avance !!

Quelle est ton logiciel de messagerie ? Outlook ?

Le html n'est jamais très compliqué, ou bien il faut le simplifier.

Bonjour Tourntsou,

Vous voulez de l'aide et vous ne transmettez pas d'élément permettant de vous aider.

Il est nécessaire d'avoir soit la source HTML, soit le fichier excel, pour travailler sur du concret.

Vos données contiennent surement des valeurs confidentielles, remplacez les par des valeurs passe-partout et on pourra vous aider plutôt que de perdre son temps à jouer aux devinettes.

On peut facilement obtenir :

<a href="https://forum.excel-pratique.com/posting.php?mode=reply&f=2&t=143557#pr882228">882228</a>

en utilisant en A10 la formule:

=CONCATENER(B10;E10;C10;DROITE(E10;6);D10)

dans laquelle E10 contient le lien

"https://forum.excel-pratique.com/posting.php?mode=reply&f=2&t=143557#pr882228"

En procédant de la sorte, au final, il ne reste plus qu'à copier la colonne A dans le bloc note puis depuis le bloc note dans la source HTML à modifier

Aider nous à vous aider

Bonjour njhub

@Tourntsou

Une première solution toute simple est de faire un copier/coller dans le corps du mail :

Option Explicit
Sub envoi()

Dim messagerie As Object
Dim email As Object
Dim numero As Integer

On Error GoTo erreur

    Set messagerie = CreateObject("Outlook.Application")
    Set email = messagerie.CreateItem(0)
    With email
        .to = ""
        .Subject = "test envoi mail"
    End With

    Range("corpsdumail").Copy
    email.display
    Application.Wait (Now + TimeValue("0:00:01"))
    SendKeys "^v", True
    'Application.CutCopyMode = False

    Set email = Nothing
    Set messagerie = Nothing

Exit Sub

erreur:

    MsgBox "Erreur : " & Err.Number & vbLf & Err.Description

End Sub

Une seconde solution est d'écrire le html en utilisant la fonction décrite ci-dessus

https://forum.excel-pratique.com/viewtopic.php?p=882200#p882200

Option Explicit
Sub envoi()

Dim messagerie As Object
Dim email As Object
Dim numero As Integer

On Error GoTo erreur

    Set messagerie = CreateObject("Outlook.Application")
    Set email = messagerie.CreateItem(0)
    With email
        .to = ""
        .Subject = "test envoi mail"
        .htmlbody = tableauhtml(Range("corpsdumail")) & .htmlbody
        .display
    End With

    Set email = Nothing
    Set messagerie = Nothing

Exit Sub

erreur:

    MsgBox "Erreur : " & Err.Number & vbLf & Err.Description

End Sub
Function tableauhtml(plage As Range) As String
Application.Volatile
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

Je pense que njhub a peut-être aussi d'autres solutions pour faciliter la tâche.

Autre fonction plus élaborée possible, avec couleurs et caractères gras/italiques/soulignés

Function texthtml(cellule As Range)
' le but est d'afficher les caractères accentués par leur code nnn au format html &#nnn; (en réalité tous les codes supérieurs à 127)
Dim i As Double
Dim cel As Range
texthtml = ""
For Each cel In cellule
    ' le but est de récupérer les caractéristiques couleur, souligné, gras et italique du premier caratère et l'appliquer au texte
    texthtml = texthtml & _
        "<FONT COLOR='#" & couleur(cel.Characters(Start:=1, Length:=1).Font.Color) & "'>" & _
        IIf(cel.Characters(Start:=1, Length:=1).Font.Underline <> xlUnderlineStyleNone, "<u>", "") & _
        IIf(cel.Characters(Start:=1, Length:=1).Font.Bold, "<b>", "") & _
        IIf(cel.Characters(Start:=1, Length:=1).Font.Italic, "<i>", "")
    For i = 1 To Len(cel.Value)
        Select Case Asc(Mid(cel.Value, i, 1))
        Case Is = 10
            texthtml = texthtml & "<br/>"
        Case Is = 39
            texthtml = texthtml & "&#" & Application.Trim(Str(Asc(Mid(cel.Value, i, 1)))) & ";"
        Case Is > 127
            texthtml = texthtml & "&#" & Application.Trim(Str(Asc(Mid(cel.Value, i, 1)))) & ";"
        Case Else
            texthtml = texthtml & Mid(cel.Value, i, 1)
        End Select
    Next
    texthtml = texthtml & _
        IIf(cel.Characters(Start:=1, Length:=1).Font.Italic, "</i>", "") & _
        IIf(cel.Characters(Start:=1, Length:=1).Font.Bold, "</b>", "") & _
        IIf(cel.Characters(Start:=1, Length:=1).Font.Underline <> xlUnderlineStyleNone, "</u>", "") & _
        "</font><br/>"
Next cel
End Function

Function couleur(valeur As Double)
    couleur = Application.WorksheetFunction.Dec2Hex(valeur)
    couleur = Right("000000" & couleur, 6)
    couleur = Mid(couleur, 5, 2) + Mid(couleur, 3, 2) + Mid(couleur, 1, 2)
End Function
6text-en-html.xlsm (25.35 Ko)

Bonjour,

Je reprends contact après un déplacement d'une semaine.

Est-ce que tu attends une réponse ? si oui, peux-tu renvoyer les éléments que tu m'avais donnés en mp et si possible en texte (et pas sous forme d'image) ... avec la mise à jour du forum, les mp ont été supprimés (et c'est normal car cela ne doit pas être des archives).

Rechercher des sujets similaires à "remplacer chaine caracteres html"