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

VBA Access Discussion :

Envoi Mail avec Outlook et pièce jointe


Sujet :

VBA Access

  1. #1
    Membre régulier Avatar de fbu78
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Points : 79
    Points
    79
    Par défaut Envoi Mail avec Outlook et pièce jointe
    Bonjour,

    J'ai parcouru le forum et les différents posts relatifs à cette question et je trouve pas de solution à mon problème qui est le suivant :

    Je dois envoyé à partir d'une appli access 2007 un mail + pièce jointe.
    J'ai le code suivant qui fonctionne :
    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
     
    Private Sub btnGenerationMail_Click()
    Dim MonOutlook As Object
    Dim MonMessage As Object
    Dim RstAdMailDest, RstAdMailEnv, RstNomFichierOUT, RstRepOUT, RstTxtObjetMail, RstTxtLigne1Mail, RstTxtLigne2Mail, RstTxtLigne3Mail As DAO.Recordset
    Dim db As DAO.Database
     
        Set db = CurrentDb
        Set RstAdMailEnv = db.OpenRecordset("SELECT * FROM T_Parametrage WHERE NOM = 'AdMailEnv'", dbOpenDynaset)
        Set RstAdMailDest = db.OpenRecordset("SELECT * FROM T_Parametrage WHERE NOM = 'AdMailDest'", dbOpenDynaset)
        Set RstNomFichierOUT = db.OpenRecordset("SELECT * FROM T_Parametrage WHERE NOM = 'NomFichierOUT '", dbOpenDynaset)
        Set RstRepOUT = db.OpenRecordset("SELECT * FROM T_Parametrage WHERE NOM = 'RepOUT'", dbOpenDynaset)
        Set RstTxtObjetMail = db.OpenRecordset("SELECT * FROM T_Parametrage WHERE NOM = 'TxtObjetMail'", dbOpenDynaset)
        Set RstTxtLigne1Mail = db.OpenRecordset("SELECT * FROM T_Parametrage WHERE NOM = 'TxtLigne1Mail'", dbOpenDynaset)
        Set RstTxtLigne2Mail = db.OpenRecordset("SELECT * FROM T_Parametrage WHERE NOM = 'TxtLigne2Mail'", dbOpenDynaset)
        Set RstTxtLigne3Mail = db.OpenRecordset("SELECT * FROM T_Parametrage WHERE NOM = 'TxtLigne3Mail'", dbOpenDynaset)
     
    'test de présence du fichier OUT
    If Dir(RstRepOUT.Fields("variable").Value & "\" & RstNomFichierOUT.Fields("variable").Value, vbHidden) = "" Then
            'le fichier n'existe pas (vbHidden permet de le retrouver même s'il est caché)
            MsgBox "LE FICHIER " & RstNomFichierOUT.Fields("variable").Value & " N'EST PAS PRÉSENT DANS LE  RÉPERTOIRE " & RstRepOUT.Fields("variable").Value & " !!"
            Exit Sub
    Else
     
      ' On crée une instance d'Outlook :
     Set MonOutlook = CreateObject("Outlook.Application")
      ' Et on crée un élément Outlook, qui sera un message E-Mail :
     Set MonMessage = MonOutlook.CreateItem(0)
     'MonMessage.From = RstAdMailEnv.Fields("variable").Value
     MonMessage.To = RstAdMailDest.Fields("variable").Value
     MonMessage.CC = ""
     MonMessage.BCC = ""
     MonMessage.Subject = RstTxtObjetMail.Fields("variable").Value & " " & Format(Date, "dd/mm/yyyy")
     MonMessage.Body = RstTxtLigne1Mail.Fields("variable").Value & Chr(13) & RstTxtLigne2Mail.Fields("variable").Value & Chr(13) & Chr(13) & RstTxtLigne3Mail.Fields("variable").Value
     MonMessage.Attachments.Add RstRepOUT.Fields("variable").Value & "\" & RstNomFichierOUT.Fields("variable").Value
     'MonMessage.Send ' envoi directement le message
     MonMessage.Save ' sauvegarde le mesage dans les brouillons
     
      MsgBox "Le message a été généré dans la BAL " & RstAdMailEnv.Fields("variable").Value & Chr(13) & "Dans les brouillons", vbInformation, "Confirmation"
     
     Set MonOutlook = Nothing ' On ferme !
     
    End If
    End Sub
    Donc ce code fonctionne très bien mais ne permet pas a priori d'indiquer une boite mail différente de celle de l'utilisateur connecté...
    J'aimerai donc une solution qui me permette de préciser un nom de boîte mail différent
    J'ai aussi essayé via CDO mais j'ai à chaque fois un message d'erreur SendUsing...

    Si qqn a une solution ...je suis preneur

    Fred

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 944
    Points : 1 282
    Points
    1 282
    Par défaut
    Bonjour

    J'ai pas cherché plus loin, mais j'ai trouvé ça dans l'aide
    Référence du développeur Outlook
    MailItem.SendUsingAccount, propriété
    Renvoie ou définit un objet Account qui représente le compte sous lequel MailItem doit être envoyé. En lecture/écriture.
    Informations sur la version
    Version ajoutée : Outlook 2007

    Syntaxe

    expression.SendUsingAccount

    expression Expression qui renvoie un objet MailItem.

    Remarques


    La propriété SendUsingAccount peut permettre de spécifier le compte à utiliser pour envoyer l'objet MailItem lorsque la méthode Send est invoquée. Le fait de définir cette propriété sur Null (Nothing dans Visual Basic) indique que le compte par défaut doit être utilisé pour envoyer l'objet MailItem. Cette propriété renvoie Null (Nothing dans Visual Basic) si le compte spécifié pour l'objet MailItem n'existe plus.
    Si ça peut aider
    Frédéric
    Développeur d'Applications Access

  3. #3
    Membre régulier Avatar de fbu78
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Points : 79
    Points
    79
    Par défaut
    effectivement j'avais aussi vu cette aide...

    J'ai ajouté la ligne suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     MonMessage.SendUsingAccount = RstAdMailEnv.Fields("variable").Value
    après la ligne Set MonMessage = MonOutlook.CreateItem(0)

    Mais ça ne change rien, le brouillon est toujours généré dans ma propre boîte aux lettres alors que la variable RstAdMailEnv est bien renseignée avec un nom de boîte différent.

    A suivre

  4. #4
    Membre régulier Avatar de fbu78
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Points : 79
    Points
    79
    Par défaut
    Je viens de réécrire mon code de manière un peu plus "lisible", mais ça ne change pas le résultat
    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
     
    Private Sub btnGenerationMail_Click()
    Dim MonOutlook As Outlook.Application
    Dim MonMessage As Outlook.MailItem
    Dim MonAccount As Outlook.Account
    Dim MonEspace As Outlook.NameSpace
    Dim RstAdMailDest, RstAdMailEnv, RstNomFichierOUT, RstRepOUT, RstTxtObjetMail, RstTxtLigne1Mail, RstTxtLigne2Mail, RstTxtLigne3Mail As DAO.Recordset
    Dim db As DAO.Database
     
        Set db = CurrentDb
        Set RstAdMailEnv = db.OpenRecordset("SELECT * FROM T_Parametrage WHERE NOM = 'AdMailEnv'", dbOpenDynaset)
        Set RstAdMailDest = db.OpenRecordset("SELECT * FROM T_Parametrage WHERE NOM = 'AdMailDest'", dbOpenDynaset)
        Set RstNomFichierOUT = db.OpenRecordset("SELECT * FROM T_Parametrage WHERE NOM = 'NomFichierOUT '", dbOpenDynaset)
        Set RstRepOUT = db.OpenRecordset("SELECT * FROM T_Parametrage WHERE NOM = 'RepOUT'", dbOpenDynaset)
        Set RstTxtObjetMail = db.OpenRecordset("SELECT * FROM T_Parametrage WHERE NOM = 'TxtObjetMail'", dbOpenDynaset)
        Set RstTxtLigne1Mail = db.OpenRecordset("SELECT * FROM T_Parametrage WHERE NOM = 'TxtLigne1Mail'", dbOpenDynaset)
        Set RstTxtLigne2Mail = db.OpenRecordset("SELECT * FROM T_Parametrage WHERE NOM = 'TxtLigne2Mail'", dbOpenDynaset)
        Set RstTxtLigne3Mail = db.OpenRecordset("SELECT * FROM T_Parametrage WHERE NOM = 'TxtLigne3Mail'", dbOpenDynaset)
     
    'test de présence du fichier OUT
    If Dir(RstRepOUT.Fields("variable").Value & "\" & RstNomFichierOUT.Fields("variable").Value, vbHidden) = "" Then
            'le fichier n'existe pas (vbHidden permet de le retrouver même s'il est caché)
            MsgBox "LE FICHIER " & RstNomFichierOUT.Fields("variable").Value & " N'EST PAS PRÉSENT DANS LE  RÉPERTOIRE " & RstRepOUT.Fields("variable").Value & " !!"
            Exit Sub
    Else
     
      ' On crée une instance d'Outlook :
    Set MonOutlook = New Outlook.Application
            With MonOutlook
                    ' Et on crée un élément Outlook, qui sera un message E-Mail :
                    ' Set MonMessage = MonOutlook.CreateItem(0)
                    Set MonMessage = .CreateItem(olMailItem)
                    Set MonAccount = .GetNamespace("MAPI").Accounts(RstAdMailEnv.Fields("variable").Value)
                            With MonMessage
     
                                    .To = RstAdMailDest.Fields("variable").Value
                                    .CC = ""
                                    .BCC = ""
                                    .Subject = RstTxtObjetMail.Fields("variable").Value & " " & Format(Date, "dd/mm/yyyy")
                                    .Body = RstTxtLigne1Mail.Fields("variable").Value & Chr(13) & RstTxtLigne2Mail.Fields("variable").Value & Chr(13) & Chr(13) & RstTxtLigne3Mail.Fields("variable").Value
                                    .Attachments.Add RstRepOUT.Fields("variable").Value & "\" & RstNomFichierOUT.Fields("variable").Value
                                    .SendUsingAccount = MonAccount
                                    '.Send ' envoi directement le message
                                    .Save ' sauvegarde le mesage dans les brouillons
                            End With
     
                            MsgBox "Le message a été généré dans la BAL " & RstAdMailEnv.Fields("variable").Value & Chr(13) & "Dans les brouillons", vbInformation, "Confirmation"
     
                    Set MonOutlook = Nothing ' On ferme !
            End With
    End If
    End Sub
    et en plus maintenant j'ai une erreur "Impossible de terminer l'opération.Une ou plusieurs valeurs de paramètres ne sont pas valides" et il s'arrête sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    .SendUsingAccount = MonAccount
    Quelqu'un aurait-il une géniale idée ?*

  5. #5
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Bien que joliment indenté, ton code est un peu capilotracté...

    8 Recordsets dont 7 déclarés en Variant qui sont ouverts et non clos ni mis à Nothing...
    C'est pas gégène comme code...
    Pareil pour l'objet db qui doit être clos et mis à Nothing aussi.

    Un seul RecordSet aurait suffit ! Petite correction oblige...

    Bref, pour en revenir à ton problème, tu veux envoyer un mail dans une autre BAL que celle de l'utilisateur, est-ce à dire que tu veux que le mail arrive dans un dossier en particulier ?

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  6. #6
    Membre régulier Avatar de fbu78
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Points : 79
    Points
    79
    Par défaut
    Merci...je vais effectivement corriger l'écriture des recordset...

    Pour en revenir à mon souhait :

    Exemple : je suis un utilisateur d'une appli, qui possède une boite mail outlook perso et je suis également accrédité à une boite mail commune de service.

    J'aimerai que le mail parte depuis la boite de service et non pas de ma boite perso.
    pour l'instant je sauvegarde le message dans les brouillons parce que à force de faire des tests ça rempli ma boite mail

    Je sais pas si c'est plus clair...

    Merci encore pour le conseil... je modifierai demain au boulot !

    a+
    Fred

  7. #7
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Humm, il y a quelque chose que je pige pas...
    Si j'envoie un mail sur une @ yahoo (perso donc), elle arrivera sur la BAL yahoo et pas sur Outlook.
    Si les personnes de ton équipe recoivent tes mails sur leur compte perso, c'est qu'il y a :
    • soit deux comptes Outlook, un perso et un Exchange public et le compte perso est le compte par défaut
    • soit une erreur dans l'adresse mail du destinataire...


    Citation Envoyé par fbu78
    Je sais pas si c'est plus clair...
    Non, en fait...

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  8. #8
    Membre régulier Avatar de fbu78
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Points : 79
    Points
    79
    Par défaut
    Oui je sais c'est pas clair, je reprends...

    Moi, j'envoie un mail a partir de ma boite outlook pro sur un prestataire extérieur et ça ...ça marche, le mail sera bien parti de MA boite outlook

    L'idée c'est que moi utilisateur j'envoie un mail A partir d'une boîte de service vers un prestataire extérieur... et ça ça marche pas...

    C'est plus clair ?

    a+

  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 593
    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 593
    Points : 34 250
    Points
    34 250
    Par défaut
    salut,
    juste pour la partie des recordset, regarde si la syntaxe proposée dans cet article n'est pas plus simple et plus lisible : http://jpcheck.developpez.com/tutori...es-initiation/
    La simplification du code peut entraîner une simplification des problèmes
    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
    Membre expert
    Avatar de FreeAccess
    Homme Profil pro
    Un monde ou prendre est plus facile qu'apprendre.
    Inscrit en
    Mars 2006
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Un monde ou prendre est plus facile qu'apprendre.

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 745
    Points : 3 834
    Points
    3 834
    Par défaut
    Bonjour à tous,

    A la lecture du problème de fbu78, je pense plutôt que son souci se situe au niveau de la "déclaration" (du choix...) de l'adresse Mail de l'expéditeur...
    Sauf (grosse) erreur de ma part, lors de l'envoi d'un mail en utilisant par exemple Outlook, l'adresse de l'expéditeur est celle définie par défaut......alors que l'on peut avoir d'autres adresses Mails secondaires.

    En clair dans un code VBA, peut-on avoir l'équivalent de la déclaration du destinataire...:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    With MonMessage
           .To = RstAdMailDest.Fields("variable").Value
    ....mais pour l'expéditeur sous la forme...:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .From= AutreAdresseMailSecondaireExpéditeur
    FreeAccess
    "Petit à petit l'araignée tisse sa toile"

  11. #11
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par fbu78 Voir le message
    L'idée c'est que moi utilisateur j'envoie un mail A partir d'une boîte de service vers un prestataire extérieur... et ça ça marche pas...
    C'est un problème de configuration...
    Je pense alors que l'idée serait tu fasses en sorte qu'Outlook prenne le compte d'émetteur X ou Y en fonction de ce que tu souhaites.
    Cette option est paramétrable manuellement donc par code aussi.

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/02/2014, 11h19
  2. [Joomla!] Chronoforms : comment envoyer un e-mail avec ou sans pièce jointe ?
    Par NEfanda dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 03/01/2012, 17h58
  3. [javamail] envoi mail avec message en pièce jointe
    Par k4eve dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 16/11/2007, 11h17
  4. Envoi d'un mail avec fichier en pièce jointe
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 14/06/2005, 16h30
  5. Envoi mail avec Outlook accusé de réception
    Par KapoueMan dans le forum Access
    Réponses: 2
    Dernier message: 14/04/2005, 10h41

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