Problème avec les sauts de ligne sous VBA pr mail Outlook

Bonjour à tous,

Une petite introduction auparavent de vous expliquer mon pb.

J'ai demandé à un amis de me développer une macro en VBA pour classer mes mail et vu le gain de temps que j'ai pu avoir, je me suis mis progressivement au VBA. C'est donc mon premier post sur ce site qui devient ma référence pour les macro que je développe actuellement.

Voici mon problème :

Dans une macro que j'ai développé pour faire un mail outlook à partir de données présentes sur une feuille Excel, j'ai un problème sur les retour à la ligne. Sachez que j'ai déjà essayé : Chr(10), Chr(13), vbNewLine, vbCr, vbLf, vbCrLf et rien ne marche. En effet, j'ai l'impression que dés qu'il y a beaucoup de texte sur la ligne, quand on change de ligne à la fin de celle-ci, il créé une interligne supplémentaire qu'on ne peut ni selectionner ni supprimer.

Si vous appliquer la macro ci dessous, vous pourrez vous appercevoir de mon problème :

Sub PbEnvoyerMail()

    Dim OutApp As Object
    Dim OutMail As Object

    Dim Dest As String
    Dim CopieDest As String
    Dim Message As String

Dest = "dest@wana.fr"
CopieDest = "bibi@aol.fr"

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

Message3 = "Ligne 1 avec 2 retour à la ligne derriere mais en fait ca fait une interligne, à la limite, pas de pb" & Chr(10) _
            & Chr(10) _
            & "Ligne 2 : OK" & Chr(10) _
            & "Ligne 3 : OK" & Chr(10) _
            & "Ligne 4 : OK" & Chr(10) _
            & "Ligne 5 : OK" & Chr(10) _
            & "Ligne 6 avec 2 retour à la ligne derriere mais en fait ca fait une interligne, à la limite, pas de pb" & Chr(10) _
            & Chr(10) _
            & "Ligne 7 : OK" & Chr(10) _
            & "Ligne 8 avec UN SEUL retour à la ligne derriere mais en fait ca fait une interligne. Je pense que c'est dû au fait qu'il y a beaucoup de choses sur cette ligne mais comment y palier ?" & Chr(10) _
            & "Ligne 9 : OK" & Chr(10) _
            & "Ligne 10 : OK" & Chr(10) _
            & Chr(10) _
            & "La signature n'apparait pas. Pourquoi ?" & Chr(10) _
            & Chr(10) _
            & Chr(10)

    With OutMail
        .To = Dest
        .CC = CopieDest
        .BCC = ""
        .Subject = "Ca marche pas les retour à la ligne"
        .Body = Message3
        .Display
    End With

End Sub

Merci d'avance pour votre aide !

Bonjour Bensecu

Voici un code qui pourrait peut-être te convenir

Sub PbEnvoyerMail()
  Dim OutApp As Object
  Dim OutMail As Object
  Dim Dest As String
  Dim CopieDest As String
  Dim sTmp As String, SigString As String
  Dim Signature As String
  Dim Strbody As String

  Dest = "destinataire@fai.fr"
  CopieDest = "copie@fai.fr"

  Set OutApp = CreateObject("Outlook.Application")
  Set OutMail = OutApp.CreateItem(0)

  Strbody = "Ligne 1 avec 2 retour à la ligne derriere mais en fait ca fait une interligne, à la limite, pas de pb <br>" _
          & "<br>" _
          & "<br>" _
          & "Ligne 2 : OK" _
          & "Ligne 3 : OK<br>" _
          & "Ligne 4 : OK<br>" _
          & "Ligne 5 : OK<br>" _
          & "Ligne 6 avec 2 retour à la ligne derriere mais en fait ca fait une interligne, à la limite, pas de pb <br>" _
          & "<br>" _
          & "<br>" _
          & "Ligne 7 : OK" & "<br>" _
          & "Ligne 8 avec UN SEUL retour à la ligne derriere mais en fait ca fait une interligne. Je pense que c'est dû au fait qu'il y a beaucoup de choses sur cette ligne mais comment y palier ? <br>" _
          & "<br>" _
          & "Ligne 9 : OK" & "<br>" _
          & "Ligne 10 : OK" & "<br>" _
          & "<br>"

  SigString = Environ("appdata") & "\Microsoft\Signatures\*.htm"
  If Dir(SigString) <> "" Then
    sTmp = Environ("appdata") & "\Microsoft\Signatures\" & Dir(SigString)
    Signature = GetBoiler(sTmp)
  Else
    Signature = ""
  End If

  With OutMail
    .To = Dest
    .CC = CopieDest
    .BCC = ""
    .Subject = "Ca marche pas les retour à la ligne"
    .HTMLBody = Strbody & "<br>" & Signature
    .Display
  End With

End Sub

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

A+

C'est ça, ça marche !!!

Merci à toi.

Le plus dur qd on est novice c'est en premier que ça fonctionne. Quand on se fait aider, forcément ça aide ; mais aprés c'est surtout de savoir déchiffrer le langage et surtout de découvrir comment ça fonctionne...

Bonjour,

Dans le code donné, on utilise essentiellement des codes HTML

"<br>" = break = retour à la ligne en langage HTML

SigString = Environ("appdata") & "\Microsoft\Signatures\*.htm"

Permet d'aller récupérer le chemin d'accès de la signature HTML de l'utilisateur

Signature = GetBoiler(sTmp)

Permet de mettre "en mémoire" cette signature pour l'intégrer après dans le mail

N'hésite pas à revenir vers nous si besoin

A+

Oui j'ai vu que tu avais mis le texte en HTML du coup j'ai fait des recherches pour le mettre en forme : police, couleur, taille, centré, lignes horizontales, ...

Donc pour le texte, pas de problème.

Par contre concernant ma signature j'ai 2 problèmes :

1. J'en ai plusieurs d'enregistré et du coup, il me met la plus vieille par défaut dans le mail ;

2. Il n'intégre pas l'image de la signature (le logo de la société).

Pour y pallier, j'ai fait l'impasse sur le logo et j'ai directement intégré ma signature dans le HTML du texte.

Et merci encore pour toutes ces explications... !!!

Re,

BenSecu a écrit :

Par contre concernant ma signature j'ai 2 problèmes :

1. J'en ai plusieurs d'enregistré et du coup, il me met la plus vieille par défaut dans le mail ;

2. Il n'intégre pas l'image de la signature (le logo de la société).

Oui, car dans le code

SigString = Environ("appdata") & "\Microsoft\Signatures\*.htm"

Il recherche un fichier nommé "*.HTM", on peut tout à fait modifier la recherche par "BenSecu*.htm"

BenSecu a écrit :

Et merci encore pour toutes ces explications... !!!

Un MERCI fait toujours plaisir, mais de rien

A+

OK je vais tester. Il doit me prendre la plus ancienne car il y a plusieurs signatures en HTM...

Du coup j'ai refait un autre programme identique pour un autre fichier mais celui-ci doit me générer 3 mails différents.

J'ai eu aucun problème pour générer le premier (jusqu'à End With), par contre aprés avoir développé la deuxieme partie pour le second mail, je m'apperçois qu'il ne génère plus le premier... (???) En fait je ne sais pas comment on fait pour travailler avec la meme fonction mais avec des parametres différents pour le second mail. Enchainer les 2 sans perturber le 2ème...

Explication :

Sub PBenvoi3mails()

    Dim OutApp As Object
    Dim OutMail As Object

    Dim Dest As String
    Dim CopieDest As String
    Dim Message As String

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

Dest = "mail1@fai.fr"
CopieDest = "compimail1@fai.fr"
Message = "corps mail 1"

    With OutMail
        .To = Dest
        .CC = CopieDest
        .BCC = ""
        .Subject = "Mail 1"
        .HTMLBody = Message
        .Display
    End With

Dest2 = "mail2@fai.fr"
CopieDest2 = "compimail2@fai.fr"
Message2 = "corps mail 2"

    With OutMail
        .To = Dest2
        .CC = CopieDest2
        .BCC = ""
        .Subject = "Mail 2"
        .HTMLBody = Message2
        .Display
    End With

Dest3 = "mail3@fai.fr"
CopieDest3 = "compimail3@fai.fr"
Message3 = "corps mail 3"

    With OutMail
        .To = Dest3
        .CC = CopieDest3
        .BCC = ""
        .Subject = "Mail 3"
        .HTMLBody = Message3
        .Display
    End With

End Sub

Enchainer les 2 sans perturber le 1er...

désolé !

Rechercher des sujets similaires à "probleme sauts ligne vba mail outlook"