IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Envoi d'emails HTML avec variables qui contiennent des diacritiques [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Septembre 2019
    Messages : 7
    Par défaut Envoi d'emails HTML avec variables qui contiennent des diacritiques
    Bonjour le Forum,

    J'ai créé une application VBA qui envoit des emails automatiquement avec un compte gmail.
    Dans le corps de l'email, en HTML, quand j'ai p.ex. un é, j'écris é
    Cela marche très bien.
    Mais dans mon corps d'email, j'utilise aussi des variables de type string, p.ex. une variable SpecialPrenoms qui peut contenir "Frédéric"
    Quand j'ai un accent dans une variable, et qu'on va voir dans les emails reçus:
    --> si le destinataire a une boîte gmail, pas de problème tous les accents y sont bien
    --> si le destinataire a une boîte Outlook : les accents qui se trouvent dans les variables ne s'affichent pas. Ceux qui se trouvent hors des variables s'affichent bien.

    Comment puis-je résoudre cela ?
    Voici un extrait de mon code...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    '(...)
     
    dim body as variant
    dim SpecialPrenoms as string
     
    '(...)
     
    for each c in Range("Q4:Q500")
        SpecialPrenom = c.offset(0,9).value 
        body = "<p><strong>Assurance</strong><br />" & SpecialPrenoms & "&nbsp;:&nbsp;tu es ext&eacute;rieur au (...)</p>"
    next C
     
    '(...)

    Et ma macro d'envoi, récupérée du forum :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    Public Sub MailEnvoi(Serveur, Identify, User, PassWord, Port, Delay, Expediteur, Dest, DestEnCopy, BCC, Objet, Body, Pj, Optional factice As String)
    ' macro pour envoyer les mails
     
    Dim msg
    Dim Conf
    Dim Config
    Dim ess
    Dim splitPj
    Dim IsplitPj
    Set msg = CreateObject("CDO.Message") 'pour la configuration du message
    Set Conf = CreateObject("CDO.Configuration") 'pour la configuration de l'envoi
    Dim strHTML
     
    Set Config = Conf.Fields
     
    ' Configuration des parametres d'envoi
    '(SMTP - Identification - SSL - Password - Nom Utilisateur - Adresse messagerie)
    With Config
    If Identify = True Then
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = User
        .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = PassWord
    End If
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = Port
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = Serveur
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = Delay
        .Update
     
    End With
     
     
    'Configuration du message
    'If E_mail.Sign.Value = Checked Then Convert ServeurFrm.SignTXT, ServeurFrm.Text1
     
    With msg
        Set .Configuration = Conf
        .From = Expediteur
        .To = Dest
        .CC = DestEnCopy
        .BCC = BCC
        .Subject = Objet
        .HTMLBody = Body 
     
        If Pj <> "" Then
            splitPj = Split(Pj & ";", ";")
            For IsplitPj = 0 To UBound(splitPj)
               If Trim("" & splitPj(IsplitPj)) <> "" Then
                   .AddAttachment Trim("" & splitPj(IsplitPj))
               End If
            Next
        End If
     
        If Dest <> "" Then .Send 'envoi du message
     
    End With
     
     
    ' reinitialisation des variables
    Set msg = Nothing
    Set Conf = Nothing
    Set Config = Nothing
     
    End Sub

    Merci d'avance pour votre aide !

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Bonjour.

    Comme tu as fait la conversion de tes accents dans ton texte, il faut le faire sur ceux de la variable.

    Ici du code qui fait cela :

    https://www.developpez.net/forums/d1...-entites-html/

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre du Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Septembre 2019
    Messages : 7
    Par défaut
    Bonjour, et merci pour le tuyau. On progresse, mais ce n'est pas encore la solution complète


    La fonction marche très bien, je la remets ici, comme ça tout le monde peut la voir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Sub test()
    MsgBox TxtHtml("Welcome & Enjoy")
    End Sub
     
    Function TxtHtml(T As String) As String
    Dim Txt
    Dim Htm
    Dim I As Long
    TxtHtml = T
    Txt = "Á$á$É$é$Í$í$Ó$ó$Ú$ú$Ý$ý$À$à$È$è$Ì$ì$Ò$ò$Ù$ù$Â$â$Ê$ê$Î$î$Ô$ô$Û$û$Ä$ä$Ë$ë$Ï$ï$Ö$ö$Ü$ü$?$ÿ$Ã$ã$Õ$õ$Ç$ç$" & vbCrLf & "$&"
    Htm = "&Aacute;$&aacute;$&Eacute;$&eacute;$&Iacute;$&iacute;$&Oacute;$&oacute;$&Uacute;$&uacute;$&Yacute;$&yacute;$&Agrave;$&agrave;$&Egrave;$&egrave;$&Igrave;$&igrave;"
    Htm = Htm & "$&Ograve;$&ograve;$&Ugrave;$&ugrave;$&Acirc;$&acirc;$&Ecirc;$&ecirc;$&Icirc;$&icirc;$&Ocirc;$&ocirc;$&Ucirc;$&ucirc;$&Auml;$&auml;$&Euml;$&euml;"
    Htm = Htm & "$&Ouml;$&ouml;$&Uuml;$&uuml;$&Yuml;$&yuml;$&Atilde;$&atilde;$&Itilde;$&itilde;$&Otilde;$&otilde;$&Ccedil;$&ccedil;$<br>;$&amp;"
    Txt = Split(Txt, "$")
    Htm = Split(Htm, "$")
    For I = 0 To UBound(Txt)
    TxtHtml = Replace(TxtHtml, Txt(I), Htm(I), 1, compare:=vbBinaryCompare)
    Next
    End Function
    Et j'ai adapté l'affectation de ma variable SpecialPrenoms comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    '(...)
     
    dim body as variant
    dim SpecialPrenoms as string
     
    '(...)
     
    for each c in Range("Q4:Q500")
        SpecialPrenom = TxtHtml(c.offset(0,9).value) 
        body = "<p><strong>Assurance</strong><br />" & SpecialPrenoms & "&nbsp;:&nbsp;tu es ext&eacute;rieur au (...)</p>"
    next C
     
    '(...)
    Et maintenant à la fois dans la boîte Gmail comme dans la boîte Outlook, je reçois:
    "Assurances
    Fr&eacute;d&eacute;ric : tu es extérieur au (...)"

    Avant, je recevais:
    "Assurances
    Frdric : tu es extérieur au (...)"
    Mais uniquement dans Outlook, dans gmail cela arrivait impeccablement.

    Je me demande si je ne dois pas mettre ma variable dans un tag HTML quelconque... ?
    Ou alors c'est la déclaration de ma variable qui ne doit pas être un simple string, mais un stringHTML ou qqch comme ça ??

  4. #4
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 579
    Par défaut
    Bonjour,
    Pour info si tu veux gérer le & il faut qu'il soit le premier dans le tableau et pas après le vbcrlf car des & tu en mets plein par définition.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    vbCrLf & "$&"
     
    Txt = "&$Á$á$É$
    Code initiale :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Function TxtHtml(T As String) As String
    Dim Txt
    Dim Htm
    Dim I As Long
    TxtHtml = T
    Txt = "Á$á$É$é$Í$í$Ó$ó$Ú$ú$Ý$ý$À$à$È$è$Ì$ì$Ò$ò$Ù$ù$Â$â$Ê$ê$Î$î$Ô$ô$Û$û$Ä$ä$Ë$ë$Ï$ï$Ö$ö$Ü$ü$Ÿ$ÿ$Ã$ã$Õ$õ$Ç$ç$ $" & vbCrLf
    Htm = "&Aacute;$&aacute;$&Eacute;$&eacute;$&Iacute;$&iacute;$&Oacute;$&oacute;$&Uacute;$&uacute;$&Yacute;$&yacute;$&Agrave;$&agrave;$&Egrave;$&egrave;$&Igrave;$&igrave;"
    Htm = Htm & "$&Ograve;$&ograve;$&Ugrave;$&ugrave;$&Acirc;$&acirc;$&Ecirc;$&ecirc;$&Icirc;$&icirc;$&Ocirc;$&ocirc;$&Ucirc;$&ucirc;$&Auml;$&auml;$&Euml;$&euml;"
    Htm = Htm & "$&Ouml;$&ouml;$&Uuml;$&uuml;$&Yuml;$&yuml;$&Atilde;$&atilde;$&Itilde;$&itilde;$&Otilde;$&otilde;$&Ccedil;$&ccedil;$&nbsp;$<br>"
    Txt = Split(Txt, "$")
    Htm = Split(Htm, "$")
    For I = 0 To UBound(Txt)
    TxtHtml = Replace(TxtHtml, Txt(I), Htm(I), 1, compare:=vbBinaryCompare)
    Next
    End Function

  5. #5
    Membre du Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Septembre 2019
    Messages : 7
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    Bonjour,
    Pour info si tu veux gérer le & il faut qu'il soit le premier dans le tableau et pas après le vbcrlf car des & tu en mets plein par définition.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    vbCrLf & "$&"
     
    Txt = "&$Á$á$É$
    Oui, c'est déjà une correction, mais ce n'est pas ça qui m'embête vraiment pour le moment. Ce sont surtout les accents que je voudrais résoudre... et j'ai beau relire, je ne comprends pas ce qu'il me manque

  6. #6
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 579
    Par défaut
    Je t'es remis la fonction dans le poste précédent !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Function TxtHtml(T As String) As String
    Dim Txt
    Dim Htm
    Dim I As Long
    TxtHtml = T
    Txt = "&$Á$á$É$é$Í$í$Ó$ó$Ú$ú$Ý$ý$À$à$È$è$Ì$ì$Ò$ò$Ù$ù$Â$â$Ê$ê$Î$î$Ô$ô$Û$û$Ä$ä$Ë$ë$Ï$ï$Ö$ö$Ü$ü$Ÿ$ÿ$Ã$ã$Õ$õ$Ç$ç$ $" & vbCrLf
    Htm = "&amp;$&Aacute;$&aacute;$&Eacute;$&eacute;$&Iacute;$&iacute;$&Oacute;$&oacute;$&Uacute;$&uacute;$&Yacute;$&yacute;$&Agrave;$&agrave;$&Egrave;$&egrave;$&Igrave;$&igrave;"
    Htm = Htm & "$&Ograve;$&ograve;$&Ugrave;$&ugrave;$&Acirc;$&acirc;$&Ecirc;$&ecirc;$&Icirc;$&icirc;$&Ocirc;$&ocirc;$&Ucirc;$&ucirc;$&Auml;$&auml;$&Euml;$&euml;"
    Htm = Htm & "$&Ouml;$&ouml;$&Uuml;$&uuml;$&Yuml;$&yuml;$&Atilde;$&atilde;$&Itilde;$&itilde;$&Otilde;$&otilde;$&Ccedil;$&ccedil;$&nbsp;$<br>"
    Txt = Split(Txt, "$")
    Htm = Split(Htm, "$")
    For I = 0 To UBound(Txt)
    TxtHtml = Replace(TxtHtml, Txt(I), Htm(I), 1, compare:=vbBinaryCompare)
    Next
    End Function

  7. #7
    Membre du Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Septembre 2019
    Messages : 7
    Par défaut
    Super, cela fonctionne du tonnerre en effet !
    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 17/06/2015, 15h06
  2. Envoi d'email avec variables
    Par RR9151 dans le forum Langage
    Réponses: 2
    Dernier message: 14/08/2013, 15h24
  3. Réponses: 7
    Dernier message: 04/09/2010, 12h51
  4. Envoie d'email avec le TIdSMTP + TGauge
    Par Teufa dans le forum Web & réseau
    Réponses: 5
    Dernier message: 10/08/2005, 14h23
  5. Envoie de EMail avec un formulaire
    Par LibrairieSI dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 28/02/2005, 14h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo