Page 1 sur 1

Problèmes macro excel pour envoi mail via TB

Publié : 17 juil. 2013, 12:27
par Benadry
Bonjour,

Je suis tout nouveau sur ce forum et la question qui m'anime concerne la réalisation d'une macro Excel permettant l'envoi automatique de mails via Thunderbird.

La macro ci-dessous fonctionne parfaitement, à deux exceptions près

Code : Tout sélectionner

Private Sub Image3_Cliquer()
'Sub SendMail()
Dim destinataire, cc, msg, body, sujet, strcommand, fichierjoint As String

destinataire = "titi.toto@XXX.fr,dede.dada@XXX.fr"
cc = "baba.bibi@XXX.fr,roro.lele@XXX.fr"
sujet = "Relances des indus non notifiés"
 
body = "Bonjour" & "," & vbLf & vbLf & "Sauf erreur de notre part" & ", " & "nous n'avons pas encore reçu la copie de la notification ou de la régularisation des indus concernant votre Centre" & ", " & "mentionnés dans le tableau ci-joint." & vbLf & "Nous vous remercions de nous transmettre ces documents dans les meilleurs délais." & vbLf & vbLf & vbLf & "Bien cordialement." & vbLf & vbLf & vbLf & vbLf & "Pour le Service Comptabilité"

fichierjoint = "G:\CPT\Relances\" & ActiveSheet.Name & " - " & Format(Now, "dd/mm/yyyy") & ".pdf"

strcommand = "C:\Program Files\Mozilla Thunderbird\thunderbird"
strcommand = strcommand & " -compose " & "to='" & destinataire1 & "'"
strcommand = strcommand & "," & "cc='" & cc & "'"
strcommand = strcommand & "," & "subject=" & sujet & ","
strcommand = strcommand & "body=" & body
strcommand = strcommand & "," & "attachment=file:///" & fichierjoint
 
Call Shell(strcommand, vbNormalFocus)

MsgBox strcommand

Debug.Print strcommand

 
End Sub
Voici mes deux problèmes :
1°) le texte du message est tronqué : il s'arrête à la première virgule (en l'occurence : "Bonjour", puis plus rien !). J'ai essayé en remplaçant les , par des ; et ça marche parfaitement, sauf qu'il ne tient pas compte des vbLf.
Ce sont donc les virgules et les passages à la ligne qui posent problème. Par ailleurs, j'ai testé et les "à" n'apparaissent pas non plus.

J'ai aussi essayé de mettre les virgules entre guillemets et ça ne fonctionne pas non plus ! Exemple : body =

Code : Tout sélectionner

"Bonjour" & "," & vbLf & vbLf & "Sauf erreur de notre part" & ", " & "..."
2°) Les pièces jointes sont également tronquées : j'ai essayé en désignant "en dur" le nom du fichier pdf et je n'ai que le premier mot ("Relances") : le nom du fichier est tronqué dès le premier espace. J'ai le même résultat que si j'utilise

Code : Tout sélectionner

" & ActiveSheet.Name & " - " & Format(Now, "dd/mm/yyyy") & ".pdf"
J'ai aussi essayé en renommant mon fichier "Relances.pdf" et, là, ça fonctionne.

J'ai cherché sur de nombreux forums et quand je regarde les macros dont je me suis inspiré, le texte donné en exemple ne fait jamais que quelques mots, sans virgules, ni sauts de ligne. Je n'ai donc pas trouvé de solution à mon problème.

J'ai tenté de passer en CDO, mais je souhaiterais rester avec la macro ci-dessus. Je pense qu'il n'y a pas grand chose à faire pour qu'elle fonctionne parfaitement. Je me suis donc dit que je trouverais peut-être ma réponse dans un forum spécialisé.

Etant novice en VBA, je patauge complètement. Si quelqu'un pouvait m'aider, ce serait très sympathique.

Bien cordialement.

Benadry
Votre Navigateur : Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E

Re: Problèmes macro envoi mail via Thunderbird

Publié : 17 juil. 2013, 13:33
par Benadry
Juste une petite précision dans le code ci-dessus :

Au lieu de

Code : Tout sélectionner

strcommand = strcommand & " -compose " & "to='" & destinataire1 & "'"
Il faut lire

Code : Tout sélectionner

strcommand = strcommand & " -compose " & "to='" & destinataire & "'"
J'ai oublié d'enlever le "1" en postant, mais le problème ne vient pas de là ! :)

Cordialement.
Votre Navigateur : Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E

Re: Problèmes macro envoi mail via Thunderbird

Publié : 17 juil. 2013, 16:24
par Jean-Claude
Bonjour,

Il me semble qu'il manque des apostrophes ( ' ) autour de "body" et autour du nom de fichier. Je pense qu'elles sont nécessaires si dans la string il y a des blancs (et peut-être des virgules).
La bonne syntaxe devrait être :

Code : Tout sélectionner

strcommand = strcommand & "body='" & body & "'"
strcommand = strcommand & "," & "attachment='file:///" & fichierjoint & "'"
NB : à la fin de chaque commande ci-dessus, il y a une apostrophe ( ' ) suivie d'un guillemet ( " ). Il ne peut pas y avoir de blanc entre les deux, sinon cela ne marche pas.
Je n'ai pas eu le temps de tester tout cela.

D'autre part, la virgule sert de séparateur lorsqu'il y a plusieurs valeurs dans un champ (par exemple entre les différents destinataires).
J'en parlais ICI
Je ne sais pas avec certitude comment inclure une virgule dans un champ de manière à ce qu'il ne soit pas considéré comme séparateur. Peut-être le fait de les inclure dans une chaîne délimitée par des apostrophes devrait suffire. Peut-être existe-t-il un caractère d'échappement. Il faudrait faire quelques tests et/ou recherches sur internet pour cela.

A+
Votre Navigateur : Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36

Re: Problèmes macro envoi mail via Thunderbird

Publié : 17 juil. 2013, 16:55
par Benadry
Re-bonjour le forum, bonjour Jean-Claude,

Je viens de tester ce que vous m'avez donné. C'est fou ce que ça va mieux avec quelques apostrophes en plus !!!

Pour autant, tout n'est pas résolu.

Quand j'ajoute TOUTES les apostrophes, j'ai un message d'alerte :
"Erreur lors de l'ouverture de la fenêtre de rédaction des messages. Veuillez essayer à nouveau".

Par hasard, j'avais d'abord oublié l'apostrophe entre "attachment=" et file et, là, ça allait mieux.

Voici ce que donne le message obtenu alors :
Bonjour, Sauf erreur de notre part, nous n'avons pas encore reçu la copie de la notification ou de la régularisation des indus concernant votre Centre, mentionnés dans le tableau ci-joint. Nous vous remercions de nous transmettre ces documents dans les meilleurs délais. Bien cordialement. Pour le Service Comptabilité,
Le mail est donc affiché intégralement, sans problèmes de virgules. En revanche, il ne va toujours pas à la ligne !

Par ailleurs, le nom du fichier joint n'est plus tronqué, mais il lui manque l'extension pdf. Donc, il est impossible à ouvrir.

Ca va quand même beaucoup mieux. Je sens qu'il doit encore y avoir une ou deux apostrophes qui manquent quelque part !

Si vous savez où, je suis preneur !

Merci encore en tout cas.

A +
Votre Navigateur : Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E

Re: Problèmes macro envoi mail via Thunderbird

Publié : 17 juil. 2013, 17:40
par Jean-Claude
J'ai fait un petit test. J'ai bien les sauts de ligne chez moi. N'as-tu pas oublié l'apostrophe devant le guillemet terminant le premier "Body" ?

Code : Tout sélectionner

"body='" & body & "'"
Par contre, le format de date inclus dans le nom de fichier pose problème sous Windows : les "\" et "/" ne sont pas admis dans un nom de fichier (fais le test en renommant un fichier existant et en essayant d'y mettre un "\" et "/", Windows te montrera les caractères interdits).

A+
Votre Navigateur : Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36

Re: Problèmes macro envoi mail via Thunderbird

Publié : 17 juil. 2013, 18:04
par Benadry
Re-,

Non, je n'ai pas oublié d'apostrophes, j'ai d'ailleurs fait un copier-coller de ton code pour éviter tout problème de ce genre. En tout cas, si ça marche chez toi, ça devrait également marcher chez moi !

Peut-être as-tu une idée ?

Pour le second point, voici un exemple de nom de fichier :
Relances - Centre C - 16_07_2013.pdf
.
J'ai donc rectifié le nom de fichier dans la macro ainsi :
ActiveSheet.Name & " - " & Format(Now, "dd_mm_yyyy") & ".pdf"
.

Pour autant, j'ai toujours le même problème : il me met en pièce jointe le fichier "Relances" et rien de plus !

Je pense qu'il y a encore une question de ' ou de & ou de " quelque part !

Merci beaucoup en tout cas pour ton aide.

Si tu penses à autre chose, je suis preneur !

Cordialement.
Votre Navigateur : Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E

Re: Problèmes macro envoi mail via Thunderbird

Publié : 17 juil. 2013, 21:11
par Jean-Claude
Bonjour,

Voici une solution que j'ai testée et qui marche (Sur mon Thunderbird, à la maison, le saut de ligne ne fonctionnait pas non plus :o ).
J'ai remanié ton code en y faisant les modifications suivantes :

- le nom du fichier avec un espace n'est pas reconnu par Thunderbird. J'ai enlevé l'espace avant et après dans le "-" après "ActiveSheet.Name". Veille donc à ne pas avoir d'espace dans le nom de ton fichier résultat qui devra être du format, par exemple : G:\CPT\Relances\Sheet1-17_07_2013.pdf

- j'ai mis des apostrophes autour de "sujet" (je ne pense pas que c'était absolument nécessaire, sauf si un jour tu veux y mettre des virgules :D )

- le saut de ligne ne passe pas dans du texte simple. Il faut utiliser le saut de ligne HTML qui est <br>, mais comme l'utilisateur peut choisir d'écrire en texte simple au lieu de HTML, il faut forcer la syntaxe HTML en ajoutant le paramètre "format='1'" et aussi en ajoutant "<HTML><BODY>" en début du body et </BODY></HTML> en fin de body. Ces ajouts ne seront bien sûr pas visibles dans le texte affiché.

C'est expliqué ICI

- j'ai découpé la string body et ai ajouté le caractère de liaison "_" pour améliorer la lisibilité

Code : Tout sélectionner

Private Sub Image3_Cliquer()
    'Sub SendMail()
    Dim destinataire, cc, msg, body, sujet, strcommand, fichierjoint As String

    destinataire = "titi.toto@XXX.fr,dede.dada@XXX.fr"
    cc = "baba.bibi@XXX.fr,roro.lele@XXX.fr"
    sujet = "Relances des indus non notifiés"
     
    body = "<HTML><BODY>Bonjour" & "," & "<br>" & "<br>" & "Sauf erreur de notre part" & ", " & _
    "nous n'avons pas encore reçu la copie de la notification ou de la régularisation des indus concernant votre Centre" & ", " & _
    "mentionnés dans le tableau ci-joint." & "<br>" & "Nous vous remercions de nous transmettre ces documents dans les meilleurs délais." & _
    "<br>" & "<br>" & "<br>" & "Bien cordialement." & "<br>" & "<br>" & "<br>" & "<br>" & "Pour le Service Comptabilité</BODY></HTML>"

    fichierjoint = "G:\CPT\Relances\" & ActiveSheet.Name & "-" & Format(Now, "dd_mm_yyyy") & ".pdf"

    strcommand = "C:\Program Files\Mozilla Thunderbird\thunderbird"
    strcommand = strcommand & " -compose " & "to='" & destinataire & "'"
    strcommand = strcommand & "," & "cc='" & cc & "'"
    strcommand = strcommand & "," & "subject='" & sujet & "',format='1',"
    strcommand = strcommand & "body='" & body & "'"
    strcommand = strcommand & "," & "attachment='file:///" & fichierjoint & "'"
     
    Call Shell(strcommand, vbNormalFocus)

    MsgBox strcommand

    Debug.Print strcommand

End Sub
A+
Votre Navigateur : Mozilla/5.0 (Windows NT 6.1; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0

Re: Problèmes macro envoi mail via Thunderbird

Publié : 18 juil. 2013, 07:52
par Benadry
Bonjour Jean-Claude et le forum,

Je viens de tester ta solution et ça marche parfaitement.

Je te remercie beaucoup, ça m'évite de chercher pendant des heures et de tourner en rond.

Si j'osais, j'aurais encore une question pour "parfaire" le tout.

Après "Pour le Service Comptabilité", j'aimerais mettre le nom de la personne qui envoie le mail. Je trouve que ça fait plus personnel. J'ai essayé avec un & "from", et avec & from dans le corps du message et ça ne fonctionne pas.

Si tu as une solution ...

Merci encore en tout cas.

Bien cordialement.

Benadry.
Votre Navigateur : Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E

Re: Problèmes macro envoi mail via Thunderbird

Publié : 18 juil. 2013, 10:29
par Jean-Claude
Bonjour,

Il n'y a pas de paramètre "From" dans la ligne de commande. S'il existait, il ne pourrait contenir qu'une adresse d'expédition, pas un nom. Il y a bien moyen de sélectionner une adresse d' expédition apparemment via le paramètre "preselectid", comme indiqué ICI. Ce qui, si je comprends bien, correspond aux numéros des identités visibles dans la rubrique "De" de l'écran de rédaction d'un mail, et peut varier d'un PC à l'autre.
Mais je pense que cela ne correspond pas à ce que tu recherches, car l'identité Thunderbird est une adresse mail, pas un nom.

Si tu veux mettre un nom en clair, il faudra l'ajouter dans la variable "body". Mais tel quel, le nom sera fixe.
Pour ajouter un nom variable, correspondant à l'utilisateur du moment, il faudrait voir si dans Excel tu peux demander via une popup à l'utilisateur d'introduire son nom et sauvegarder cela dans une variable Excel que tu ajouterais à la variable "body", car il n'y a nulle part, à ma connaissance, de variable système sur un PC contenant le nom en clair de l'utilisateur connecté.
Mais le plus simple à mon avis, serait de laisser l'utilisateur ajouter lui-même son nom dans le texte affiché avant l'envoi.

A+
Votre Navigateur : Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36

Re: Problèmes macro envoi mail via Thunderbird

Publié : 18 juil. 2013, 12:15
par Benadry
Rebonjour,

Je vais tester ce dont tu m'as parlé, mais le plus simple sera peut-être, effectivement, de laisser l'expéditeur signer !

Merci encore.

Cordialement.
Votre Navigateur : Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E

Re: Problèmes macro envoi mail via Thunderbird

Publié : 22 juil. 2015, 10:28
par Souss
Bonjour,

Je déterre ce sujet puisqu'il redevient d'actualité pour mon problème !
J'ai le même problème que Benadry mais concernant le caractères spéciaux (comme " à ") qui ne sont pas pris en compte dans la commande shell, ce qui fait que le nom du fichier joint n'est plus bon et donc il ne le trouve pas ! J'ai également essayé d'enlever les cotes simple " ' " pour que les caractères spéciaux soient pris en compte mais ça ne change rien... c'est comme si nativement la commande shell supprimait le "à ". En sachant que ma variable "nom_fic" diffère selon le fichier.

Avez-vous une idée ? merci

Code : Tout sélectionner

Sub EnvoiMail2()

Dim commande As String, nom_fic As String, destinataire As String, Objet As String, Corps As String

nom_fic = "Fichier à tester"
destinataire = "toto@gmail.com"
Objet = "Test"
Corps = "<HTML><BODY>Bonjour,<br><br>Veuillez trouver ci-joint le fichier " & nom_fic & _
                    "<br><br> Cordialement, </BODY></HTML>"


commande = "C:\Program Files (x86)\Mozilla Thunderbird\thunderbird"
commande = commande & " -compose " & "to='" & destinataire & "'"
commande = commande & "," & "subject='" & Objet & "',format='1'" ' on force le HTML avec le format=1
commande = commande & "," & "body='" & Corps & "'"
commande = commande & "," & "attachment='C:\" & nom_fic & "'"

Call Shell(commande, vbNormalFocus)

Debug.Print commande
 
End Sub