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 :

Requête SQL en VBA avec Date [AC-2007]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2009
    Messages : 16
    Par défaut Requête SQL en VBA avec Date
    Bonsoir,

    Dans une requête de sélection SQL en VBA (Access2007), je compare une donnée date présente dans la table sur laquelle je fais la sélection, et une variable.

    Cela ne fonctionne pas : la donnée dans la table est au format Date/Heure ( à la française) et le VBA transforme la date contenue dans la variable en date à l'anglaise. Ce qui donne des résultats erronés à ma requête de sélection.

    Auriez vous une idée??

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Pourrais-tu nous mettre le code avec la requête que tu utilises, cela permettra aux membres de mieux t'aider.

    Philippe

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2009
    Messages : 16
    Par défaut
    Bonjour,

    J'ai une table analyse dans laquelle j'enregistre des analyses à des dates. L'objectif est de présenter les résultats d'analyse pour tous les sujets sur les 4 dernières dates précédant la date limite saisie par l'utilisateur :
    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
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    Private Sub Commande3_Click()
     
    'varible dans laquelle on sotcke la date maxi saisie par l'utilisateur
    Dim DateF As String
     
     
    Dim Max As Date
    Max = "01/02/2050"
     
    'Définition des variables qui vont contenir les résultats des 4 dernières analyse
    'objectif final : créer 4 requêtes de sélection qui vont venir alimenter des sous états
     
    Dim Date1 As Date
    Dim Date2 As Date
    Dim Date3 As Date
    Dim Date4 As Date
    Dim QryDate1 As DAO.QueryDef
    Dim RsDate1 As DAO.Recordset
    Dim QryDate2 As DAO.QueryDef
    Dim RsDate2 As DAO.Recordset
    Dim QryDate3 As DAO.QueryDef
    Dim RsDate3 As DAO.Recordset
    Dim QryDate4 As DAO.QueryDef
    Dim RsDate4 As DAO.Recordset
     
    Dim sqlResDate1 As String
    Dim QryResDate1 As DAO.QueryDef
    Dim RsResDate1 As DAO.Recordset
     
    Dim sqlResDate2 As String
    Dim QryResDate2 As DAO.QueryDef
    Dim RsResDate2 As DAO.Recordset
     
    Dim sqlResDate3 As String
    Dim QryResDate3 As DAO.QueryDef
    Dim RsResDate3 As DAO.Recordset
     
    Dim sqlResDate4 As String
    Dim QryResDate4 As DAO.QueryDef
    Dim RsResDate4 As DAO.Recordset
     
     
    'Je récupère mon numéro d exploitation provenant d'un autre formulaire
    Dim Num As String
    Num = Module4.NumExploit2
     
     
     
    'Je vérifie si une date a été saisie dans le champ
     
    If (IsNull(Me.DateFin)) Then
    DateF = Max
     
    Else
    DateF = Me.DateFin
    End If
     
     
    'DETERTMINATION DE LA DATE MAXIMUM
     
    sqlDate1 = "SELECT Max(DateA) FROM Analyse WHERE ((DateA<""" & DateF & """))AND (((NumExploitation) = """ & Num & """)) "
     
    DoCmd.DeleteObject acQuery, "ReqDate1"
    'supprime la requête
    CurrentDb.CreateQueryDef "ReqDate1", sqlDate1
    'crée une nouvelle requete
    Set QryDate1 = CurrentDb.QueryDefs("ReqDate1")
    Set RsDate1 = QryDate1.OpenRecordset
     
    'je récupoère ma date maximum
    Date1 = RsDate1(0)
     
    'je crée une requête qui affiche les analyses effectuées à la date maxi pour une exploitation donnée
    sqlResDate1 = "SELECT DateA,NumVache,NbCellules,QteLait FROM Analyse"
    sqlResDate1 = sqlResDate1 & " WHERE (((NumExploitation)=""" & Num & """))"
    sqlResDate1 = sqlResDate1 & " AND (((DateA)>=" & DateValue(Date1) & "))AND (((DateA)<=#" & DateValue(Max) & "#))"
    sqlResDate1 = sqlResDate1 & " ORDER BY NumVache,DateA"
     
     
    DoCmd.DeleteObject acQuery, "ListeAnalDate1"
    CurrentDb.CreateQueryDef "ListeAnalDate1", sqlResDate1
    Set QryResDate1 = CurrentDb.QueryDefs("ListeAnalDate1")
    Set RsResDate1 = QryResDate1.OpenRecordset
     
     
    'Je refais la même démarche pour l'avant dernière date, l'avant avant dernière....
    sqlDate2 = "SELECT Max(DateA) FROM Analyse WHERE (((DateA)<#" & DateValue(Date1) & "#)) AND (((NumExploitation) = """ & Num & """)) "
    DoCmd.DeleteObject acQuery, "ReqDate2"
    'supprime la requête
    CurrentDb.CreateQueryDef "ReqDate2", sqlDate2
    'crée une nouvelle requete
     
    Set QryDate2 = CurrentDb.QueryDefs("ReqDate2")
    Set RsDate2 = QryDate2.OpenRecordset
     
    If (IsNull(RsDate2(0))) Then
    'MsgBox ("pas d'autre analyse 2 ")
    Else
     
     
     
    Date2 = RsDate2(0)
     
    sqlResDate2 = "SELECT DateA,NumVache,NbCellules,QteLait FROM Analyse"
    sqlResDate2 = sqlResDate2 & " WHERE (((NumExploitation)=""" & Num & """))"
    sqlResDate2 = sqlResDate2 & " AND (((DateA)>=#" & DateValue(Date2) & "#))AND (((DateA)<=#" & DateValue(Date1) & "#))"
    sqlResDate2 = sqlResDate2 & " ORDER BY NumVache,DateA"
     
    DoCmd.DeleteObject acQuery, "ListeAnalDate2"
    CurrentDb.CreateQueryDef "ListeAnalDate2", sqlResDate2
    Set QryResDate2 = CurrentDb.QueryDefs("ListeAnalDate2")
    Set RsResDate2 = QryResDate2.OpenRecordset
     
    sqlDate3 = "SELECT Max(DateA) FROM Analyse WHERE DateA<" & Date2 & " AND (((NumExploitation) = """ & Num & """)) "
    DoCmd.DeleteObject acQuery, "ReqDate3"
    'supprime la requête
    CurrentDb.CreateQueryDef "ReqDate3", sqlDate3
    'crée une nouvelle requete
     
    Set QryDate3 = CurrentDb.QueryDefs("ReqDate3")
    Set RsDate3 = QryDate3.OpenRecordset
     
    If (IsNull(RsDate3(0))) Then
     MsgBox ("pas d'autre analyse 3 ")
     Else
     
    Date3 = RsDate3(0)
     
    sqlResDate3 = "SELECT DateA,NumVache,NbCellules,QteLait FROM Analyse"
    sqlResDate3 = sqlResDate3 & " WHERE (((NumExploitation)=""" & Num & """))"
    sqlResDate3 = sqlResDate3 & " AND  (((DateA)>=#" & DateValue(Date3) & "#))AND (((DateA)<=#" & DateValue(Date2) & "#))"
    sqlResDate3 = sqlResDate3 & " ORDER BY NumVache,DateA"
     
     
    DoCmd.DeleteObject acQuery, "ListeAnalDate3"
    CurrentDb.CreateQueryDef "ListeAnalDate3", sqlResDate3
    Set QryResDate3 = CurrentDb.QueryDefs("ListeAnalDate3")
    Set RsResDate3 = QryResDate3.OpenRecordset
     
    sqlDate4 = "SELECT Max(DateA) FROM Analyse WHERE DateA<" & Date3 & " AND (((NumExploitation) = """ & Num & """)) "
    DoCmd.DeleteObject acQuery, "ReqDate4"
    'supprime la requête
    CurrentDb.CreateQueryDef "ReqDate4", sqlDate4
    'crée une nouvelle requete
     
    Set QryDate4 = CurrentDb.QueryDefs("ReqDate4")
    Set RsDate4 = QryDate4.OpenRecordset
     
    Date4 = RsDate4(0)
    If (IsNull(RsDate4(0))) Then
     MsgBox ("pas d'autre analyse 4 ")
     Else
     
     
    sqlResDate4 = "SELECT DateA,NumVache,NbCellules,QteLait FROM Analyse"
    sqlResDate4 = sqlResDate4 & " WHERE (((NumExploitation)=""" & Num & """))"
    sqlResDate4 = sqlResDate4 & " AND (((DateA)>=#" & DateValue(Date4) & "#))AND (((DateA)<=#" & DateValue(Date3) & "#))"
    sqlResDate4 = sqlResDate4 & " ORDER BY NumVache,DateA"
     
     
    DoCmd.DeleteObject acQuery, "ListeAnalDate4"
    CurrentDb.CreateQueryDef "ListeAnalDate4", sqlResDate4
    Set QryResDate4 = CurrentDb.QueryDefs("ListeAnalDate4")
    Set RsResDate4 = QryResDate4.OpenRecordset
     
    End If
    End If
    End If
     
     
    Num = ""
    DoCmd.Close
     
     
    End Sub

    Je pense que le raisonnement est bon, mais le soucis que je rencontre c'est que dans mes requêtes, les résultats de comparaison de date n'est pas bon. Il compare à chaque fois une date américaine et une date française. Si les années sont différentes, pas de soucis. Mais si ce n'est pas le cas, les problèmes arrivent.

    D'avance, merci

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Bonjour,
    attention le format qui doit être utilisé dans le SQL sous VBA est le suivant :

    adapte le code en conséquence
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2009
    Messages : 16
    Par défaut
    Où puis je spécifier ce format?

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    exemple pour ta première requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim Max As Date
    Max = #01/02/2050#
    sqlDate1 = "SELECT Max(DateA) FROM Analyse WHERE ((DateA<#" & Format(DateF,"MM/DD/YYYY") & "#))AND (((NumExploitation) = """ & Num & """)) "
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

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

Discussions similaires

  1. Requête sql multi-source avec jointure en pur VBA dans excel
    Par guidav dans le forum Général VBA
    Réponses: 1
    Dernier message: 21/09/2013, 20h33
  2. Problème avec une requète SQL en vba
    Par mephistomauvis dans le forum VBA Access
    Réponses: 2
    Dernier message: 22/12/2008, 19h41
  3. Problème avec requête SQL dans VBA
    Par Mimisio dans le forum VBA Access
    Réponses: 10
    Dernier message: 13/07/2007, 11h00
  4. Récupérer la valeur des champs calculés dans une requète SQL dans vba
    Par FrédéricCM dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 28/06/2006, 16h29
  5. Conversion d'une requête SQL en VBA
    Par Keraccess dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 26/10/2004, 17h33

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