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 :

Comment rédiger et où placer le code VBA ACCESS pour l'envoi automatique et conditionnel d'Email?


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Formateur
    Inscrit en
    Novembre 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Formateur

    Informations forums :
    Inscription : Novembre 2014
    Messages : 59
    Points : 31
    Points
    31
    Par défaut Comment rédiger et où placer le code VBA ACCESS pour l'envoi automatique et conditionnel d'Email?
    Bonjour,

    J'ai un formulaire F_rappel120jours attaché à une requête R_Rappel120jours qui affiche tous les enregistrements dont la date d'échéance est inférieure à 120 jours.
    La durée restant est calculée à l'ouverture du formulaire qui exécute la requête: Reste: [JourDeLaFormation]-Maintenant()

    Je voudrais lors de l'ouverture du formulaire envoyer automatiquement des Emails en fonction de la valeur de [Reste] pour cela j'ai écrit le code ci-dessous qui doit sans doute comporter des erreurs mais que surtout je ne sais pas où mettre.
    Comme il s'agit d’évaluer la valeur [Reste] pour chaque enregistrement affiché je suppose qu'il faut faire un module indépendant mais alors je ne sais pas comment le rattacher à l'événement "ouverture" de mon formulaire, sinon où et comment l'inclure directement dans le code du formulaire pour obtenir l'effet escompter?

    Merci d'avance de votre aide. je ne saurais jamais assez remercier les personnes répondant sur ce forum de leurs aide précieuse pour des utilisateurs et programmeurs Access occasionnels comme moi, c'est très appréciable... est apprécié!! :-)
    Voici mon code que j'ai pour le moment mis dans un module... Dont je ne sais trop quoi faire pour l'instant! :

    Option Compare Database

    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
    Sub SendAlert()
        Dim SendAlert As Object
        Set SendAlert = CreateObject("SendAlert")
     
        Select Case Reste
            Case 118 To 120
                With SendAlert
                    .To = Me.Mail.Value
                    .From = Me.RespForm.Value
                    .CC = Me.Hierarchie.Value
                    .Subject = "Expiration d'une habilitation périodique"
                    .Body = "Une de vos habilitations périodiques expirera dans moins de 3 mois veuillez prendre contact avec votre hiérarchie et le service formation pour programmer une session de recyclage. ceci est un message automatique merci de ne pas y répondre."
                    .Send
                End With
     
            Case 5 To 10
                With SendAlert
                    .To = Me.Mail.Value
                    .From = Me.RespForm.Value
                    .CC = Me.Hierarchie.Value
                    .Subject = "Expiration d'une habilitation périodique, second rappel"
                    .Body = "Une de vos habilitations périodiques expirera dans moins de 10 jours veuillez prendre contact avec votre hiérarchie et le service formation pour programmer une session de recyclage. si le recyclage a déjà été fait merci de ne pas tenir compte de ce message généré automatiquement."
                    .Send
                End With
        End Select
     
        Set SendAlert = Nothing
     
    End Sub

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    Il manque l'argument dans ton module pour l'instant. De même le nom de ton module ne peut être ne même temps un objet.
    En gros il faudrait modifier le module global par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Mod_SendAlert(Reste as Integer)
    ......
    ......
    End Sub
    Et lors de l'ouverture du formulaire, parcourir les enregistrements et appeler la fonction avec un Call Mod_SendAlert
    Ce sera un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    With Me.RecordsetClone
         Me.RecordSetClone.Movefirst
         Do Until Me.RecordSetClone.EOF
              Call Mod_SendAlert(Me!ChampReste)
              Me.RecordSetClone.MoveNext
         Loop
    End With
    Attention : code écrit à la volée, non testée

    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Formateur
    Inscrit en
    Novembre 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Formateur

    Informations forums :
    Inscription : Novembre 2014
    Messages : 59
    Points : 31
    Points
    31
    Par défaut
    Merci beaucoup, même si tu as des incertitudes sur ton code, ta réponse à déjà le grand mérite de me resituer les choses et j'ai maintenant une idée plus précise de ce que je dois faire et où! :-)
    je vais tester tout ça et je reviens te tenir au courant.

    Très cordialement

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Formateur
    Inscrit en
    Novembre 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Formateur

    Informations forums :
    Inscription : Novembre 2014
    Messages : 59
    Points : 31
    Points
    31
    Par défaut
    Bonjour,

    Comme promis je reviens après avoir cherché, testé, modifié, adapté, lu des kilomètres forum, pesté, pleuré.... J'ai enfin réussi à coder mon bonheur!
    ci-dessous le qui me permets d'envoyer automatiquement des mail de rappel aux personne concerné et à leurs hiérarchiques à l'ouverture d'un formulaire. ça marche parfaitement et le résultat me conviens tout à fait.
    pour cette raison je clos cette discussion
    mais comme j'ai eu le beurre maintenant j'aimerais assez récupérer l'argent du beurre et si je peux me taper la crémière ce serait top alors j'ouvre une autre discussion dans la foulée avec ce même code pour savoir s'il est possible de l'améliorer... Donc si le sujet vous intéresse je vous dis à tout de suite sur le sujet "envoi de mail automatique et INDIVIDUEL"

    Merci... et j'espère à bientôt

    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
    Private Sub Form_Open(cancel As Integer)
     
    'effectue la requête R_120jours_Et_Inf'
    Me.Requery 
    Me.NbrOccurence = Me.RecordsetClone.RecordCount
     
    On Error GoTo ErrorEmail
     
    'Définition des 2 condition de tri d'envoie de mail: entre 120 et 118 (1er rappel) ou entre 10 et 7 jours (2nd rappel)'
    Dim Rappel1 As Recordset
    Set Rappel1 = CurrentDb.OpenRecordset("R_120_118joursRenouveler") 
    Dim Rappel2 As Recordset
    Set Rappel2 = CurrentDb.OpenRecordset("R_10_7joursRenouveler")
     
     
    'Création de liste des personnes (enregistrements) concernés (stagiaires et hiérarchie correspondante)'
    Rappel1.MoveFirst
    Listerappel1 = ""
    Listerappel1Bis = ""
    Rappel2.MoveFirst
    Listerappel2 = ""
    Listerappel2Bis = ""
     
    While Not Rappel1.EOF
        Listerappel1 = Listerappel1 & Rappel1("AdresseSalarie") & ";"
        Listerappel1Bis = Listerappel1Bis & Rappel1("AdresseHierarchie") & ";"
        Rappel1.MoveNext
    Wend
     
    While Not Rappel2.EOF
        Listerappel2 = Listerappel2 & Rappel2("AdresseSalarie") & ";"
        Listerappel2Bis = Listerappel2Bis & Rappel2("AdresseHierarchie") & ";"
        Rappel2.MoveNext
    Wend
     
    Listerappel1 = Left(Listerappel1, Len(Listerappel1) - 1)
    Listerappel1Bis = Left(Listerappel1Bis, Len(Listerappel1Bis) - 1)
    Rappel1.Close
    Set Rappel1 = Nothing
    Listerappel2 = Left(Listerappel2, Len(Listerappel2) - 1)
    Listerappel2Bis = Left(Listerappel2Bis, Len(Listerappel2Bis) - 1)
    Rappel2.Close
    Set Rappel2 = Nothing
     
    'Ouverture Outlook'
    Dim EnvoiOutlook1 As Object
    Dim MailOutlook1 As Object
    Set EnvoiOutlook1 = CreateObject("Outlook.Application")
    Set MailOutlook1 = EnvoiOutlook1.createitem(0)
    Dim EnvoiOutlook2 As Object
    Dim MailOutlook2 As Object
    Set EnvoiOutlook2 = CreateObject("Outlook.Application")
    Set MailOutlook2 = EnvoiOutlook2.createitem(0)
     
     
    'Envoie des mails correspondant'
     
    If Listerappel1 = "" Then
        Resume Next
     
    ElseIf Listerappel1 <> "" Then
        MailOutlook1.To = Listerappel1
        MailOutlook1.CC = Listerappel1Bis
        MailOutlook1.Subject = "Expiration d'une de vos habilitations périodiques - 1er Rappel"
        MailOutlook1.Body = "Une de vos habilitations périodiques expirera dans moins de 3 mois veuillez prendre contact avec votre hiérarchie et le service formation pour programmer une session de recyclage. ceci est un message automatique merci de ne pas y répondre."
        MailOutlook1.Display
    End If
     
    If Listerappel2 = "" Then
        Resume Next
     
    ElseIf Listerappel2 <> "" Then
        MailOutlook2.To = Listerappel2
        MailOutlook2.CC = Listerappel2Bis
        MailOutlook2.Subject = "Expiration d'une de vos habilitations périodiques - 2nd Rappel"
        MailOutlook2.Body = "Une de vos habilitations périodiques expirera dans moins de 10 jours, si le nécessaire à déjà été fait merci de ne pas tenir compte de ce mail sinon veuillez prendre contact avec votre hiérarchie et le service formation pour programmer une session de recyclage. ceci est un message automatique merci de ne pas y répondre."
        MailOutlook2.Display
    End If
     
    'On ferme!'
    Set EnvoiOutlook1 = Nothing
    Set MailOutlook1 = Nothing
    Set EnvoiOutlook2 = Nothing
    Set MailOutlook2 = Nothing
     
    ErrorEmail:
    Resume Next
     
    End Sub
    A noter: que j'ai configuré les champ email de ma table en texte et pas en hyperlink... Sinon ça ne fonctionné pas bien: l'adresse mail s'affichait en double dans le mail créant la panique d'outlook.

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

Discussions similaires

  1. Comment imprimer un fichier "PRN" via code VBA.
    Par lakhdar16 dans le forum VBA Access
    Réponses: 7
    Dernier message: 08/03/2012, 18h55
  2. comment ajouter une condition if dans code VBA
    Par misig dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 13/12/2007, 00h03
  3. Validité d'un code VBA+SQL pour gestion de mémoire
    Par stefposs dans le forum VBA Access
    Réponses: 2
    Dernier message: 27/09/2007, 13h32
  4. code vba access
    Par heraut dans le forum VBA Access
    Réponses: 1
    Dernier message: 15/08/2007, 13h22
  5. Conversion des codes VBA Access en VB6
    Par cokouT dans le forum Access
    Réponses: 1
    Dernier message: 23/11/2006, 09h52

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