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

Requêtes et SQL. Discussion :

Filtres entre deux dates. [AC-2007]


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mai 2011
    Messages : 55
    Points : 51
    Points
    51
    Par défaut Filtres entre deux dates.
    Bonjour à tous.
    Je viens à vous car j'ai un problème au niveau d'un filtre.
    Ma page est sous la forme suivante:
    Un champs de recherche entre 2 dates : Date1 et Date2.

    Mes valeurs: (nom d'un produit, date de mise en marche, date de fin)
    Nom | Date_debut | Date_fin

    Je sais créer un filtre via une recherche entre date , et une date 2, pour me retourner la totalité des valeurs dont la date est comprise dans ce laps de temps.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If Not IsNull(Me.Date1) And Me.Date1 <> "" And Not IsNull(Me.Date2) And Me.Date2 <> "" Then
    f = "clng([Date_debut]) BETWEEN " & CLng(Me.Date1) & " AND " & CLng(Me.Date2) & ""
    End If
    Me.Filter = f
    Me.FilterOn = True
    Cela résoud une partie de mon problème. Cependant je souhaiterai qu'il vérifie plus de cas de figure et c'est là où je m’emmêle les pinceaux pour l'écriture:
    - Date1 <= Date_debut < Date2
    - Date1 <= Date_fin < Date2
    - Date_debut <= Date1 ET date_fin >= Date2
    - ...

    En gros je voudrais tous les produits dont une partie OU la globalité de leur mise en service est comprise dans le laps de temps défini (je ne sais pas si je m'exprime correctement).

    En vous remerciant d'avance.

  2. #2
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Salut,

    Avant d'aller plus loin, cela peut venir du formatage des dates car en VBA, il prend (il me semble) le format anglais MM/DD/YYYY, donc si tu envoies des dates en français, il y a des chances qu'il y est confusion entre le jour et le mois...

    @+

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mai 2011
    Messages : 55
    Points : 51
    Points
    51
    Par défaut
    Bonjour,

    Merci pour ta réponse.

    Mon filtre sur une date marche très bien, donc il prend bien en compte mon type de date, c'est plutôt sur le filtre multi critère qui me pose problème.
    une date comprise entre deux dates: OK.

    Mais ce que je souhaiterai maintenant c'est une durée entre 2 dates (durée de mise en service de la machine) comprise ou intersectant un laps de temps défini

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 351
    Points : 23 816
    Points
    23 816
    Par défaut
    Si tu as des dates pourquoi les convertir en entier long ?

    sinon tu peux ajouter des OR à ta sélection cela te permettras de gérer les cas qui t'interessent.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    f = "[Date_debut] BETWEEN #" & Format(Me.Date1,"yyyy-mm-dd") & "# AND #" & Format(Me.Date2,"yyyy-mm-dd") & "#" 'Commence dans la période
    f=f & " or [Date_fin] BETWEEN #" & Format(Me.Date1,"yyyy-mm-dd") & "# AND #" & Format(Me.Date2,"yyyy-mm-dd") & "#" 'Fini dans la période
    f=f & " or [Date_Debut] <= #" & Format(Me.Date1,"yyyy-mm-dd") & "# and #" & Format(Me.Date2,"yyyy-mm-dd") & "# <= [Date_Fin]" 'Encadre la période.
    Cela devrait correspondre à ce que tu veux faire. (je ne suis pas sur pour la ernière ligne)

    A+

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mai 2011
    Messages : 55
    Points : 51
    Points
    51
    Par défaut
    Merci beaucoup pour ta réponse je vais tester ça de suite.

    Et oui t'as entièrement raison pour les dates.

    Je reviens à vous dès que j'ai pu faire mon test

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mai 2011
    Messages : 55
    Points : 51
    Points
    51
    Par défaut
    C'est plus que parfait. Merci énormément.

    Bonne journée à vous

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mai 2011
    Messages : 55
    Points : 51
    Points
    51
    Par défaut
    Re bonjour,

    En fait je reviens à vous car mon problème n'est pas totalement résolu.
    Effectivement le code donné par marot_r marche très bien, cependant je n'arrive pas du tout à l'incorporer au reste de mon code.
    En effet, je fais une recherche par multi-critère. Si aucune date n'est rentrée, les autres critères sont bien pris en compte, mais si une date est rentré, seul le critère date est pris en compte et non le reste.
    Voici mon code pour cette recherche:

    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
     
    Private Sub Btn_chc_Click()
    f = ""
    If Not IsNull(Me.Date1) And Me.Date1 <> "" And Not IsNull(Me.Date2) And Me.Date2 <> "" Then
     
            f = "[Date_debut] BETWEEN #" & Format(Me.Date1, "yyyy-mm-dd") & "# AND #" & Format(Me.Date2, "yyyy-mm-dd") & "#" 'Commence dans la période
            f = f & " or [Date_fin] BETWEEN #" & Format(Me.Date1, "yyyy-mm-dd") & "# AND #" & Format(Me.Date2, "yyyy-mm-dd") & "#" 'Fini dans la période
            f = f & " or [Date_Debut] <= #" & Format(Me.Date1, "yyyy-mm-dd") & "# and #" & Format(Me.Date2, "yyyy-mm-dd") & "# <= [Date_Fin]" 'Encadre la période.
     
    End If
    If Me.RPartenaire <> " Tout" Then
        If f <> "" Then
            f = f & " AND Partenaire_Etude = """ & Me.RPartenaire & """"
        Else
            f = "Partenaire_Etude = """ & Me.RPartenaire & """"
        End If
    End If
     
    If Me.RTypologie <> " Tout" Then
        If f <> "" Then
            f = f & " AND Typologie_terrain = """ & Me.RTypologie & """"
        Else
            f = "Typologie_terrain = """ & Me.RTypologie & """"
        End If
    Else
    Me.FilterOn = False
    End If
     
     
     
    Me.Filter = f
    Me.FilterOn = True
    End Sub

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mai 2011
    Messages : 55
    Points : 51
    Points
    51
    Par défaut
    Si cela peut aider certains. J'ai trouvé la solution.

    Suffit de bien séparé chaque critère par des parenthèses (cela parait évident, mais j'avais absolument pas pensé à cela).

    Encore merci à tous.

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

Discussions similaires

  1. Filtre entre deux dates
    Par Christ79 dans le forum VBA Access
    Réponses: 18
    Dernier message: 01/06/2012, 08h39
  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