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

Access Discussion :

Requêtes sur enregistrements avec critères dates


Sujet :

Access

  1. #1
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut Requêtes sur enregistrements avec critères dates
    Bonjour,

    Voici mon cas de figure mais cette fois plus explicite et avec plus de code, j'ai du refaire une nouvelle discussion .

    j'ai deux tables TBL_ENQUETES et TBL_CONTACTS
    le principe est : avertir lorsque des enquêtes arrivent à échéance.

    TBL_ENQUETES
    Pièce jointe 1342

    TBL_CONTACTS
    Pièce jointe 1343



    Pour chaque contacts vérifier a partir de la table TBL_CONTACTS que le bénéficiaire est actif (CON_DDF =
    null), vérifier la date de la dernière enquête et calculer le nombre de jours qui la sépare de la date du
    jour. Si le type de l'enquête (ID_CATEGORIE) concernée est "FAMILLE" , il faut retenir l'enregistrement si le
    nombre de jours calculé est supérieur à 6 mois.
    Si le type est autre que "famille", il faut retenir les enregistrements si le nombre de jours calculé est
    supérieur à 365 jours.
    Je dois créer un programme qui va avertir par une fenêtre message que les enquêtes doivent être révisées quand
    elles sont trop anciennes. Donc les enquêtes qui concernent les "FAMILLES" doivent être révisées tous les 6
    mois. Les autres doivent être révisées tous les ans.
    Je sais pas mais je pense qu’avec uniquement du code sql on y arrivera pas je comptais faire tout d’abord une
    requête sql permettant de chercher la dernière date de l’enquête parmis les plusieurs enregistrements pour UN
    seul CONTACTS et ça pour tous les contacts,
    Mon code ressemble à ça, n'arrivant pas à réaliser une requête combinant à la fois les dernières dates
    d'enregistrements ansi que les béneficiaires,j'ai decomposé en 3 requêtes sql mon code :

    Sub Formload()

    dim SQLactifs as String 'requête pour sortir les enreg. des contacts toujours actifs
    dim SQLfam as String 'requête pour sortir les enreg. des contacts de la Categorie FAMILLE ceux pour
    'lesquels l'interval est de 6 mois
    dim SQLautr as String 'requête pour sortir les enreg. des autres contacts ceux pour
    'lesquels l'interval est de 1 ans
    Dim months As Variant
    Dim rs As DAO.Recordset

    SQLactifs= "SELECT TBL_ENQUETES.ID_ENQUETE, TBL_ENQUETES"
    SQLactifs= SQLactifs & ".ID_CONTACT FROM TBL_CONTACTS INNER JOIN"
    SQLactifs= SQLactifs & " TBL_ENQUETES ON TBL_CONTACTS.ID_CONTACT = "
    SQLactifs= SQLactifs & "TBL_ENQUETES.ID_CONTACT"
    SQLactifs= SQLactifs & "WHERE (((TBL_CONTACTS.CON_DDF) Is Null));"
    CurrentProject.Connection.Execute SQLactifs
    CurrentProject.Connection.Errors.Clear

    SQLfam= SQLactifs & "SELECT [TBL_ENQUETES].[ID_ENQUETE]"
    SQLfam= SQLfam & ", [TBL_ENQUETES].[ID_CONTACT]"
    SQLfam= SQLfam & "FROM TBL_CONTACTS INNER JOIN TBL_ENQUETES ON "
    SQLfam= SQLfam & "TBL_CONTACTS].[ID_CONTACT]=[TBL_ENQUETES].[ID_CONTACT]"
    SQLfam= SQLfam & "WHERE ((([TBL_ENQUETES].[ENQ_P_A_CATEGORIE])="FAMILLE"));"


    'POUR LA CATEGORIE FAMILLE:
    Set rs = CurrenDb.OpenRecordset(SQLfam)
    rs.MoveLast
    rs.MoveFirst
    NbrOccurences = rs.RecordCount

    ' ici je dois travailler sans doute avec SQLfam pour touver les dates de plus de 6
    ' mois d'intervalle en fesant attention de tenir compte de la dernière date enregistrée pour chaque
    ' contacts

    'LES DERNIERES DATES DE CHAQUES CONTACTS: ? je ne sais pas comment implementer ce code sql dans la procédure

    ????????

    SELECT TBL_ENQUETES.ID_CONTACT, Max(TBL_ENQUETES.ENQ_DATE) AS ENQ_DATE
    FROM TBL_CONTACTS INNER JOIN TBL_ENQUETES ON TBL_CONTACTS.ID_CONTACT = TBL_ENQUETES.ID_CONTACT
    GROUP BY TBL_ENQUETES.ID_CONTACT;


    ????????

    do listbox.item.add (DateDiff( "m", rs!ENQ_Date , Getdate() ) )
    rs.movenext
    loop until rs.eof


    ' ensuite les contacts dont l'intervalle est de 1 an
    'POUR LES AUTRES CATEGORIES:


    SQLautr= SQLactifs & "SELECT [TBL_ENQUETES].[ID_ENQUETE]"
    SQLautr= SQLautr & ", [TBL_ENQUETES].[ID_CONTACT]"
    SQLautr= SQLautr & "FROM TBL_CONTACTS INNER JOIN TBL_ENQUETES ON "
    SQLautr= SQLautr & "TBL_CONTACTS].[ID_CONTACT]=[TBL_ENQUETES].[ID_CONTACT]"
    SQLautr= SQLautr & "WHERE ((([TBL_ENQUETES].[ENQ_P_A_CATEGORIE])<>"FAMILLE"));"

    Set rs = CurrenDb.OpenRecordset(SQLautr)..


    ??????
    ....



    End Sub


    Voici en gros, est-ce que le code que j'ai fait est bon? Je n'arrives pas à implementer le code sql qui sélectionne la date la plus récente ?


    Pour la suite:
    -Je devrais comparer ces dates à la date d'aujourd' hui
    et donc calculer une difference de temps et en fonction de la categorie
    enquête (ENQ_CAT) si cette difference est supérieur à 6 mois ou 1 an
    faire un message pour faire une nouvelles equête pour les contacts
    concernés.
    -Ensuite par regroupement envoyer le résultats avec les coordonnées et
    dernière date d'enquête des personnes vers un rapport Etat pour Inmpression
    à partir d'un bouton sur un formulaire.

    Merci de m'aider c'est fort urgent.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    Bonjour,

    cette requête peut résoudre le problème posé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    SELECT tbl_contacts.id_contact, tbl_enquetes.enq_p_a_categorie, Max(tbl_enquetes.enq_date) AS [Date de la dernière enquête qui doit être révisée]
    FROM tbl_contacts INNER JOIN tbl_enquetes ON tbl_contacts.id_contact = tbl_enquetes.id_contact
    WHERE (((tbl_contacts.con_ddf) Is Null))
    GROUP BY tbl_contacts.id_contact, tbl_enquetes.enq_p_a_categorie
    HAVING (((Max(tbl_enquetes.enq_date))<=IIf([enq_p_a_categorie]="famille",Date()-180,Date()-365)));

  3. #3
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut
    Bonjour,

    Merci Philben, c'est parfait je l'ai tester, effectivement ce code permet non seulement de choisir les personnes actifs mais également, selon la catégorie, faire le calcul d’échéance c génial !!!. Le code sql se simplifie pas besoin de faire plusieurs requêtes.


    Juste une precision , pour avoir un peu plus de precision sur la requete par exemple
    En ajoutant le nom et prenom de la personne a partir du TBL_CONTACTS serait plus parlant pour la personne qui vera cette liste. Parlant de liste cette requête je devrais le mettre dans une listebox dans un formulaire. Et comme je vois qu’il y a bcp d’enquêtes à à mettre à jour, à réaliser ! La bonne solution sera de faire quoi ?

    Voici ce à quoi j’arrive est-ce bon ?:

    Sub Formload()


    Dim Id_Arg As Integer
    Dim Reference As Integer
    Dim Localisation As StringRoman
    ‘Dim Argument As String
    'Dim Description As String


    Dim SQL as String
    Dim rs As DAO.Recordset

    SQL= "SELECT TBL_CONTACTS.ID_CONTACT,[/FONT][/FONT]"
    SQL= SQL & "TBL_ENQUETES.ENQ_P_A_CATEGORIE,"
    SQL= SQL & " Max(TBL_ENQUETES.ENQ_DATE) AS "
    SQL= SQL & "[Date de la dernière enquête qui doit être révisée]"
    SQL= SQL & "FROM TBL_CONTACTS INNER JOIN TBL_ENQUETES"
    SQL= SQL & "ON TBL_CONTACTS.ID_CONTACT = "
    SQL= SQL & "TBL_ENQUETES.ID_CONTACT "
    SQL= SQL & "WHERE ((( TBL_CONTACTS.CON_DDF) Is Null))"
    SQL= SQL & "GROUP BY TBL_CONTACTS.ID_CONTACT, "
    SQL= SQL & "TBL_ENQUETES.ENQ_P_A_CATEGORIE"
    SQL= SQL & "HAVING (((Max(TBL_ENQUETES.ENQ_DATE))"
    SQL= SQL & "))<=IIf([ENQ_P_A_CATEGORIE]="famille""
    SQL= SQL & "",Date()-180,Date()-365)));"



    CurrentProject.Connection.Execute SQL
    CurrentProject.Connection.Errors.Clear


    Set rs = CurrenDb.OpenRecordset(SQL)
    rs.MoveLast
    rs.MoveFirst
    NbrOccurences = rs.RecordCount

    ’ je ne sais pas comment implementer ce code sql dans la procédure
    ‘ Pour mettre les données de la requête dans une liste d’un formulaire en incluant
    aussi les noms des contacts par exemple?:

    Set rs = CurrenDb.OpenRecordset(SQL)

    do listbox.item.add (rs)
    rs.movenext
    loop until rs.eof


    'permet d’afficher le message d’alerte avec bouton rouge si enquêtes > à 100
    sinon simple VBOKonly si inf à 100 et rien du tout si pas d’occurrences du click sur OK

    If NbrOccurences >100 Then
    Msgbox( …rouge
    Formenq.load

    ElseIf NbrOccurences <= 100 Then
    Msgbox(…

    ElseIf NbrOccurences = 0 Then
    End IF


    Remarque je dois également stocker dans une Table existante TBL_ARGUMENTS,
    Les paramètres, les nbs de jours pour les cas des 6 mois et des 12 mois, je sias pas si l’idée est bonne ?

    'do listbox.item.add (DateDiff( "m", rs!ENQ_Date , Getdate() ) )
    rs.movenext
    loop until rs.eof

    Id_Arg = 0
    Reference = 0
    Localisation = "FRM_ENQUETE_A_JOUR"

    rs.MoveLast
    rs.MoveFirst


    do
    rs.OpenRecordset ("TBL_ARGUMENTS")
    rs.AddNew
    rs.Fields.Append (Id_Arg)
    rs.Fields.Append (Reference)
    rs.Fields.Append (Localisation)
    rs.Fields.Append (rs![TBL_CONTACTS].[ID_CONTACT])
    rs.Fields.Append (DateDiff( "m", rs!ENQ_Date , Getdate() ))
    rs.Update
    rs.movenext
    loop until rs.eof

    End Sub


    Je m’aperçois que le champ ID_ENQUETE ne figure pas sans doute pour éviter des problèmes quand il y a parfois 2 num ID_ENQUETE pour un même contact et le même jour. Alors dans ce cas serait ce possible de choisir les num ID_ENQUETE les plus récents ?

    Merci encore de m'aider.

  4. #4
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut
    Oups,

    J'ai oublié d'ajouter la table argument

    Pièce jointe 1353

    Encore merci..

  5. #5
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Un coup tu utilises DAO un coup ADO

    Pense à utiliser les balises Code pour mettre tes messages en forme. C'est illisible

  6. #6
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut
    Bonjour,

    Désolé, je suis nouveau en programmation, je dois faire ça en DAO mais je pense que je suis en DAO ?

    Merci pour la remarque là j'utilise la balise code , effectivement sinon ça mets un temps fou à devoir mettre en forme convenablement .

    Pourriez vous m'aider, s'il vous plaîts, pour ce programme comme vous le voyez je ne maîtrise pas bcp VBA Access pour le moment .

    Pour ce qui est de cette partie de code qui concerne la liste qui va récupérer le résultat SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Set rs = CurrenDb.OpenRecordset(SQL)
     
    do listbox.item.add (rs)
    rs.movenext
    loop until rs.eof
    -Est-ce que c'est nécessaire? ou pourrais-je peut être directement
    prendre le code sql et mettre ça dans la zone de liste d'un formulaire: propriétes -> Données -> Contenu.
    Comme ça je n'aurai pas a spécifier le chemin de cette formulaire car
    la procédure Formload() je pense la mettre dans un module qui s' éxecutera à l'ouverture de la base, je pense que c'est comme ça ?

    -Et si c'est necessaire, tout d'abord dois-je specifier les différentes colonnes ? Car je voudrais mettre le résultat du code SQL c'est à dire plusieurs champs. Et comment je pourrais faire en sorte d'ajouter au code SQL existant en plus le champ ID_ENQUETE et CON_NOM


    Voici le code générale:
    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
    Sub Formload()
    
    Dim Id_Arg As Integer
    Dim Reference As Integer
    Dim Localisation As StringRoman
    ‘Dim Argument As String
    'Dim Description As String
    
    Dim SQL as String 
    Dim rs As DAO.Recordset
     
    SQL= "SELECT TBL_CONTACTS.ID_CONTACT,[/FONT][/FONT]"
    SQL= SQL & "TBL_ENQUETES.ENQ_P_A_CATEGORIE,"
    SQL= SQL & " Max(TBL_ENQUETES.ENQ_DATE) AS "
    SQL= SQL & "[Date de la dernière enquête qui doit être révisée]"
    SQL= SQL & "FROM TBL_CONTACTS INNER JOIN TBL_ENQUETES"
    SQL= SQL & "ON TBL_CONTACTS.ID_CONTACT = "
    SQL= SQL & "TBL_ENQUETES.ID_CONTACT "
    SQL= SQL & "WHERE ((( TBL_CONTACTS.CON_DDF) Is Null))"
    SQL= SQL & "GROUP BY TBL_CONTACTS.ID_CONTACT, "
    SQL= SQL & "TBL_ENQUETES.ENQ_P_A_CATEGORIE"
    SQL= SQL & "HAVING (((Max(TBL_ENQUETES.ENQ_DATE))"
    SQL= SQL & "))<=IIf([ENQ_P_A_CATEGORIE]="famille""
    SQL= SQL & "",Date()-180,Date()-365)));"
    
    
    CurrentProject.Connection.Execute SQL
    CurrentProject.Connection.Errors.Clear
     
    Set rs = CurrenDb.OpenRecordset(SQL)
    rs.MoveLast
    rs.MoveFirst
    NbrOccurences = rs.RecordCount
     
    ’ je ne sais pas comment implementer ce code sql dans la procédure 
    ‘ Pour mettre les données de la requête dans une liste d’un formulaire en incluant 
    aussi les noms des contacts par exemple?:
     
    Set rs = CurrenDb.OpenRecordset(SQL)
     
    do listbox.item.add (rs)
    rs.movenext
    loop until rs.eof
    
    'permet d’afficher le message d’alerte avec bouton rouge si enquêtes > à 100
    sinon simple VBOKonly si inf à 100 et rien du tout si pas d’occurrences du click sur OK 
     
    If NbrOccurences >100 Then
    Msgbox( …rouge
    Formenq.load
     
    ElseIf NbrOccurences <= 100 Then
    Msgbox(…
     
    ElseIf NbrOccurences = 0 Then
    End IF
     
    Remarque je dois également stocker dans une Table existante TBL_ARGUMENTS, 
    Les paramètres, les nbs de jours pour les cas des 6 mois et des 12 mois, je sias pas si l’idée est bonne ?
    
    'do listbox.item.add (DateDiff( "m", rs!ENQ_Date , Getdate() ) )rs.movenextloop until rs.eof
     
    Id_Arg = 0
    Reference = 0
    Localisation = "FRM_ENQUETE_A_JOUR"
     
    rs.MoveLast
    rs.MoveFirst
     
    do
    rs.OpenRecordset ("TBL_ARGUMENTS")
    rs.AddNew
    rs.Fields.Append (Id_Arg)
    rs.Fields.Append (Reference)
    rs.Fields.Append (Localisation)
    rs.Fields.Append (rs![TBL_CONTACTS].[ID_CONTACT])
    rs.Fields.Append (DateDiff( "m", rs!ENQ_Date , Getdate() ))
    rs.Update
    rs.movenext
    loop until rs.eof
     
    End Sub

    Merci beaucoup

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    Re Bonjour,

    La requête peut, en effet, être la source d'un contrôle et les champs id_enquete, con_nom,etc peuvent être ajoutés (a faire de préférence dans l'éditeur de requête pour éviter les erreurs...).

    bon courage

  8. #8
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut
    Bonjour,

    Merci Philben donc c'est mieux de faire avec l'editeur SQL d'ACCESS.

    j'ai améliorer mon code maintenant je reste coincé qu'a un seul endroit c'est au niveau de l'enregistrement dans la table Argument. J'ai egalament
    fait le forumulaire avec les listes (6mois et 1an) mais qui pour le moment contient uniquement les requêtes que vous m'avez donné et que je vous en remercie beaucoup.

    Les requetes sql contenu dans les listes se trouvent et le formulaire se trouve en telechargement.


    Apercu du formulaire:
    formulaire.doc

    Codes SQL des listes du formulaire
    SQL+ 6mois+1an.doc


    Voici l'aperçu de mon code actuel:

    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
     
    Sub Formload()
    Dim Id_Arg As Integer
    Dim Reference As Integer
    Dim Localisation As String
    'Dim Argument As String
    'Dim Description As String
    Dim Reponsgbox As String
    Dim NbrOccurences As Integer
    Dim SQL As String
    Dim rs As DAO.Recordset
     
    SQL = "SELECT TBL_CONTACTS.ID_CONTACT,[/FONT][/FONT]"
    SQL = SQL & "TBL_ENQUETES.ENQ_P_A_CATEGORIE,"
    SQL = SQL & " Max(TBL_ENQUETES.ENQ_DATE) AS "
    SQL = SQL & "[Date de la dernière enquête qui doit être révisée]"
    SQL = SQL & "FROM TBL_CONTACTS INNER JOIN TBL_ENQUETES"
    SQL = SQL & "ON TBL_CONTACTS.ID_CONTACT = "
    SQL = SQL & "TBL_ENQUETES.ID_CONTACT "
    SQL = SQL & "WHERE ((( TBL_CONTACTS.CON_DDF) Is Null))"
    SQL = SQL & "GROUP BY TBL_CONTACTS.ID_CONTACT, "
    SQL = SQL & "TBL_ENQUETES.ENQ_P_A_CATEGORIE"
    SQL = SQL & "HAVING (((Max(TBL_ENQUETES.ENQ_DATE))"
    SQL = SQL & "))<=IIf([ENQ_P_A_CATEGORIE]='FAMILLE',"
    SQL = SQL & "Date()-180,Date()-365)));"
    CurrentProject.Connection.Execute SQL
    CurrentProject.Connection.Errors.Clear
     
    Set rs = CurrentDb.OpenRecordset(SQL)
    rs.MoveLast
    rs.MoveFirst
    NbrOccurences = rs.RecordCount
     
    ' je ne sais pas comment implementer ce code sql dans la procédure
    ' Pour mettre les données de la requête dans une liste d'un formulaire en incluant
    ' aussi les noms des contacts par exemple?:
     
    Set rs = CurrentDb.OpenRecordset(SQL)
     
    'Do
    'ListBox.Item.Add (rs)
    'rs.MoveNext
    'Loop Until rs.EOF
    'permet d'afficher le message d'alerte avec bouton rouge si enquêtes > à 100
    'sinon simple VBOKonly si inf à 100 et rien du tout si pas d'occurrences du click sur OK
     
    If NbrOccurences > 100 Then
      Reponsgbox = MsgBox("Attention, vous devez faire des enquetes", vbYesNo, "Avertissememt")
      If Reponsgbox = vbYes Then
      Dim Monform As Form
      Set Monform = Forms("FRM_ENQJOUR")
      Monform.Open
      End If
     
    ElseIf NbrOccurences <= 100 Then
      MsgBox "Attention, vous devez faire des enquetes", vbOKOnly, "Avertissememt"
    ElseIf NbrOccurences = 0 Then
    End If
     
    'Remarque je dois également stocker dans une Table existante TBL_ARGUMENTS,
    'Les paramètres, les nbs de jours pour les cas des 6 mois et des 12 mois, je sias pas si l'idée est bonne ?
    'do listbox.item.add (DateDiff( "m", rs!ENQ_Date , Getdate() ) )
    'rs.movenext
    'loop until rs.eof
     
    Id_Arg = 0
    Reference = 0
    Localisation = "FRM_ENQUETE_A_JOUR"
     
    rs.MoveLast
    rs.MoveFirst
     
    Do
    rs.OpenRecordset ("TBL_ARGUMENTS")
    rs.AddNew
    rs.Fields.Append (Id_Arg)   
    rs.Fields.Append (Reference)
    rs.Fields.Append (Localisation)
    rs.Fields.Append (rs![TBL_CONTACTS].[ID_CONTACT])
    rs.Fields.Append (DateDiff("m", rs!ENQ_Date, Getdate()))
    rs.Update
    rs.MoveNext
    Loop Until rs.EOF
     
    End Sub


    ATTENTION ça bloque au niveau du gras la variable Id_Arg ?

    Encore merci

  9. #9
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    Bonjour,

    A première vue, Il y a beaucoup d'erreurs dans le code de formload en particulier le remplissage de la table tbl_arguments.

    Ecrire un truc comme ça :
    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
    dim oDb as dao.database
    dim Rs2 as dao.recordset
    set oDb = currentdb()
    set Rs2 = oDb.OpenRecordset ("TBL_ARGUMENTS",dbopentable)
    Do Until rs.EOF = true
    rs2.AddNew
    rs2.Fields ("NOM_champ_Id_Arg")   = id_arg
    rs2.Fields("nom_champ_Reference") = YYY
    ' etc...
    rs2.Update
    rs.MoveNext
    Loop
    
    set rs2 = nothing
    set odb = nothing
    mais à chaque fois que l'on ouvre ce formulaire il va ajouter des enr. dans cette table => doublons

    autres erreurs :
    - Balise [FONT] dans la requete
    - CurrentProject.Connection.Execute SQL et CurrentProject.Connection.Errors.Clear sont inutiles
    - pour ouvrir le form "FRM_ENQJOUR" passer plutot par docmd.openform,....
    - etc...

    bon courage,

  10. #10
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut
    Bonjour Philben,

    Désolé du retard , encore merci pour ta réponse, tu as déceler toutes les erreurs que j'avais . Je pense que ça devrait arranger le problème je vais le tester et j' avertirai de la suite.

    Merci beaucoup

  11. #11
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut
    Bonjour Philben,

    Apres essai je me rend compte que il reste encore
    un probleme au niveau de l'enregistrement de la table Argument
    par la requete.

    voici mon 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
    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
     
     
    Option Compare Database
     
    Sub Formload()
     
    Dim Id_Arg As Integer
    Dim Reference As Integer
    Dim Localisation As String
    Dim Reponsgbox As String
     
    Dim NbrOccurences As Integer
    Dim SQL As String
    Dim rs As dao.Recordset
    Dim oDb As dao.Database
    Dim rs2 As dao.Recordset
     
    SQL = "SELECT TBL_CONTACTS.ID_CONTACT,"
    SQL = SQL & "TBL_ENQUETES.ENQ_P_A_CATEGORIE,"
    SQL = SQL & " Max(TBL_ENQUETES.ENQ_DATE) AS "
    SQL = SQL & "[Date de la dernière enquête qui doit être révisée]"
    SQL = SQL & " FROM TBL_CONTACTS INNER JOIN TBL_ENQUETES "
    SQL = SQL & "ON TBL_CONTACTS.ID_CONTACT = "
    SQL = SQL & "TBL_ENQUETES.ID_CONTACT "
    SQL = SQL & "WHERE ((( TBL_CONTACTS.CON_DDF) Is Null)) "
    SQL = SQL & "GROUP BY TBL_CONTACTS.ID_CONTACT, "
    SQL = SQL & "TBL_ENQUETES.ENQ_P_A_CATEGORIE "
    SQL = SQL & "HAVING (((Max(TBL_ENQUETES.ENQ_DATE))"
    SQL = SQL & "))<=IIf([ENQ_P_A_CATEGORIE]='FAMILLE', "
    SQL = SQL & "Now()-180,Now()-365);"
     
    Set rs = CurrentDb.OpenRecordset(SQL)
    rs.MoveLast
    rs.MoveFirst
    NbrOccurences = rs.RecordCount
     
    Set rs = CurrentDb.OpenRecordset(SQL)
     
    'Do
    'ListBox.Item.Add (rs)
    'rs.MoveNext
    'Loop Until rs.EOF
     
    'permet d'afficher le message d'alerte avec bouton rouge si enquêtes > à 100
    'sinon simple VBOKonly si inf à 100 et rien du tout si pas d'occurrences du click sur OK
     
    If NbrOccurences > 100 Then
      Reponsgbox = MsgBox("Attention, vous devez faire des enquetes", vbYesNo, "Avertissememt")
      If Reponsgbox = vbYes Then
      DoCmd.OpenForm "FRM_ENQESS"
      End If
     
    ElseIf NbrOccurences <= 100 Then
      MsgBox "Attention, vous devez faire des enquetes", vbOKOnly, "Avertissememt"
     
    ElseIf NbrOccurences = 0 Then
    End If
     
    Reference = 0
    Localisation = "FRM_ENQUETE_A_JOUR"
    'rs.MoveLast
    'rs.MoveFirst
     
    Set oDb = CurrentDb()
     
    Set rs2 = oDb.OpenRecordset("TBL_ARGUMENTS")
     
    rs2.MoveLast
    rs2.MoveFirst
     
    Do Until rs.EOF = True
    rs2.AddNew
    rs2.Fields("ARG_REFERENCE") = Reference
    rs2.Fields("ARG_LOCALISATION") = Localisation
    rs2.Fields("ARG_ARGUMENT") = rs![TBL_CONTACTS].[ID_CONTACT]
     
    rs2.Fields("ARG_DESCRIPTION") = (DateDiff("m", rs!ENQ_DATE, Now()))
     
    rs2.Update
    rs.MoveNext
    Loop
     
    Set rs2 = Nothing
    Set oDb = Nothing
     
    End Sub
    J'ai une erreur de compilation a cette ligne :

    rs2.Fields("ARG_ARGUMENT") = rs![TBL_CONTACTS]![ID_CONTACT]

    Erreur d execution 3265

    Je vois pas d'ou peut venir le probleme, serait ce du a une mauvaise formulation de code ou au fait que ID.CONTACT de la table TBL_CONTACTS soit une cle primaire car j'ai bel et bien un champ ID.CONTACT dans cette table?

    Pourriez vous m'aider s'il vous plait ?

    Merci

Discussions similaires

  1. Requête Père-Enfant avec critères multiples sur enfants
    Par gtaman dans le forum Langage SQL
    Réponses: 6
    Dernier message: 30/10/2013, 21h57
  2. [AC-2010] Requête avec critère date et heure
    Par Ovr19 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 08/07/2011, 00h09
  3. Requête de stocks avec critères de dates
    Par fred_vannes56 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 13/05/2008, 16h15
  4. [MySQL] Aide requête MySQL : sélection aléatoire d'un enregistrement avec critère
    Par iwf-fr dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 07/05/2007, 09h01
  5. [Requête] Difficile (impossible ?) avec des dates
    Par starch dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 06/04/2004, 11h26

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