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 de mail avec Access


Sujet :

VBA Access

  1. #1
    Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2014
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Envoi de mail avec Access
    Bonjour,

    j'envoie des mails avec Access pour répondre à des candidatures. Le code fonctionne, sauf que je ne sais pas comment définir le compte utilisateur Outlook pour les envois. Je veux utiliser une adresse spécifique.

    J'ai identifié la fonction AddressEntry.Sender mais je suis incapable de l'intégrer dans le code. Voici ma fonction, inspirée d'un exemple du site. En rouge ce que j'ai tenté, mais cela plante.

    Merci de votre aide.
    Cordialement


    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
    Public Sub RéponsesCandidatures()
      Dim oApp As Outlook.Application
      Dim oMail As Outlook.MailItem
      Dim oDB As DAO.Database
    
      Dim strContenu As String
      Dim oRst1 As DAO.Recordset
      Dim strTo As String
      Dim srtFrom As String
      Dim sqlMail As String
      'Instancie Outlook
      Set AddressEntry.Sender = "recrutement@nomdomaine."
      Set oDB = CurrentDb
      Set oApp = CreateObject("Outlook.Application")
      'Ouvre un recordset sur les clients
      Set oRst1 = oDB.OpenRecordset("SELECT [Candidat] & '@' & [Domaine] AS Mail, DonneesCandidatures.Demande, TblRepCandidat.strObjet, IIf(Right([txtCorps1],5)='poste',[txtCorps1] & ' ' & conjonction([Demande]) & ' ' & [Demande] & '.',[txtCorps1]) AS txtCorps, TblRepCandidat.txtCorps2, TblRepCandidat.txtCorps3 FROM (DonneesCandidatures LEFT JOIN TblRepCandidat ON DonneesCandidatures.Réponse = TblRepCandidat.TypeRéponse) LEFT JOIN TableFournInternet ON DonneesCandidatures.Fournisseur = TableFournInternet.Fournisseur;")
    
      'Boucle sur chaque candidat et envoie la réponse appropriée
      While Not oRst1.EOF
         'Crée un nouveau message
         'sqlMail = "SELECT  * FROM tblRepCandidat;"
         'Set oRst0 = oDB.OpenRecordset(sqlMail)
         'oRst1.MoveFirst
        Set oMail = oApp.CreateItem(olMailItem)
        oMail.Body = oRst1.Fields("txtcorps") & _
                           IIf(IsEmpty([txtCorps2]) = True, "", Chr(10) & oRst1.Fields("txtCorps2")) & _
                            IIf(IsEmpty([txtCorps3]) = True, "", Chr(10) & oRst1.Fields("txtCorps3"))
        oMail.Subject = oRst1.Fields("strObjet") '& " du " & oRst0.Fields("dtCrea")
        strTo = oRst1.Fields("Mail") & "; " 'strT1 & oRst1.Fields("Mail") & "; "
        oRst1.MoveNext
        
        'Supprime la dernière virgule
        oMail.To = Left(strTo, Len(strTo) - 2)
        'Envoi du mail
        oMail.Send
      Wend
      'oRst0.Close
      oRst1.Close
      Set oRst0 = Nothing
      Set oRst1 = Nothing
      Set oDB = Nothing
      'Ferme Outlook
      'oApp.Quit
      Set oApp = Nothing
    End Sub

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour et bienvenue parmi nous,

    Pas sûr que j’aie compris la question.

    compte utilisateur Outlook
    Tu veux dire le profil avec lequel Outlook doit s’ouvrir pour envoyer le mail avec « recrutement@nomdomaine » comme expéditeur ?
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  3. #3
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Regisseur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2006
    Messages : 475
    Points : 850
    Points
    850
    Par défaut
    Bonjour GBAUDINAT et Claude
    J'espere ne pas couper l'herbe sous le pied de Claude ,mais je pense que la fonction AddressEntry n'est pas ce qu'il faut pour GBAUDINAT. D'abord cela déclenche la sécurité d'Outlook, ensuite elle est mal écrite (pas vu de .sender dans l'aide) et enfin, elle est plutot utilisée pour chercher une adresse dans une liste ou un carnet.

    En résumé, il faut verifier que l'adresse à partir de laquelle ont veut envoyer figure dans olApp.Session.Accounts (donc qu'il y a une délégation sur cette adresse). Ensuite on peut affecter cette adresse dans .olMail.Sender

    extrait du code interessant pour la compréhention:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Const CST_EmailFrom As String = "recrutement@nomdomaine."
    Dim olApp As Outlook.Application, olAcc As Outlook.Account
    'récupérer le compte mail correspondant à CST_EmailFrom
    For Each olAcc In olApp.Session.Accounts
    If olAcc.CurrentUser.Address = CST_EmailFrom Then Exit For
    Next olAcc
    'If olAcc Is Nothing Then Stop 'si on s'arrête ici, c'est qu'on n'a pas trouvé la boite mail CST_EmailFrom
    .olMail.Sender = olAcc.CurrentUser.AddressEntry
    Apparement çà marche,mais je n'ai pas testé
    Cdlt

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour Thierry et GBAUDINAT,


    J'espere ne pas couper l'herbe sous le pied de Claude

    Pas de souci : je n'avais pas compris la question.

    Bonne journée.
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  5. #5
    Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2014
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Réponse
    Bonjour,

    merci de ces éléments qui vont certainement dans le bons sens. Très limité en VBA, je n'arrive pas a l'intégré dans mon code : j'ai un message d'erreur.

    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
    Public Sub RéponsesCandidatures()
    'Ajouter les références suivantes :
    'Microsoft Outlook
    'Microsoft DAO
    Private Const CST_EmailFrom As String = "recrutement@domaine.fr"
    Dim oApp As Outlook.Application
    Dim oMail As Outlook.MailItem
    Dim oDB As DAO.Database
    Dim olApp As Outlook.Application, olAcc As Outlook.Account
    Dim strContenu As String
    Dim oRst1 As DAO.Recordset
    Dim strTo As String
    Dim srtFrom As String
    Dim sqlMail As String
    'Instancie Outlook
    Set oDB = CurrentDb
    For Each olAcc In olApp.Session.Accounts
    If olAcc.CurrentUser.Address = CST_EmailFrom Then Exit For
    Next olAccSet oApp = CreateObject("Outlook.Application")
    'Ouvre un recordset sur les clients
    Set oRst1 = oDB.OpenRecordset("SELECT [Candidat] & '@' & [Domaine] AS Mail, DonneesCandidatures.Demande, TblRepCandidat.strObjet, IIf(Right([txtCorps1],5)='poste',[txtCorps1] & ' ' & conjonction([Demande]) & ' ' & [Demande] & '.',[txtCorps1]) AS txtCorps, TblRepCandidat.txtCorps2, TblRepCandidat.txtCorps3 FROM (DonneesCandidatures LEFT JOIN TblRepCandidat ON DonneesCandidatures.Réponse = TblRepCandidat.TypeRéponse) LEFT JOIN TableFournInternet ON DonneesCandidatures.Fournisseur = TableFournInternet.Fournisseur;")
    'Boucle sur chaque client et les ajoute au champ BCC du mail
    While Not oRst1.EOF
    'Crée un nouveau message
    Set oMail = oApp.CreateItem(olMailItem)
    oMail.Body = oRst1.Fields("txtcorps") & _
        IIf(IsEmpty([txtCorps2]) = True, "", Chr(10) & oRst1.Fields("txtCorps2")) & _
        IIf(IsEmpty([txtCorps3]) = True, "", Chr(10) & oRst1.Fields("txtCorps3"))
    oMail.Subject = oRst1.Fields("strObjet") '& " du " & oRst0.Fields("dtCrea")
        strTo = oRst1.Fields("Mail") & "; " 'strT1 & oRst1.Fields("Mail") & "; "
        oRst1.MoveNext
        
    'Supprime la dernière virgule
    .olMail.Sender = olAcc.CurrentUser.AddressEntryoMail.To = Left(strTo, Len(strTo) - 2)
    'Envoi du mail
    oMail.Send
    Wend
    'oRst0.Close
    oRst1.Close
    Set oRst0 = Nothing
    Set oRst1 = Nothing
    Set oDB = Nothing
    'Ferme Outlook
    'oApp.Quit
    Set oApp = Nothing
    End Sub


    J'ai essayé de déclarer Private Const CST_EmailFrom As String = "gb-greta@laposte.net" avant la fonction, mais alors c'est la ligne
    .olMail.Sender = olAcc.CurrentUser.AddressEntry
    qui renvoie un message :
    "erreur de compilation, référence incorrecte ou non qualifiée".
    Bonne journée,

    GB

  6. #6
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Regisseur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2006
    Messages : 475
    Points : 850
    Points
    850
    Par défaut
    Bonjour
    J'avais mis un lien dans mon message précédent, mais il a disparu !
    Robert1957 avais apporté une réponse similaire ici http://www.developpez.net/forums/d13...r/#post7588537
    Dans ton code (le 2°), tu n'as pas ouvert Outlook (Set oApp = CreateObject("Outlook.Application") ,ou en tout cas après avoir voulu te servir de olApp (ligne 19). Cette ligne devrait se trouver entre la 16 et la 17 .
    Verifie aussi que le compte à partir duquel tu veux envoyer un mail,figure bien dans la liste de tes comptes.
    Cdlt

  7. #7
    Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2014
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    merci pour ces retours. Quelques temps de vacances ne m'ont pas permis d'avancer plus tôt sur le sujet.

    Les éléments proposés par Robert1957 fonctionnent, mais ne me permettent pas de faire ce que je recherche. En effet, si le compte existe bien dans mon test, il n'y aura pas par la suite de compte concernant l'adresse que je souhaite utiliser qui est dans un environnement exchange. J’envoie déjà des mails avec cette adresse.

    La solution consistant à déclarer l'adresse par Private Const CST_EmailFrom As String = "recrutement@domaine.fr" apparaît comme la plus appropriée.

    Robert1957 propose une ligne qui appelle l'adresse par le n° du compte : .SendUsingAccount = OutApp.Session.Accounts.Item(3) 'Ici ce serait l'adresse # 3.

    Comment remplacer cette ligne par l'adresse ou la variable ?

    Cordialement
    GB

Discussions similaires

  1. Problème lors de l'envoi d'un mail avec access
    Par anthony0903 dans le forum Access
    Réponses: 2
    Dernier message: 09/01/2014, 22h59
  2. Envoi de mail depuis access avec retour sur actions
    Par clickandgo dans le forum VBA Access
    Réponses: 1
    Dernier message: 25/04/2012, 11h03
  3. [VBA] Envoi d'un mail avec Access VB par Lotus Notes
    Par darkphenx dans le forum VBA Access
    Réponses: 5
    Dernier message: 29/10/2007, 08h24
  4. envoi de mail avec sql server
    Par the_new dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/03/2005, 18h56
  5. envoi de mail avec attachement de fichier
    Par GMI3 dans le forum Modules
    Réponses: 2
    Dernier message: 24/09/2003, 11h22

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