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 :

Condition BETWEEN sur une date [AC-2000]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 74
    Par défaut Condition BETWEEN sur une date
    Bonjour à tous,

    J'ai un petit problème pour mettre une condition BETWEEN sur une date en VBA.
    Voilà j'ai une table que j'alimente en VBA avec les infos récupérées d'autres tables grâce à un recordset.

    La requête sur laquelle s'ouvre le recordset est du genre de celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "SELECT * FROM MaTable WHERE MaDate BETWEEN #" & dt1 & "# AND #" & dt2 & "#;"
    dt1 et dt2 représentent deux InputBox dans lesquelles je demande à l'utilisateur de saisir une date de début et une date de fin.
    Elles sont toutes les deux déclarées en tant que Date et le champ MaDate dans MaTable est bien de type Date aussi.

    Cependant même si le recordset s'ouvre bien il n'y a aucun enregistrement dedans alors que normalement je devrais avoir un enregistrement avec lequel j'ai volontairement rempli les critères de la requête pour effectuer mes tests.
    Je pensais que c'était à cause de dt1 et dt2 qui peut-être se transposaient automatiquement au format américain des dates, mais à l'affichage de leur contenu, j'ai bien les dates telles qu'elles ont été saisies.

    Après avoir testé plusieurs syntaxes aussi bien dans la condition de la requête que pour changer le format des dates, je viens vous demander votre aide car là je sèche

  2. #2
    Expert confirmé

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 849
    Par défaut
    Bonsoir,

    Cela :
    Je pensais que c'était à cause de dt1 et dt2 qui peut-être se transposaient automatiquement au format américain des dates, mais à l'affichage de leur contenu, j'ai bien les dates telles qu'elles ont été saisies
    ne veut rien dire sur la façon dont tes paramètres dates sont traitées en VBA.

    Essaies :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM MaTable WHERE MaDate BETWEEN #" & format(dt1,"mm/dd/yyyy") & "# AND #" & format(dt2,"mm/dd/yyyy") & "#;"
    Bonne continuation

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 74
    Par défaut
    Merci pour la réponse madefemere

    En effet je me suis dit aussi que l'affichage des variables ne reflétait pas leur traitement mais je n'arrivait pas à les formater.

    Après réflexion ta syntaxe est tout à fait logique mais je n'y avait pas du tout pensé alors je testerai ça demain mais il n'y a pas de raison que cela ne fonctionne pas

    Je verrai bien le résultat demain, bonne soirée à toi

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 74
    Par défaut
    Après test, je n'arrive toujours pas au résultat attendu avec ta syntaxe.
    Même si je saisie la date sous la forme "mm/dd/yyyy", le recordset ne trouve toujours rien alors qu'il devrait.

    SI ça peut aider, voici le début de 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
     
    Sub MaFonction()
     
    Dim rs1 As Recordset
    Dim strSQL As String
    Dim dt1 As Date
    Dim dt2 As Date
     
    dt1 = InputBox("Saisissez une date de début")
    dt2 = InputBox("Saisissez une date de fin")
     
    strSQL = "SELECT A.client_id, A.entreprise_id, A.client_nom, A.client_adresse, A.administrateur_nom, A.administrateur_adresse, B.declaration_montant, B.declaration_provisoire_montant, B.declaration_provisoire_date " & _
    "FROM MaPremiereTable AS A INNER JOIN MaDeuxiemeTable AS B ON A.client_id=B.client_id " & _
    "WHERE B.declaration_provisoire_montant>0 AND B.declaration_provisoire_date IS NOT NULL AND B.declaration_montant>=25 AND B.cloture_motif IS NULL AND A.jugement_type='13' AND B.courrier IS NULL AND B.declaration_date BETWEEN #" & Format(dt1, "dd/mm/yyyy") & "# AND #" & Format(dt2, "dd/mm/yyyy") & "#;"
     
    Set rs1 = CurrentDb.OpenRecordset(strSQL)
     
    rs1.MoveFirst
    While Not rs1.EOF
    ...
    Voilà comme vous vous en doutez, quand je veux aller au premier enregistrement c'est impossible car il n'y a rien dans le recordset or je suis certain d'avoir un client qui remplit les conditions.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 74
    Par défaut
    Bon et bien après quelques recherches, des tas et des tas de tests, j'ai enfin trouvé une solution à mon problème

    Voici 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
     
    Sub MaFonction()
     
    Dim rs1 As Recordset
    Dim strSQL As String
    Dim dt1 As Date
    Dim dt2 As Date
    Dim strdt1 As String
    Dim strdt2 As String
     
    strdt1 = InputBox("Saisissez une date de début")
    strdt2 = InputBox("Saisissez une date de fin")
    dt1 = CDate(strdt1)
    dt2 = CDate(strdt2)
     
    strSQL = "SELECT A.client_id, A.entreprise_id, A.client_nom, A.client_adresse, A.administrateur_nom, A.administrateur_adresse, B.declaration_montant, B.declaration_provisoire_montant, B.declaration_provisoire_date " & _
    "FROM MaPremiereTable AS A INNER JOIN MaDeuxiemeTable AS B ON A.client_id=B.client_id " & _
    "WHERE B.declaration_provisoire_montant>0 AND B.declaration_provisoire_date IS NOT NULL AND B.declaration_montant>=25 AND B.cloture_motif IS NULL AND A.jugement_type='13' AND B.courrier IS NULL AND B.declaration_date BETWEEN #" & dt1 & "# AND #" & dt2 & "#;"
     
    Set rs1 = CurrentDb.OpenRecordset(strSQL)
     
    rs1.MoveFirst
    While Not rs1.EOF
    ...
    Je passe donc par deux variables de type String qui récupèrent la valeur des InputBox, puis je les convertie dans les variables de type Date.
    Ensuite dans la condition BETWEEN, je dois quand même laisser les # même si la variable dt1 contient par exemple #01/01/2013#.

    Voilà merci quand même pour ton aide madefemere

  6. #6
    Expert confirmé

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 849
    Par défaut
    C'est bien,

    Etonnant quand même qu'il faille expliquer à l'interprétateur par CDate que ce sont dates qui sont insérées dans les InputBox.

    N'oublies pas de mettre si c'est bon.

    Bonne continuation.

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

Discussions similaires

  1. [WD14] Condition sur une date
    Par Bobsucre dans le forum WinDev
    Réponses: 8
    Dernier message: 06/06/2010, 02h03
  2. [5.1] Condition sur une date : date + 12 mois
    Par oli43 dans le forum Débuter
    Réponses: 3
    Dernier message: 30/08/2008, 14h41
  3. Condition sur une date
    Par DanaX dans le forum iReport
    Réponses: 12
    Dernier message: 19/08/2008, 12h43
  4. Double condition sur une date
    Par Olivier95 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 26/06/2006, 14h34
  5. [SQL] Conditions sur une date dans une requete
    Par poufouille dans le forum Bases de données
    Réponses: 4
    Dernier message: 17/03/2004, 15h25

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