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 :

Mailing Automatique en fonction de la date [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 24
    Points : 12
    Points
    12
    Par défaut Mailing Automatique en fonction de la date
    Bonjour à tous,
    Je suis en stage informatique et mon rôle dans l'entreprise et de créer une BDD sous Access 2010.
    Il m'a été demandé la création d'un mailing automatique en fonction de la date de fin d'une commande.
    Étant donné que je viens commencer le VBA il y a à peine 2h, j'ai quelque souci avec mon code.

    Voila 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
    22
    23
    24
    25
    26
    27
    28
    29
    Private Sub Label0_Click()
        Dim i As Long
        Dim r_test As DAO.Recordset
        Dim sSQL_beg As String
        Dim sSQL_inc As String
        Dim sSQL_end As String
     
        Dim v As Variant
        Dim v_beg As Variant
        Dim v_end As Variant
     
        sSQL_beg = "Select * From t_Inputs ORDER BY ID_Inputs ASC"
        Set r_test = CurrentDb.OpenRecordset(sSQL_beg, dbOpenForwardOnly, dbReadOnly)
        v_beg = r_test![ID_Inputs]
     
        sSQL_end = "Select * From t_Inputs ORDER BY ID_Inputs DESC"
        Set r_test = CurrentDb.OpenRecordset(sSQL_end, dbOpenForwardOnly, dbReadOnly)
        v_end = r_test![ID_Inputs]
     
        For i = v_beg To v_end
            sSQL_inc = "Select * From t_Inputs Where ID_Inputs=i"
            Set r_test = CurrentDb.OpenRecordset(sSQL_inc, dbOpenForwardOnly, dbReadOnly)
            v = r_test![End date]
     
            If v = Date Then
            MsgBox v
            End If
        Next i
    End Sub
    VB me dit qu'il y a un souci au niveau de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set r_test = CurrentDb.OpenRecordset(sSQL_inc, dbOpenForwardOnly, dbReadOnly)
    Cependant quand j’enlève le de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sSQL_inc = "Select * From t_Inputs Where ID_Inputs=i"
    cela fonctionne. Mais du coup ca ne s'incrémente pas dans mes enregistrements de ma table.

    Si quelqu'un peut m'aider à résoudre mon problème à serait vraiment sympa.
    Merci d'avance.

  2. #2
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 626
    Points : 726
    Points
    726
    Par défaut ola dur de dur
    Bonjour,

    Faudrait savoir le but de ce bout de code car effectivement ça sent fort le débutant.

    Ouvrir un recordset dans une boucle .. c'est pas trop halal

    et ça aussi qu'est-ce ?
    en fonction de la date de fin d'une commande

    est-ce que tu veux trouver la dernière commande dans une table ?

    a+

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par naphta Voir le message
    Bonjour,

    Faudrait savoir le but de ce bout de code car effectivement ça sent fort le débutant.

    Ouvrir un recordset dans une boucle .. c'est pas trop halal

    et ça aussi qu'est-ce ?
    en fonction de la date de fin d'une commande

    est-ce que tu veux trouver la dernière commande dans une table ?

    a+
    Bonjour à toi.
    En faite, mon maitre de stage m'a demander un mailing automatique pour prévenir les users quand une Commande (un Projet) approchait de sa fin (End date) écrite dans la table.

    Non je ne veux pas trouver la derniere commande de la table. Je veux vérifier la date (End date) de toute les Commandes, les comparer avec la date du jour et si la date du jour correspond à la date de fin d'une commande, afficher avec MsgBox une phrase (Plus tard cela me permettra d'envoyer un mail mais bon on y est pas encore).

    Et oui je viens de commencer donc je ne savais pas que fait un recordset dans une boucle posait probleme.

  4. #4
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 626
    Points : 726
    Points
    726
    Par défaut un exemple
    re,
    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
     
    Function touveDate()
    'ici on veut toutes les dates supérieures à "06/08/2012"
     
    Dim lasq As String
    Dim rst As Recordset
    Dim ladateatrouver
     
    'Date au format mois/jour/année
    ladateatrouver = Format("06/08/2012", "MM/DD/YYYY")
     
    lasq = "SELECT Projets.IntituleProjet, Projets.MaJLe"
    lasq = lasq + " From Projets"
    lasq = lasq + " WHERE (Projets.MaJLe)>#" + ladateatrouver + "#"
     
    Set rst = CurrentDb.OpenRecordset(lasq, dbOpenSnapshot)
     
    If Not rst.NoMatch Then
        Do Until rst.EOF
            Debug.Print rst!MaJLe
            rst.MoveNext
        Loop
    Else
        MsgBox "Rien !"
    End If
     
    rst.Close: Set rst = Nothing
     
    End Function
    Voici un exemple,
    je ne sais pas si cela répond à tes attentes

    a+

    ps : pour le debug dans le menu
    affichage > fenêtre d'exécution

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Bonjour,
    J'ai modifié un peu ton code en mettant les valeur qui me convenait.
    Cependant ca n'a pas l'air de marcher.

    Voila ton code modifié:

    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
     
     
    Private Sub Label0_Click()
     
        Dim lasq As String
        Dim rst As Recordset
        Dim ladateatrouver
     
        'je séléctionne la date du jour
        ladateatrouver = Format(Date, "DD/MM/YYYY")
     
        MsgBox ladateatrouver
     
        lasq = "SELECT *"
        lasq = lasq + " From t_Inputs"
        lasq = lasq + " WHERE (t_Inputs.[End date])=#" + ladateatrouver + "#"
     
        Set rst = CurrentDb.OpenRecordset(lasq, dbOpenSnapshot)
     
        If Not rst.NoMatch Then
            Do Until rst.EOF
                Debug.Print rst![End date]
                rst.MoveNext
            Loop
        Else
            MsgBox "Rien !"
    End If
    rst.Close: Set rst = Nothing
     
    End Sub
    Je n'ai pas bien compris le role du If not. C'est surement pour ca que je n'arrive pas a le faire fonctionnait.
    Merci beaucoup pour ton aide.
    Cordialement

  6. #6
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 626
    Points : 726
    Points
    726
    Par défaut la suite
    Bonjour,

    'je séléctionne la date du jour
    ladateatrouver = Format(Date, "DD/MM/YYYY")

    Attention le format est "MM/DD/YYYY"

    seconde chose
    le "If not" correspond au fait que l'on a rien trouvé

    tentes le coups avec plusieurs valeurs de date en mettant la date à rechercher en variable

    Bonne chance

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Bonjour naphta
    C'est bon effectivement c'etait le fait de mettre DD/MM/YYYY qui me faisiat tout planter
    Je te remercie infiniment pour ton aide. Je n'aurai tout simplement pas réussi sans toi.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Bonjour à tous je ré-ouvre ce topic car j'ai une petite question à posé.
    Pour l'instant j'ai créé un bouton pour que ça lance le code VBA. Et si il trouve que la date End date = la date du jour, il envoie via outlook un message à une personne.
    Seulement ce que je voudrai c'est que l'utilisateur n'est pas à cliquer sur le bouton pour que ça lance le code VBA. Mais plutôt que le code se lance à la première ouverture de Access et seulement à la première.
    Est ce que c'est possible ou je reve peut etre un peu trop?
    Merci d'avance pour votre aide.
    Cordialement,

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Ou alors ce qui serait bien se serait que le mail soit envoyé mais à retardement. C'est à dire qu'il arriverait au destinataire à une autre date donnée.
    Pour mon cas le message devrait être reçu à la End date.
    Quelqu'un aurait une idée pour retarder le message?
    Cordialement,

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Bon je crois que j'ai trouvé mon bonheur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    .DeferredDeliveryTime = Date & "Heure"

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Du cou maintenant j'aurai une autre question:

    J'ai un formulaire pour ajouter des Projet et un sous formulaire pour ajouter des détals sur le projet. Le sous formulaire me permet d'ajouter plusieurs enregistrements de détails sous le meme ID_Projet.

    Ce que je veux faire c'est, lorsque j'enregistre mon nouveau Projet, a chaque enregistrement de détail de Projet, il soit envoyé un E-mail avec comme contenu quelques champs de l'enregistrement du détail Projet.

    Par exemple:
    Projet A

    Detail Projet 1 Detail Projet 2 Detail Projet 3

    Envoi E-mail DJ1 Envoi E-mail DJ2 Envoi E-mail DJ3

    Voila ma fonction pour envoyer l'Email à retardement:

    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
     
    Dim strEmail As String
    Dim strObj As String
    Dim strMsg As String
    Dim blnEdit As Boolean
     
    Dim ol As Outlook.Application
    Dim mi As Outlook.MailItem
     
    If IsNull(Me.Email) Or Me.Email = "" Then
            MsgBox ("Choose an Email in the Combo Box Email")
            Exit Sub
    End If
    If IsNull(Me.Obj) Or Me.Obj = "" Then
            Me.Obj = " "
    End If
    If IsNull(Me.Msg) Or Me.Msg = "" Then
            Me.Msg = " "
    End If
     
    ' Créer une instance d'Outlook
    On Error GoTo OLMailErr
    Set ol = New Outlook.Application
     
    ' Créer un objet Email
    Set mi = ol.CreateItem(olMailItem)
     
    ' Paraméter le message
    With mi
        .DeferredDeliveryTime = [Delivery date]  & "9:00"
        .To = [Contact]
        .Subject = [Subjet Detail Project]
        .Body = [Body Detail Project]  
        .Send
    End With
    Set mi = Nothing
    Set ol = Nothing
    Exit Sub
     
    OLMailErr:
        MsgBox "Erreur : " & Err.Number & vbCrLf & Err.Description
        Exit Sub
    Et voila ce que j'ai démarré pour récupérer l'enregistrement Projet et les enregistrements détail projet.

    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
     
    Dim lasq As String
    Dim rst As Recordset
    Dim lastID As Variant
     
    'Save enregistrement
    On Error GoTo Macro1_Err
     
        With CodeContextObject
            On Error Resume Next
            DoCmd.GoToRecord , "", acNext
            If (.MacroError <> 0) Then
                Beep
                MsgBox .MacroError.Description, vbOKOnly, ""
            End If
        End With
     
    'Selection des champs et des tables
     
    lasq = "Select ID_Project From Project Order By ID_Project DESC"
    Set rst = CurrentDb.OpenRecordset(lasq, dbOpenSnapshot)
    lastID = rst![ID_Project]
     
    lasq = "SELECT *"
    lasq = lasq + " From t_PROJECTS, t_DtProject, t_Contact"
    lasq = lasq + "Where t_Project.[ID_Project] = lastID"
    lasq = lasq + "t_Project.ID_Project = t_DtProject.ID_Project AND t_Contact.ID_Contact LIKE t_PROJECTS.[Prg Mngr]"
    Cependant je ne sais pas apres comment dire de récupérer un enregistrement de détail projet à la foi pour pouvoir traiter l'envoi de mail.

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

Discussions similaires

  1. [AC-2010] Pénalité automatique en fonction de la date
    Par AYARINHO dans le forum VBA Access
    Réponses: 8
    Dernier message: 24/02/2014, 18h16
  2. [XL-2010] Mail alerte en fonction d'une date
    Par luis18 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 04/12/2013, 19h44
  3. Envoie mail automatique en fonction d'une date
    Par ju3979 dans le forum Macros et VBA Excel
    Réponses: 39
    Dernier message: 29/06/2009, 14h07
  4. [MySQL] Envoi mail auto en fonction date dans base de donnée
    Par calitom dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 30/06/2008, 15h17
  5. Réponses: 2
    Dernier message: 25/09/2007, 20h03

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