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 :

Problème macro envoi mail automatique [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Points : 48
    Points
    48
    Par défaut Problème macro envoi mail automatique
    Bonjour,

    J'ai adapté une macro trouvée sur un forum pour envoyer des mails automatiquement.

    Voici le code

    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
    Sub EnvoiMail()
    Dim destinataire, cc, body, sujet, strcommand, fichierjoint As String
     
    destinataire1 = "tota.tata@XXX.fr,titi.toto@XXX.fr"
    cc = "tutu.tete@XXX.fr,tata.tutu@XXX.fr"
    sujet = "Relances"
     
    body = "Bonjour," & vbLf & "A ce jour, et sauf erreur de notre part, nous n'avons toujours pas reçu la copie de la notification des dettes 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 & "Cordialement." & vbLf & vbLf & vbLf & vbLf & "Le Service Comptabilité"
    fichierjoint = "G:\CPT\Suivi des Créances\" & 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 & ","
    strcommand = strcommand & "body=" & body
    strcommand = strcommand & "," & "attachment=file:///" & fichierjoint
     
     
    Call Shell(strcommand, vbNormalFocus)
     
    End Sub
    Tout fonctionne parfaitement, à deux exceptions près :

    1°) dans le mail, le message s'arrête à "Bonjour". En faisant des essais, je me suis rendu compte que si je supprimais toutes les virgules, le message était copié en entier, mais sans aller à la ligne ! En clair, il s'arrête sur les virgules et ne tient pas compte des vbLf.

    2°) Le nom du fichier varie en fonction du centre (qui donne son nom à la feuille) et de la date du jour. Le nom du fichier joint est donc
    fichierjoint = "G:\CPT\Suivi des Créances\" & ActiveSheet.Name & " - " & Format(Now, "dd/mm/yyyy") & ".pdf"
    A priori, la syntaxe est bonne puisque je me sers du même code pour donner un nom au fichier pdf que je génère.
    Or, ça ne marche pas. Un fichier est bien joint, mais il ne comporte que le premier mot du nom de la feuille active et pas d'extension (Relances, en l'occurrence, sans rien de plus).

    Quelqu'un a-t-il une idée pour régler ces deux problèmes ?

    Merci d'avance.

    Cordialement.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 611
    Points : 34 291
    Points
    34 291
    Par défaut
    Salut,

    si tu passes par la commande batch, la chaîne de caractères ne peut pas se passer sans guillemets

    Regarde le contenu de ta commande
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre du Club
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Points : 48
    Points
    48
    Par défaut
    Rebonjour,

    Excuse-moi, mais je n'ai pas du tout l'habitude des macros.

    Je n'ai pas compris ce que tu m'as dit.

    Comment puis-je regarder le contenu de la commande ? J'ai tapé ton code dans ma macro et il ne se passe rien.

    Désolé pour mes lacunes !

    Cordialement.

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 611
    Points : 34 291
    Points
    34 291
    Par défaut
    La fonction Debug.Print affiche le paramètre que tu lui passes dans la fenêtre d'exécution, dans ton environnement VBE

    Si tu veux tu peux remplacer le DEbug.Print par un MsgBox
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre du Club
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Points : 48
    Points
    48
    Par défaut
    Rebonjour,


    Désolé de ne pas avoir répondu plus tôt, mais j'étais sur autre chose.

    J'ai fait comme tu m'as dit et voilà le résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    C:\Program Files\Mozilla Thunderbird\thunderbird -compose to='XXX@YYY.fr,',cc='ZZZ@YYY.fr,',subject=Relances des indus non notifiés,body=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.
     
     
     
    Le Service Comptabilité,attachment=file:///G:\CPT\Activités service compta\Relances\Relances - centre B - 16/07/2013.pdf
    Donc, a priori, quand je regarde dans la fenêtre d'exécution, c'est bon ! Comment puis-je donc résoudre mon problème ?

    Cordialement.

  6. #6
    Membre du Club
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Points : 48
    Points
    48
    Par défaut
    Re-,

    J'ai aussi essayé de voir ce que ça donnait en introduisant, en fin de code, une msgbox (MsgBox strcommand en l'occurrence) et tout apparaît correctement :
    - le texte n'est pas tronqué ;
    - la pièce jointe apparaît bien telle qu'elle doit être.

    Je ne sais pas d'où vient mon problème.

    Quand je me réfère à des posts précédents (dont je me suis inspiré, par exemple : http://www.developpez.net/forums/d73...c-thunderbird/) et je ne vois pas ce qui peut clocher chez moi !

    A vous lire.

    Cordialement.

  7. #7
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 214
    Points : 522
    Points
    522
    Par défaut
    Bonjour,
    As tu jeté un oeil sur le code que j'ai mis en ligne ?
    Celà pourras peut etre d'aider .

    http://www.developpez.net/forums/d13...ouvre-du-mois/

  8. #8
    Membre du Club
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Points : 48
    Points
    48
    Par défaut
    Bonjour Graphikris et bonjour le forum,


    Je te remercie pour ta proposition.

    J'y ai regardé, mais, a priori, je me vois mal changer tout mon code juste pour un petit "truc", même si c'est très gênant. Je ne le ferai qu'en dernière extrémité.

    Concernant le texte qui s'arrête à la première virgule, 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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    body = "Bonjour" & "," & vbLf & vbLf & "Sauf erreur de notre part" & ", " & "..."
    Dans les forums que j'ai visités, et qui reprennent la même macro, je n'ai pas trouvé trace de texte long comme celui que je veux mettre. Ce ne sont toujours que quelques mots, sans virgules, ni sauts de ligne. Je ne peux donc pas comparer.

    Je répète que la msgbox que j'ai introduite "sort" le code correctement !

    Peut-être y a-t-il une référence à cocher dans VBA Project ?


    Si quelqu'un a une solution, je suis preneur. Je voudrais mettre la macro en place pour mes collègues le plus vite possible et c'est dommage de butter sur ça !

    Pour les pièces jointes, j'ai toujours le même problème !
    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. Donc la syntaxe utilisée est bonne ! J'ai aussi essayé en renommant mon fichier "Relances.pdf" et, là, ça fonctionne ! Voilà les problèmes isolés. Je ne sais pas si ça dira quelque chose à quelqu'un !

    Merci d'avance.

  9. #9
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 611
    Points : 34 291
    Points
    34 291
    Par défaut
    Salut,

    est-ce qu'une alternative par CDO ferait l'affaire ?

    http://excel.developpez.com/faq/?pag...geCellulesMail

    Si tu veux passer par du batch, tu peux voir si les pistes proposées dans ce tuto te conviendraient :
    http://jpcheck.developpez.com/tutori...ge-parametres/
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  10. #10
    Invité
    Invité(e)
    Par défaut Bonjour,
    Citation Envoyé par jpcheck Voir le message
    Salut,

    est-ce qu'une alternative par CDO ferait l'affaire ?

    http://excel.developpez.com/faq/?pag...geCellulesMail

    Si tu veux passer par du batch, tu peux voir si les pistes proposées dans ce tuto te conviendraient :
    http://jpcheck.developpez.com/tutori...ge-parametres/
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    Sub test()
     
     
    Const cdoAnonymous = 0 'Do not authenticate
    Const cdoBasic = 1 'basic (clear-text) authentication
    Const cdoNTLM = 2 'NTLM
    Const SSL = False
    'Delivery Status Notifications
    Const cdoDSNDefault = 0 'None
    Const cdoDSNNever = 1 'None
    Const cdoDSNFailure = 2 'Failure
    Const cdoDSNSuccess = 4 'Success
    Const cdoDSNDelay = 8 'Delay
    Const cdoDSNSuccessFailOrDelay = 14 'Success, failure or delay
     
    Dim Serveur
    Dim User
    Dim PassWord
    Dim Por
    Dim Delay
    Dim Expediteur
    Dim Dest
    Dim DestEnCopy
    Dim DestEnCopyCaher
    Dim Objet
    Dim Body
    Dim Pj
    Serveur = "MyServeur"
    User = "MyUser"
    PassWord = "MyPassWord"
    Port = 25
    Delay = 10
    Expediteur = "MyExpediteur@MyEbergeur.fr"
    Dest = "MyDest@MyEbergeur.fr"
    DestEnCopy = "MyDestEnCopy@MyEbergeur.fr"
    DestEnCopyCaher = "MyDestEnCopyCaher@MyEbergeur.fr"
    Objet = "Je te parle de:"
    Body = "Je vous parle d’un temps que les moins de vingt  ans ne peuvent pas connaître"
    Pj = ""
    MailEnvoi Serveur, cdoAnonymous, SSL, User, PassWord, Port, Delay, cdoDSNDefault, Expediteur, Dest, DestEnCopy, DestEnCopyCaher, Objet, Body, Pj
    End Sub
    '**************************************************************************************************************************************************************************************************************
    Public Sub MailEnvoi(Serveur, Identify, SSL, User, PassWord, Port, Delay, cdoDSN, Expediteur, Dest, DestEnCopy, DestEnCopyCaher, Objet, Body, Pj)
    ' sub pour envoyer les mails
    Dim msg
    Dim Conf
    Dim Config
    Dim splitPj
    Dim IsplitPj
    Dim schema
     
    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)
    schema = "http://schemas.microsoft.com/cdo/configuration/" 'smtpusessl
    With Config
     
    If Identify <> 0 Then
        .Item(schema & "smtpusessl") = SSL
        .Item(schema & "smtpusetls") = 1
        .Item(schema & "smtpauthenticate") = Identify
        .Item(schema & "sendusername") = User
        .Item(schema & "sendpassword") = PassWord
    End If
        .Item(schema & "smtpserverport") = Port
        .Item(schema & "sendusing") = 2
        .Item(schema & "smtpserver") = Serveur
        .Item(schema & "smtpconnectiontimeout") = Delay
        .Item(schema & "enablessl") = 1
        .Update
    End With
     
     
     
    'Configuration du message
    'If E_mail.Sign.Value = Checked Then Convert ServeurFrm.SignTXT, ServeurFrm.Text1
     
    With msg
        Set .Configuration = Conf
        .To = Dest
        .cc = DestEnCopy
        .bcc = Expediteur & ";" & DestEnCopyCaher
        .bcc = DestEnCopyCaher
        .FROM = Expediteur
        .Subject = Objet
        .DSNOptions = cdoDSN
    '
     
        .htmlbody = Body '"<p align=""center""><font face=""Verdana"" size=""1"" color=""#9224FF""><b><br><font face=""Comic Sans MS"" size=""5"" color=""#FF0000""></b><i>" & body & "</i></font> " 'E_mail.ZThtml.Text
                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
        On Error Resume Next
        .Send 'envoi du message
        If Err <> 0 Then
            MsgBox Err.Description
        Else
            MsgBox "Fin"
        End If
     
    End With
     
    ' reinitialisation des variables
    Set msg = Nothing
    Set Conf = Nothing
    Set Config = Nothing
     
    End Sub

  11. #11
    Membre du Club
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Points : 48
    Points
    48
    Par défaut
    Bonjour le forum,

    Merci pour toutes vos réponses.
    Parallèlement, j'ai posé ma question sur le forum Mozilla (http://forums.mozfr.org) et j'ai obtenu la réponse à mes questions.

    Je vous transmets le code, qui fonctionne impeccablement bien. Si ça peut servir à quelqu'un, tant mieux !

    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
    Private Sub Image3_Cliquer()
    Dim destinataire, cc, body, sujet, strcommand, fichierjoint As String
     
    destinataire = "titi.toto@XXX.fr,didi.dada@XXX.fr"
    cc = "roro.lele@XXX.fr,mimi.meme@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>" & "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)
     
     
    End Sub
    Petite précision : il ne doit pas y avoir d'espace dans le nom de la pièce jointe. Sinon, ça ne fonctionne pas.

    Merci encore.

    Cordialement.

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

Discussions similaires

  1. [XL-2010] AIDE pour macro Envoi mail automatique par excel
    Par ZenJP dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/01/2014, 11h10
  2. Problème macro envoie mail
    Par lyonnaisdu26 dans le forum VBScript
    Réponses: 2
    Dernier message: 09/03/2012, 16h44
  3. envoi mail automatique via macro excel
    Par ellewided dans le forum VBA Outlook
    Réponses: 0
    Dernier message: 14/08/2009, 10h10
  4. [E-03] Problème sur envoi mail automatique
    Par NELAIN dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/11/2008, 11h53

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