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 :

Filtre entre deux dates


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 84
    Points : 51
    Points
    51
    Par défaut Filtre entre deux dates
    Bonjours à toutes et tous

    Je reviens vers vous pour une nouvelle aide pour régler mon problème, parce que là je rame, je rame et j'attaque la falaise .

    Voilà ! j'ai adapté "Recherche multi-critère" (trouvé sur le site) pour mes statistiques sur l'accidentologie. Je souhaiterais pouvoir faire une sélection entre deux date. j'ai tout essayé, mais impossible de trouver la bonne syntaxe.
    Je suis parti sur deux zones de texte sur mon formulaire dans lesquelles je dois saisir la date (txtRechDdebut et txtRechDfin)

    Voici la procédure et mon problème est en rouge, comme moi

    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
    Private Sub RefreshQuery()
    Dim SQLWhere As String
    
    SQL = "SELECT MAPINFO_ID, ID, Journée, Jour, Mois, Année,Date, Heure, Unité, N_PV, Secteur, commune, Type_voirie, N_voirie, Adresse, intersection, Hors_agglomération, Hors_intersection, Véhicule, PV, PR, Distance, Tué, Blessé, BH, Age_victime, circonstances FROM accident_base INNER JOIN Circonstance ON accident_base.Id = Circonstance.Id_circonstance Where accident_base!MAPINFO_ID <> 0"
    
    If Not Me.chkjournee Then
        SQL = SQL & "And accident_base!journée = '" & Me.cmbRechjournee & "' "
    End If
    
    If Not Me.chkmois Then
        SQL = SQL & "And accident_base!mois = '" & Me.cmbRechmois & "' "
    End If
    
    If Not Me.chkannée Then
        SQL = SQL & "And accident_base!année = '" & Me.cmbRechannée & "' "
    End If
    
    If Not Me.chksecteur Then
        SQL = SQL & "And accident_base!Secteur = '" & Me.cmbRechsecteur & "' "
    End If
    
    If Not Me.chkcommune Then
        SQL = SQL & "And accident_base!Commune = '" & Me.cmbRechcommune & "' "
    End If
    
    If Not Me.chktvoie Then
        SQL = SQL & "And accident_base!Type_voirie = '" & Me.cmbRechtvoie & "' "
    End If
    
    If Not Me.chknvoie Then
        SQL = SQL & "And accident_base!N_voirie = '" & Me.cmbRechnvoie & "' "
    End If
    
    
    If Not Me.chkagglo Then
        SQL = SQL & "And accident_base!Hors_agglomération = '" & Me.cmbRechagglo & "' "
    End If
    
    If Not Me.chkinter Then
        SQL = SQL & "And accident_base!Hors_intersection = '" & Me.cmbRechinter & "' "
    End If
    
    If Not Me.chkpv Then
        SQL = SQL & "And accident_base!PV = '" & Me.cmbRechpv & "' "
    End If
    
    If Not Me.chkvehicule Then
        SQL = SQL & "And accident_base!Véhicule like '*" & Me.txtRechvehicule & "*' "
    End If
    
    If Not Me.chkadresse Then
        SQL = SQL & "And accident_base!Adresse like '*" & Me.txtRechadresse & "*' "
    End If
    
    If Not Me.chkperiode Then
        SQL = SQL & "And accident_base!Date BETWEEN " & Format(Me.txtRechDdebut, "mm/dd/yyyy") & "#" & "AND" & Format(Me.txtRechDfin, "mm/dd/yyyy") & "#"
    End If
    
    SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
    
    SQL = SQL & ";"
    
    Me.lblStatsAcc.Caption = DCount("*", "accident_base", SQLWhere)
    Me.lblStatsAccm.Caption = DCount("*", "accident_base", SQLWhere & " and [tué]<>0")
    Me.lblStatsTue.Caption = "" & DSum("[Tué]", "accident_base", SQLWhere)
    Me.lblStatsBl.Caption = "" & DSum("[Blessé]", "accident_base", SQLWhere)
    Me.lblStatsBh.Caption = "" & DSum("[BH]", "accident_base", SQLWhere)
    
    Me.lstResults.RowSource = SQL
    Me.lstResults.Requery
    
    End Sub
    Merci d'avance pour votre aide

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 191
    Points : 324
    Points
    324
    Par défaut
    Bonjour,

    Il me semble qu'il te manque les # avant et après tes dates. Ca devrait te donner:

    Between #" & datedebut & "# And #" & datefin & "#"

    Cordialement.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    Bonjour Mr Mof

    J'ai déjà essayé cette syntaxe, il me met un message d'erreur 3075 "Erreur de syntaxe dans la date dans l'expression"

    Merci

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 191
    Points : 324
    Points
    324
    Par défaut
    Tu as vérifié que les dates retournées par tes textes box sont au format dd/mm/yyyy ou mm/dd/yyyy? De plus, je te conseille de mettre des crochets à ton champ date car je ne suis pas sur qu'ACCESS apprécie (il existe un type Date).

    accident_base.[Date]

    Enfin, si ca ne fonctionne toujours pas, essaye de mofidier le nom du champ date et vois ce qu'il se passe.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 357
    Points : 355
    Points
    355
    Par défaut
    Bonjour,

    Les dates c'est souvent la galere ...

    En essayant comme cela ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "And clng(accident_base!Date) BETWEEN " & clng(Me.txtRechDdebut) & " AND " & clng(Me.txtRechDfin)
    PS : Je n'ai pas pu tester.

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    Bonjour à tous

    J'ai essayé toutes vos syntaxes. J'ai changé le nom de champ. Rien ni fait. Access continu à me mettre un message d'erreur

    J'accepte toutes nouvelles propositions et je continu à chercher de mon côté.

    Merci encore pour votre aide.

    Bonne journée

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 191
    Points : 324
    Points
    324
    Par défaut
    Bonjour,

    Lorsque tu ajoute une condition à ta requête, fais bien attention à mettre un espace c'est à dire : condition1 AND condition2 AND...
    Sur ton code, le premier and ajouté est forcément collé à ta condition puisque tu n'as pas mis d'espace en fin de SQL ni au début de tes conditions.

    Cordialement.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 357
    Points : 355
    Points
    355
    Par défaut
    Bonjour,

    Pouvez-vous mettre dans votre code lorsque la requete SQL est construite SVP ? (le resultat s'affiche dans la fenetre execution (Affichage / fenetre d execution) dans le vba)

    Envoyez-nous la requete.

    On pourra voir si il n'y a pas de souci dans la requete elle meme.

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    Bonjour à toutes et tous et merci encore pour votre aide

    Access Newbie, je vous remercie pour votre proposition.

    Mes connaissances en VBA étant limitées, je ne suis pas certain de pouvoir réaliser correctement vos consignes. Pouvez-vous me donner un peu plus de précisions sur la démarche et surtout où je dois placer cette ligne de code.

    Merci d'avance

    Bonne journée

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 357
    Points : 355
    Points
    355
    Par défaut
    Bonjour,

    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
    Private Sub RefreshQuery()
    Dim SQLWhere As String
    
    SQL = "SELECT MAPINFO_ID, ID, Journée, Jour, Mois, Année,Date, Heure, Unité, N_PV, Secteur, commune, Type_voirie, N_voirie, Adresse, intersection, Hors_agglomération, Hors_intersection, Véhicule, PV, PR, Distance, Tué, Blessé, BH, Age_victime, circonstances FROM accident_base INNER JOIN Circonstance ON accident_base.Id = Circonstance.Id_circonstance Where accident_base!MAPINFO_ID <> 0"
    
    If Not Me.chkjournee Then
        SQL = SQL & "And accident_base!journée = '" & Me.cmbRechjournee & "' "
    End If
    
    If Not Me.chkmois Then
        SQL = SQL & "And accident_base!mois = '" & Me.cmbRechmois & "' "
    End If
    
    If Not Me.chkannée Then
        SQL = SQL & "And accident_base!année = '" & Me.cmbRechannée & "' "
    End If
    
    If Not Me.chksecteur Then
        SQL = SQL & "And accident_base!Secteur = '" & Me.cmbRechsecteur & "' "
    End If
    
    If Not Me.chkcommune Then
        SQL = SQL & "And accident_base!Commune = '" & Me.cmbRechcommune & "' "
    End If
    
    If Not Me.chktvoie Then
        SQL = SQL & "And accident_base!Type_voirie = '" & Me.cmbRechtvoie & "' "
    End If
    
    If Not Me.chknvoie Then
        SQL = SQL & "And accident_base!N_voirie = '" & Me.cmbRechnvoie & "' "
    End If
    
    
    If Not Me.chkagglo Then
        SQL = SQL & "And accident_base!Hors_agglomération = '" & Me.cmbRechagglo & "' "
    End If
    
    If Not Me.chkinter Then
        SQL = SQL & "And accident_base!Hors_intersection = '" & Me.cmbRechinter & "' "
    End If
    
    If Not Me.chkpv Then
        SQL = SQL & "And accident_base!PV = '" & Me.cmbRechpv & "' "
    End If
    
    If Not Me.chkvehicule Then
        SQL = SQL & "And accident_base!Véhicule like '*" & Me.txtRechvehicule & "*' "
    End If
    
    If Not Me.chkadresse Then
        SQL = SQL & "And accident_base!Adresse like '*" & Me.txtRechadresse & "*' "
    End If
    
    If Not Me.chkperiode Then
        SQL = SQL & "And accident_base!Date BETWEEN " & Format(Me.txtRechDdebut, "mm/dd/yyyy") & "#" & "AND" & Format(Me.txtRechDfin, "mm/dd/yyyy") & "#"
    End If
    
    SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
    
    SQL = SQL & ";"
    
    debug.print SQL
    
    Me.lblStatsAcc.Caption = DCount("*", "accident_base", SQLWhere)
    Me.lblStatsAccm.Caption = DCount("*", "accident_base", SQLWhere & " and [tué]<>0")
    Me.lblStatsTue.Caption = "" & DSum("[Tué]", "accident_base", SQLWhere)
    Me.lblStatsBl.Caption = "" & DSum("[Blessé]", "accident_base", SQLWhere)
    Me.lblStatsBh.Caption = "" & DSum("[BH]", "accident_base", SQLWhere)
    
    Me.lstResults.RowSource = SQL
    Me.lstResults.Requery
    
    End Sub
    PS : vous devez afficher la fenetre execution, dans le vba, vous faites affichage / fenetre execution (ou bien ctrl + g)

    Puis vous lancez votre code, le SQL de la requete va s'afficher dans cette fenetre et vous recopiez le resultat sur le forum !

  11. #11
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    Merci pour le complément d'information

    voici le résultat !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MAPINFO_ID, ID, Journée, Jour, Mois, Année,Date_a, Heure, Unité, N_PV, Secteur, commune, Type_voirie, N_voirie, Adresse, intersection, Hors_agglomération, Hors_intersection, Véhicule, PV, PR, Distance, Tué, Blessé, BH, Age_victime, circonstances FROM accident_base INNER JOIN Circonstance ON accident_base.Id = Circonstance.Id_circonstance Where accident_base!MAPINFO_ID <> 0And accident_base!Date_a BETWEEN # # AND # # ;

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 357
    Points : 355
    Points
    355
    Par défaut
    Bonjour,

    Vous aviez renseigné des dates dans vos champs txtRechDdebut et txtRechDFin ?

    Parce que ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... BETWEEN # # AND # #
    C'est sur et certain qu'il y a un problème ! Il manque les dates !


    avant le que je vous ai fait rajouté, mettez les 2 lignes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    debug.print me.txtRechDdebut 
    debug.print me.txtRechDFin
    Et donnez nous le résultat.

  13. #13
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    Bonjour

    Une précision sur l'erreur !

    Message :

    Erreur d'execution '3075' :

    'accident_base!MAPINFO_ID <> 0 And accident_base!Date_a BETWEEN # # AND # #'.


    Ce message s'affiche entre le moment où je clique sur la case à cocher chkperiode et l'accès à mes txtbox. Je n'ai donc pas la possibilité de saisir les dates.

    J'ai rajouté les deux ligne de debug.print et je n'ai rien de plus que sur mon précédent message

    Merci

    Bonne journée

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 357
    Points : 355
    Points
    355
    Par défaut
    Bonjour,

    D'après ce que je comprends de votre dernier message, vous devez avoir un problème au niveau des enchainements des evenements sur votre formulaire.

    Pourriez-vous nous mettre la base en pièce jointe ? (Dénaturez les données si besoin).

  15. #15
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    Vous trouverez ci-joint ma base. J'ai retiré un certain nombre de documents (formulaires, états, requêtes) pour avoir un fichier moins gros. Cela n'a pas d'incidence dans le formulaire "Recherche" si ce n'est qu'il ne faut pas cliquer sur un accident car j'ai supprimé le formulaire consultation qui si raccroche.

    Merci encore pour vos efforts.

    Bonne journée
    Fichiers attachés Fichiers attachés

  16. #16
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 191
    Points : 324
    Points
    324
    Par défaut
    Bonjour,

    D'après ce que je vois tu met à jour ta requête lorsque tu entre dans ton champ de saisie ou que tu en sort ou que tu coche/décoche ta case période. Le soucis, c'est que tes case peuvent très bien être vides toutes les deux ou une des deux. Donc je pense que le plus simple serait de tester si les deux cases sont remplies avant de mettre à jour ta requête.

    Cordialement.

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 357
    Points : 355
    Points
    355
    Par défaut
    Bonjour,

    Comme le souligne Mr.Mof, le problème vient bien de tes evenements.

    D'après moi, tu devrais rajouter un bouton "rafraichir les données" sur ton formulaire, puis supprimer tous les evenements XXX_BeforeUpdate, ainsi que tous les appels à ta procédure RefreshQuery.

    Et sur l'evenement click du bouton "rafraichir les données", tu mets le RefreshQuery !

    Et Oooo miracle, tes problèmes auront disparu !

    L'inconvenient de cette méthode est que ton sous formulaire ne se mettra pas à jour dynamiquement, mais l'avantage, c'est que ton code sera nettement simplifié (et il faut penser à une éventuelle maintenance de l'application).

    Au passage, une petite remarque, évite de mettre des noms de champs avec des accents !

  18. #18
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    Merci à vous pour toutes ces infos.

    Je vais me mettre au travail et je vous tiens au courant des suites.

    Encore merci

  19. #19
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    Bonjour à vous

    C'est fait et sa fonctionne

    Merci

    Bonne journée et bon week end

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

Discussions similaires

  1. [AC-2007] Filtres entre deux dates.
    Par toinehxc dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 04/12/2012, 15h40
  2. Probleme avec un filtre entre deux dates
    Par roubase dans le forum Bases de données
    Réponses: 6
    Dernier message: 13/03/2012, 10h58
  3. [SPS07] Comment faire un filtre entre deux dates ?
    Par Tybo34 dans le forum Développement Sharepoint
    Réponses: 11
    Dernier message: 23/07/2010, 09h42
  4. [ADO Table] Filtre entre deux dates
    Par aliwassem dans le forum Bases de données
    Réponses: 3
    Dernier message: 22/04/2007, 12h36
  5. comment obtenir l’intervalle de mois entre deux date
    Par looc 6699 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/02/2005, 11h08

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