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é !