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 :

Génération d'un e-mail automatique


Sujet :

VBA Access

  1. #1
    Membre averti
    Femme Profil pro
    Legalité Financière & coordinateur de subventions
    Inscrit en
    Novembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Legalité Financière & coordinateur de subventions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 18
    Par défaut Génération d'un e-mail automatique
    Bonsoir,

    Je souhaiterais, dans une DB existante, envoyer des e-mails automitiquement lorsque une date d'écheance est à terme.

    Si je lie l'email sur un formulaire celui ne se declenchera que sur base d"un évement(click .. par ex.), ce qui me convient pas. J'ai essayé de déclencher cet e-mail .. "on load" du formulaire ..mais naturellement il ne me prend que le premier record .. ceci ne peut convenir non plus.

    Mon idée était de developper une function qui serait reprise dans une query par exemple. Query qui ne me reprendrait que les écheances échues et naturellement les adresses e-mail relatives.


    Est-ce possible .. je doute .. si faisable quel serait le code ?

    Ps. je précise que la DB tourne sur AC2007 mais sans conversion - créée initialement sous AC2003.

    D'avance merci pour votre aide.

    MdF

  2. #2
    Membre chevronné
    Inscrit en
    Février 2011
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 469
    Par défaut
    Oui, biensûr, c'est tout à fait possible.
    Tu peux, par exemple, ajouter un bonton sur ton formulaire et associer du code VBA à ce bouton.

    Le code va parcourir un recordset (une liste) et pour chaque record envoyer un Email.

    Cela exige de la programmation VBA.

  3. #3
    Membre averti
    Femme Profil pro
    Legalité Financière & coordinateur de subventions
    Inscrit en
    Novembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Legalité Financière & coordinateur de subventions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 18
    Par défaut
    [QUOTE=PipoWIL;7577036]Oui, biensûr, c'est tout à fait possible.
    Tu peux, par exemple, ajouter un bonton sur ton formulaire et associer du code VBA à ce bouton.

    Le code va parcourir un recordset (une liste) et pour chaque record envoyer un Email.

    Cela exige de la programmation VBA.[/QUOTE

    Si le code est lié à un bouton cela signifie qu"il faudra déclencher (en cliquant le bouton) un évenement.
    Est-il possible, naturellement via un code VBA, de declencher automatiquement l"email ?
    Si oui quel est le code (function je suppose) et à quel objet dois-je le lier ?
    Merci
    MdF

  4. #4
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 888
    Par défaut
    Bonjour Di Francesco,

    Cela peut se faire sur n'importe quel événement.
    Si je lie l'email sur un formulaire celui ne se declenchera que sur base d"un évement(click .. par ex.), ce qui me convient pas. J'ai essayé de déclencher cet e-mail .. "on load" du formulaire ..mais naturellement il ne me prend que le premier record .. ceci ne peut convenir non plus.
    Pas nécessairement cela dépend de la requête pour l'envoie de mail. Tu n'es pas obligé d'associer ta requête à ton formulaire. Si tu parcours les enregistrements et sélectionne tous ceux qui sont passé date cela devrait fonctionner.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TaTable.N°, TaTable.DateEntree
    FROM TaTable
    WHERE (((TaTable.DateEntree)<=Date()));
    Te retournerais tous les enregistrements qui ont une date plus petite qu'aujourd'hui. À partir de ces enregistrement tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    While rst.EOF = False
    Ton code pour envoyer mail
    rst.MoveNext
    Wend
    Ce qui pose un problème d'après moi c'est plus la gestion de l'envoie de mail. Si à chaque fois que tu ouvres, supposons ton menu principal, la commande peut vérifier tous les records qui sont passé date. À partir de là envoyer email mais tu ne veux pas envoyer systématiquement des emails, si tu l'as déjà fait.

    Bonne journée

  5. #5
    Membre averti
    Femme Profil pro
    Legalité Financière & coordinateur de subventions
    Inscrit en
    Novembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Legalité Financière & coordinateur de subventions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 18
    Par défaut
    Ok Robert, Merci de ta réponse. Je vais y travailler mais je risque de te mettre à contribution de nouveau ..
    MdF

  6. #6
    Membre averti
    Femme Profil pro
    Legalité Financière & coordinateur de subventions
    Inscrit en
    Novembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Legalité Financière & coordinateur de subventions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 18
    Par défaut e-mail automatique
    Hi Robert,

    Après avoir créer ma query en SQL comme indiqué, j'ai mis le code suivant dans un module vba que j'exécute via une macro.. mais ce code me génère un "mass" e-email qui ne me permet pas de personaliser mon envoi. En fait je souhaiterais reprendre une référence (ProjectRef) et un e-mail pa envoi .. et donc pas un "mass" e-mail. J'ai essayé via do.comd sendobject ..mais je m'emmêle les pinceaux !
    Pourrais-tu m'aider?
    ps pour contourner le problème de l'envoi automatique ..journlier, qui pourrait être perçu comme du spam, je pense, après avoir résolu les autre problèmes, mettre une date fixe comme critère...
    Mais d'abord je souhaiterais résoudre la problèmatique de l'envoi du courriel.
    Voici le mon query et mon code VBA

    D'avance merci pour ton aide !
    MdF
    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
     
    ---------------------------
    SELECT [Project Number] & ";" & [Project acronym] AS ProjectRef, a.Email, b.Message
    FROM tblDeliverables AS a, tblMessage AS b
    WHERE (((a.Email) Is Not Null) AND ((b.MessageID)=1) AND ((a.[Deliverable Status])="Pending"));
     
     
    ------------------------
     
     
    Public Function SendEMail()
    On Error GoTo Err_SendEmail
     
    Dim objOutlook As New Outlook.Application
    Dim objMail As Outlook.MailItem
    Dim sSQL As String, db As DAO.Database, rs As DAO.Recordset
    Dim sTitle As String, sFile As String, sErr As String
    Dim sMessage As String
     
       'Prelims
       DoCmd.SetWarnings False
       DoCmd.Hourglass True
       Set db = CurrentDb
     
       'Prepare email message
       Set objMail = objOutlook.CreateItem(olMailItem)
       With objMail
     
       'Build recordset on recipients
       sSQL = "SELECT Email as [Recipient], Message As [BodyText] FROM qryEmailList;"
       Set rs = db.OpenRecordset(sSQL)
     
       sMessage = rs![BodyText]
     
       While Not rs.EOF
     
          'Add Recipient
          With .Recipients.Add(rs![Recipient])
     
              .Type = olBCC
          End With
     
          rs.MoveNext
     
       Wend
     
       rs.Close
       Set rs = Nothing
     
       'Add the subject
       .subject = "Delay in reporting Deliverables"
     
       'Add standard message text to body
       .Body = sMessage
     
       'Send the mail message
       .Send
     
       End With
       Set objMail = Nothing
       Set objOutlook = Nothing
     
    Exit_SendEmail:
       DoCmd.SetWarnings True
       DoCmd.Hourglass False
       Exit Function
     
     
    Err_SendEmail:
       sErr = "Error " & Error & " / " & Err
       MsgBox sErr, vbInformation + vbOKOnly, "Error on Email function"
       Resume Exit_SendEmail
     
    End Function

  7. #7
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 888
    Par défaut
    Bonjour Di Francesco,
    reprendre une référence (ProjectRef) et un e-mail pa envoi .. et donc pas un "mass" e-mail.
    Voici comment envoyer un email différent pour chaque ligne d'une table:
    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
        Dim db As DAO.Database: Set db = CurrentDb
        Dim rst As DAO.Recordset
        Dim strSQL As String
     
        Dim objOutlook As New Outlook.Application
        Dim objMail As Outlook.MailItem
     
        strSQL = "SELECT TaTable.NomClient, TaTable.MessagePerso, TaTable.email FROM TaTable;"
        Set rst = db.OpenRecordset(strSQL)
        While rst.EOF = False
            Set objMail = objOutlook.CreateItem(olMailItem)
            With objMail
                .To = rst("email")
                .Body = rst("MessagePerso")
                .Subject = "Bonjour " & rst("NomClient")
                .Send
            End With
            Set objMail = Nothing
            Set objOutlook = Nothing
            rst.MoveNext
        Wend
        rst.Close
        Set rst = Nothing
        Set db = Nothing
    Bonne journée

  8. #8
    Membre averti
    Femme Profil pro
    Legalité Financière & coordinateur de subventions
    Inscrit en
    Novembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Legalité Financière & coordinateur de subventions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 18
    Par défaut
    Chouette !!! cela fonctionne. J'ai ajouté une macro qui m'exécute un code qui lance ma macro sendmail ..et voilà.. Il ne me reste plus qu'a peaufiner.

    Un grand merci !!!
    MdF

  9. #9
    Membre averti
    Femme Profil pro
    Legalité Financière & coordinateur de subventions
    Inscrit en
    Novembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Legalité Financière & coordinateur de subventions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 18
    Par défaut complément info pour e-mail automatique
    Bonsoir Robert,

    Comme préconisé ..j'ai à présent un problème de timing. En fait, pour éviter que l'email automatique ne parte pas tous les jours, j'avais pensé ajouter un dateadd à ma date d'échéance. Champs qui aurait servi de critère. Naturellement, ceci n'est pas suffisant. En effet, je souhaiterais qu'un rappel via e-mail soit envoyé tous les mois à partir de l'échéance. Ma question est donc, peut-on incrémenter systématiquement de mois en mois, dès le le champs incrémenté est égal à la date du jour et ce dans une query? Si non, quel serait la fonction que je pourrais appeler depuis ma requête?
    Merci de ton aide.
    MdF

  10. #10
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 888
    Par défaut
    Bonjour Di Francesco,

    Je ne sais pas si c'est nécessaire de faire si compliqué. Supposons ta table avec le champ DateEcheance que tu as déjà. Tu ajoutes un champ DateEnvoie qui au départ est = DateEcheance. Quand la date d'échéance est dépassée tu envoies un mail, lors de l'envoie du mail tu mets à jour le champ DateEnvoie en lui ajoutant un mois. Pour décider quand envoyer les mails tu bases ta requête comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select.... Where DateEnvoie < Date();
    Lorsque le renouvellement se fait tu inscrits la nouvelle date d'échéance dans DateEnvoie et DateEcheance. De cette manière tu enverrais un email à tous les mois jusqu’à ce que la personne renouvelle.

    Pour incrémenter le champ DateEnvoie tu le fais en même temps que l'envoie de mail tu as déjà tout ce qu'il faut.
    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
        strSQL = "SELECT TaTable.NomClient, TaTable.MessagePerso, TaTable.email, DateEnvoie FROM TaTable;"
        Set rst = db.OpenRecordset(strSQL)
        While rst.EOF = False
            Set objMail = objOutlook.CreateItem(olMailItem)
            With objMail
                .To = rst("email")
                .Body = rst("MessagePerso")
                .Subject = "Bonjour " & rst("NomClient")
                .Send
            End With
            rst.edit
            rst("DateEnvoie") = DateAdd("m", 1, Date)
            rst.Update
            Set objMail = Nothing
            Set objOutlook = Nothing
            rst.MoveNext
        Wend
    Bonne journée

  11. #11
    Membre averti
    Femme Profil pro
    Legalité Financière & coordinateur de subventions
    Inscrit en
    Novembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Legalité Financière & coordinateur de subventions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 18
    Par défaut
    Merci Robert !

    MdF

  12. #12
    Membre averti
    Femme Profil pro
    Legalité Financière & coordinateur de subventions
    Inscrit en
    Novembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Legalité Financière & coordinateur de subventions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 18
    Par défaut
    Robert,

    Une dernière question (j'espère ). Peut-on modifier le "from" de l'e-mail. Je m'explique, j' ai deux adresses e-mail, ma perso par défaut et une deuxième "no reply@...".
    Je souhaiterais que les "reminders" partent automatiquement depuis ma deuxième adresse e-mail, soit la "no reply" et ce pour éviter de recevoir en masse des demandes d'info qui ne m'incombent pas.
    Est-ce possible ? Dans le cas contraire je devrais mettre par défaut le "no reply" comme adresse e-mail dans ma messagerie ..pour la miodifier lorsque les envois sont terminés .. ce qui est contraignant.
    Une idée ?
    Merci.
    MdF

  13. #13
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 888
    Par défaut
    Bonjour Di Francesco,

    Regarde la réponse de ce post (la mienne): http://www.developpez.net/forums/d13...se-expediteur/ Je crois que c'est ce qu'il te faut.

    Bonne journée

  14. #14
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 888
    Par défaut
    Bonjour Di Francesco,

    On va rester dans ton post.

    Ce premier bout de code te permet de lister les comptes mail de ton Outlook:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub btnTestCourriel_Click()
     
        Dim OutApp As Outlook.Application
        Dim I As Long
     
        Set OutApp = CreateObject("Outlook.Application")
     
        For I = 1 To OutApp.Session.accounts.Count
            MsgBox OutApp.Session.accounts.Item(I) & " : numéro d'item " & I
        Next I
     
    End Sub
    Tu devrais avoir un msgbox pour chaque compte. À partir de ce résultat tu peux choisir le compte pour l'envoie de mail dans ton code comme suit:
    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
        Dim db As DAO.Database: Set db = CurrentDb
        Dim rst As DAO.Recordset
        Dim strSQL As String
     
        Dim objOutlook As New Outlook.Application
        Dim objMail As Outlook.MailItem
     
        strSQL = "SELECT TaTable.NomClient, TaTable.MessagePerso, TaTable.email FROM TaTable;"
        Set rst = db.OpenRecordset(strSQL)
        While rst.EOF = False
            Set objMail = objOutlook.CreateItem(olMailItem)
            With objMail
                .To = rst("email")
                .Body = rst("MessagePerso")
                .Subject = "Bonjour " & rst("NomClient")
                .SendUsingAccount = OutApp.Session.accounts.Item(LeNuméroDecompteDésiré)
                .Send
            End With
            Set objMail = Nothing
            Set objOutlook = Nothing
            rst.MoveNext
        Wend
        rst.Close
        Set rst = Nothing
        Set db = Nothing
    Si tu veux vérifier que tout est ok change le .sent par .Display. Ça va ouvrir le message dans Outlook et tu vas voir quel est le compte d'envoi.

    Bonne journée

  15. #15
    Membre averti
    Femme Profil pro
    Legalité Financière & coordinateur de subventions
    Inscrit en
    Novembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Legalité Financière & coordinateur de subventions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 18
    Par défaut
    Citation Envoyé par Robert1957 Voir le message
    Bonjour Di Francesco,

    On va rester dans ton post.

    Ce premier bout de code te permet de lister les comptes mail de ton Outlook:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub btnTestCourriel_Click()
     
        Dim OutApp As Outlook.Application
        Dim I As Long
     
        Set OutApp = CreateObject("Outlook.Application")
     
        For I = 1 To OutApp.Session.accounts.Count
            MsgBox OutApp.Session.accounts.Item(I) & " : 2" & I
        Next I
     
    End Sub
    Tu devrais avoir un msgbox pour chaque compte. À partir de ce résultat tu peux choisir le compte pour l'envoie de mail dans ton code comme suit:
    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
        Dim db As DAO.Database: Set db = CurrentDb
        Dim rst As DAO.Recordset
        Dim strSQL As String
     
        Dim objOutlook As New Outlook.Application
        Dim objMail As Outlook.MailItem
     
        strSQL = "SELECT TaTable.NomClient, TaTable.MessagePerso, TaTable.email FROM TaTable;"
        Set rst = db.OpenRecordset(strSQL)
        While rst.EOF = False
            Set objMail = objOutlook.CreateItem(olMailItem)
            With objMail
                .To = rst("email")
                .Body = rst("MessagePerso")
                .Subject = "Bonjour " & rst("NomClient")
                .SendUsingAccount = OutApp.Session.accounts.Item(2)
                .Send
            End With
            Set objMail = Nothing
            Set objOutlook = Nothing
            rst.MoveNext
        Wend
        rst.Close
        Set rst = Nothing
        Set db = Nothing
    Si tu veux vérifier que tout est ok change le .sent par .Display. Ça va ouvrir le message dans Outlook et tu vas voir quel est le compte d'envoi.

    Bonne journée
    Robert,

    Cela ne fonctionne pas. Voir plus haut mes modifications (items).

    J'ai essayé également come suit :

    For I =2 To OutApp.Session.accounts.Count
    MsgBox OutApp.Session.accounts.Item(I) & " : 2" & I
    Next I

    Avec ceci la boite de message me signale l'adresse 2, soit celle que je souhaite mais le courriel part de mon compte n°1.

    Par ailleurs, un seul e-mail part alors que plusieurs remplissent les critères voulus..
    ps. j'ai essayé depuis ms access 2010/Outlook 2010 :problème identique.
    Merci de tes conseils .. je dois faire une erreur mais laquelle ?
    MdF

  16. #16
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 888
    Par défaut
    Bonjour Di Francesco,

    Je viens de voir que j'avais oublié une ligne de code soit la ligne 11 dans le code pour envoyer le message:
    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
        Dim db As DAO.Database: Set db = CurrentDb
        Dim rst As DAO.Recordset
        Dim strSQL As String
     
        Dim objOutlook As New Outlook.Application
        Dim objMail As Outlook.MailItem
     
        strSQL = "SELECT TaTable.NomClient, TaTable.MessagePerso, TaTable.email FROM TaTable;"
        Set rst = db.OpenRecordset(strSQL)
        While rst.EOF = False
            Set objOutlook = CreateObject("Outlook.Application")
            Set objMail = objOutlook.CreateItem(olMailItem)
            With objMail
                .To = rst("email")
                .Body = rst("MessagePerso")
                .Subject = "Bonjour " & rst("NomClient")
                .SendUsingAccount = OutApp.Session.accounts.Item(2)
                .Send
            End With
            Set objMail = Nothing
            Set objOutlook = Nothing
            rst.MoveNext
        Wend
        rst.Close
        Set rst = Nothing
        Set db = Nothing
    Je viens de le tester chez moi et tout fonctionne. Il faut naturellement que le # 2 dans la collection Item soit le bon compte.

    Donne moi des nouvelles avec ce code.

    Bonne journée

  17. #17
    Membre averti
    Femme Profil pro
    Legalité Financière & coordinateur de subventions
    Inscrit en
    Novembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Legalité Financière & coordinateur de subventions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 18
    Par défaut
    Robert,

    En effet à présent cela fonctionne. Merci !!!
    Je vais maintenant anticiper la demande des utilisateurs afin d'insérer des champs existants dans le message à envoyer. J'espère pouvoir gérer.. malgré ma passion pour l'informatique ..ce n'est pas ma profession.

    MdF

  18. #18
    Membre averti
    Femme Profil pro
    Legalité Financière & coordinateur de subventions
    Inscrit en
    Novembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Legalité Financière & coordinateur de subventions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 18
    Par défaut
    Bonsoir Robert,

    Me revoilà ..

    J'ai un nouveau souci. Toujours dans le module susmentionné, je souhaite mettre une date automatiquement dans champs relatifs aux rappels faits. J'utilise pour cela un If... then... qui ne fonctionnent pas pour les dates. J'ai l'impression d'avoir tout essayé ..ex.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If isdate (rst ...
    If isNull (rst...
    If rst .... < "" 
    If rst ... = 0
    En vain ... J'ai donc créé un champs numérique qui multiplie par 1 le champs date .. et ai basé mon If sur la valeur en question ... en vain !!
    J'en perds mon latin ..pourrais-tu m'aider ?
    Voici ce que j'ai testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     rst("Sendingdate") = DateAdd("d", 30, Date)
           If IsDate(rst("sendingdate")) = True Then
            rst("remindersendon") = Date
    (jusq'ici pas de problème)

    Les soucis commencent ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
          ' ElseIf rst("reminder2On") > "" Then
             'rst("reminder2On") = Date
             'ElseIf (rst("reminder3On")) = "41657" Then
             'rst("reminder3on") = Date
             'ElseIf Not IsNull(rst("reminder3On")) Then
            ' rst("reminder4on") = Date
             'ElseIf Not IsNull(rst("reminder4On")) Then
             'rst("reminder5on") = Date
            ' ElseIf Not IsNull(rst("reminder5On")) Then
            ' rst("reminder6On") = Date
             End If
    D'avance merci !
    MdF

  19. #19
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 888
    Par défaut
    Bonjour Di Francesco,

    Ça va prendre un peu plus d'explications.

    Le IsDate va vérifier s'il y a une saisie qui correspond à une date. Le IsNull va vérifier s'il y a une donnée qui correspond à n'importe quoi.

    Pour ce qui est du If, ça fonctionne avec n'importe quoi, ça vérifie si c'est vrai ou faux, donc le problème vient d’ailleurs.

    Voici un exemple qui va te donner pour chaque enregistrement de ta table une réponse si il y a ou non des données dans le champ date de ta table:
    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
        Dim db As DAO.Database: Set db = CurrentDb
        Dim rst As DAO.Recordset
        Dim strSQL As String
     
        strSQL = "SELECT Ta_Table.ProduitA, Ta_Table.Date_Ta_Table FROM Ta_Table;"
        Set rst = db.OpenRecordset(strSQL)
        While rst.EOF = False
        If IsNull(rst("Date_Ta_Table")) Then
            MsgBox "test nul", vbCritical
        Else
            MsgBox "test plein", vbCritical
        End If
        rst.MoveNext
        Wend
        rst.Close
        Set rst = Nothing
        Set db = Nothing
    Maintenant si tout est dans le même If, une fois que la première condition est vérifié on passe a l'enregistrement suivant donc on ne passe pas le Else ou ElseIf, c'est peut-être là ton problème?

    A+

  20. #20
    Membre averti
    Femme Profil pro
    Legalité Financière & coordinateur de subventions
    Inscrit en
    Novembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Legalité Financière & coordinateur de subventions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 18
    Par défaut
    Bonsoir Robert,

    .. Je ne m'en sors pas .. j'ai probablement cafouiller quelque part .. En fait j'ai fermer le While pour l'update automatique de la date orignal d'envoi (Sending Date) et ré-ouvert pour la condition .. mais j'ai un message d'erreur "while sans wend ..et pourtant il y est. Je copie le code ci-après :

    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
     
    Public Function SendEMail()
     
     
    On Error GoTo Err_SendEmail
        Dim db As DAO.Database: Set db = CurrentDb
        Dim rst As DAO.Recordset
        Dim strSQL As String
     
     
        Dim objOutlook As New Outlook.Application
        Dim objMail As Outlook.MailItem
        Set OutApp = CreateObject("Outlook.Application")
        Set OutMail = OutApp.CreateItem(olMailItem)
     
        strSQL = "SELECT qryEmailList.ProjectRef, qryEmailList.email,qryEmailList.PO,qryEmailList.TM_eMail,qryEmailList.RemindersendOn,QryEmailList.Reminder2On,QryEmailList.Reminder3On,QryEmailList.Reminder4On,QryEmailList.Reminder5On,QryEmailList.Reminder6On, qryEmailList.SendingDate  FROM qryEmailList;"
     
        Set rst = db.OpenRecordset(strSQL)
        While rst.EOF = False
          Set objOutlook = CreateObject("Outlook.Application")
     
            Set objMail = objOutlook.CreateItem(olMailItem)
     
            'With OutMail
     With objMail
                .To = rst("email")
                .CC = rst("TM_eMail")
                .Body = "Dear ... Blablabla "
               .BCC = "DeliverablesReminders@xxxxxx.xx"
                .Subject = rst("ProjectRef")
     
                'On change l'expéditeur e-mail en faisant appel à la fonction chooseemail
                .SendUsingAccount = OutApp.Session.Accounts.Item(2)  'Ici ce serait l'adresse # 2 du code d'avant
     
           .Send
        ' .Display:   'display le message en cas de nécessité pour tester le code .. naturellement mettre en commentaire le .sent
     
            End With
            rst.Edit
     
           rst("Sendingdate") = DateAdd("d", 30, Date)
            rst.Update
            Set objMail = Nothing
            Set objOutlook = Nothing
            rst.MoveNext
            rst.Update
            Wend
            Set rst = Nothing
            Set db = Nothing
     
           While rst.EOF = False
     
            If IsNull(rst("sendingdate")) Then
            rst("remindersendon") = Date
            If IsNull(rst("reminder2On")) Then
            rst("reminder2On") = Date
            If IsNull(rst("reminder3On")) Then
             rst("reminder3on") = Date
            If IsNull(rst("reminder4On")) Then
            rst("reminder4on") = Date
            If IsNull(rst("reminder5On")) Then
             rst("reminder5on") = Date
            If IsNull(rst("reminder6On")) Then
            rst("reminder6On") = Date
             End If
     
             rst.MoveNext
             Wend
        rst.Close
        Set rst = Nothing
        Set db = Nothing
     
     
            Set objMail = Nothing
            Set objOutlook = Nothing
     
     
     
    Exit_SendEmail:
       DoCmd.SetWarnings True
       DoCmd.Hourglass False
       Exit Function
     
    Err_SendEmail:
       sErr = "Error " & Error & " / " & Err
       MsgBox sErr, vbInformation + vbOKOnly, "Error on Email function"
       Resume Exit_SendEmail
     
    End Function
    Merci pour ton aide.
    MdF

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/07/2009, 11h44
  2. Réponses: 14
    Dernier message: 17/11/2005, 18h16
  3. Envoi de mail automatique avec Visual C++
    Par cza dans le forum MFC
    Réponses: 2
    Dernier message: 22/02/2005, 16h59
  4. Envoi d'un mail automatiquement
    Par batmat86 dans le forum C++Builder
    Réponses: 10
    Dernier message: 16/06/2004, 10h20

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