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 :

Retrouver des dates situées dans un intervalle


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2006
    Messages : 23
    Points : 18
    Points
    18
    Par défaut Retrouver des dates situées dans un intervalle
    Bonjour à tous,

    Voilà mon souci, j'ai une table avec un champ Date_début et un champ Date_fin ; ces champs peuvent contenir des dates identiques(un seul jour), ou des dates différentes(plusieurs jours) et plusieurs champs peuvent être identiques.
    D'autres champs complètent cette table, nom et prénom notamment.
    Je souhaiterais lister toutes les dates différentes, à partir de la comparaison entre les valeurs des 2 champs ci dessus.
    L'objectif est de dénombrer le nombre d'individu(s) présent chaque jour, et d'afficher le résultat dans un état.
    J'ai bien tenté via l'assistant requête, mais là je sèche un peu....

    Merci à ceux qui auront pris le temps de me lire...

    Chris du 25

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Ce que tu cherches ce sont les enregistrements où la date de début est différente de la date de fin ?

    Sinon, pourrais-tu donner un exemple de données et un exemple du résultat attendu.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 621
    Points : 56 867
    Points
    56 867
    Billets dans le blog
    40
    Par défaut
    Bonsoir,

    une piste avec une table supplémentaire : Calendrier (DateCalendrier)
    Comprenant tous les jours de l’année par exemple. Calendrier que tu peux générer facilement à partir d’Excel et que tu exportes sous Access.

    Par exemple avec : LaTable(DateDébut, DateFin, Nom,…)

    Et la requête paramétrée à saisir en mode SQL:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    PARAMETERS [Début période ?] DateTime, [Fin période ?] DateTime;
    SELECT Calendrier.DateCalendrier, LaTable.Nom
    FROM Calendrier LEFT JOIN LaTable ON (Calendrier.DateCalendrier<=LaTable.DateFin) 
    AND (Calendrier.DateCalendrier>=LaTable.DateDebut)
    WHERE Calendrier.DateCalendrier BETWEEN [Début période ?] AND [Fin période ?];

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    LaTable :
    DateDebut    DateFin      Nom ….
    01/01/2010   02/01/2010   toto
    01/01/2010   04/01/2010   titi
    et la requête devrait retourner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    01/01/2010   toto
    01/01/2010   titi
    02/01/2010   toto
    02/01/2010   titi
    03/01/2010   titi
    04/01/2010   titi
    Attention : la jointure dans la requête n’est pas interprétable graphiquement. Donc rester en mode SQL sinon la requête est explosée

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2006
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    Bonjour et merci pour les réponses,

    Pour répondre à F-leb, je souhaiterais éviter d'ajouter une table à ma base, et surtout être indépendant pour éviter à mes utilisateurs des manipulations d'import de table.

    Je vais essayer de définir plus clairement mon besoin :
    J'ai une table qui contient les champs suivants :

    Num_Indiviu....... Date_Debut.......Date_Fin
    1..................... 21/05/2010.......21/05/2010
    2..................... 17/05/2010.......20/05/2010
    1..................... 17/05/2010.......17/05/2010
    3..................... 23/03/2010.......24/05/2010
    1..................... 24/05/2010.......24/05/2010

    Résultat souhaité :

    Dates..................... Nb Individus
    17/05/2010..................... 2
    18/05/2010..................... 1
    19/05/2010..................... 1
    20/05/2010..................... 1
    21/05/2010..................... 1
    23/05/2010..................... 1
    24/05/2010..................... 2

    Je ne parviens pas à créer une requête qui me permette d'obtenir ce résultat...
    J'espère avoir été plus clair.

    Cordialement,

    Chris du 25

  5. #5
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 621
    Points : 56 867
    Points
    56 867
    Billets dans le blog
    40
    Par défaut
    Ben je continue quand même sur mon idée avec la table Calendrier (surtout que j’en ai pas d’autres pour l’instant )

    En reprenant la requête de mon précédent message (appelons la R1) :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT R1.DateCalendrier, Count(R1.Nom) AS NbIndividus
    FROM R1 GROUP BY R1.DateCalendrier;
    Et normalement tu obtiens le résultat souhaité…

    Citation Envoyé par CC25
    je souhaiterais éviter d'ajouter une table à ma base, et surtout être indépendant pour éviter à mes utilisateurs des manipulations d'import de table.
    Meuhh non, je te proposais juste une méthode pour éviter de saisir manuellement toutes les dates du calendrier 01/01/2010, 02/01/2010, …., 31/12/2015 dans la table Calendrier.
    Dans une cellule d’Excel tu inscris la première date 01/01/2010 et tu tires la cellule vers le bas jusqu’en 2015. Tu importes le tout définitivement dans la table Calendrier avec les assistants.
    L’opération est réalisée une fois pour toute et l’utilisateur n’est même pas censé connaître l’existence de cette table.

    Bourrin mais efficace…

    Sinon j’ai bien une requête paramétrée qui permet de générer un calendrier et que tu peux utiliser en place de la table Calendrier.

    Soit R_Calendrier :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TJOURS.LADATE
    FROM (SELECT TOP 31 DATESERIAL(ANNEE,MOIS,ID1 & ID2) AS LADATE FROM 
    (SELECT TOP 4 (SELECT Count(ID) FROM MSysObjects TA WHERE TA.ID<TA1.ID) AS ID1 FROM MSysObjects AS TA1 ORDER BY ID)  AS T1, (SELECT TOP 10 (SELECT Count(ID) FROM MSysObjects TA WHERE TA.ID<TA1.ID) AS ID2 FROM MSysObjects AS TA1 ORDER BY ID)  AS T2 WHERE Month(DATESERIAL(ANNEE,MOIS,ID1 & ID2))=MOIS ORDER BY ID1 & ID2)  AS TJOURS;
    Mais à qui donc ais je bien pu piquer cette requête (dont je ne comprends pas le fonctionnement d’ailleurs) ?

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 621
    Points : 56 867
    Points
    56 867
    Billets dans le blog
    40
    Par défaut
    Re moi,

    Dans ma requête du message #3, on peut remplacer :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ON (Calendrier.DateCalendrier<=LaTable.DateFin) 
    AND (Calendrier.DateCalendrier>=LaTable.DateDebut)
    par le plus joli :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    ON (Calendrier.DateCalendrier BETWEEN LaTable.DateDebut AND LaTable.DateFin)

    Par ailleurs:
    21/05/2010..................... 1
    23/05/2010..................... 1
    Pour ne pas faire apparaître la ligne avec 22/05/2010, il suffit de remplacer le LEFT JOIN par INNER JOIN. 

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/04/2009, 11h51
  2. Réponses: 8
    Dernier message: 28/12/2008, 17h08
  3. Requête ranges des dates retouné dans cursor
    Par manotas dans le forum SQL
    Réponses: 2
    Dernier message: 13/12/2007, 14h12
  4. Réponses: 2
    Dernier message: 07/11/2006, 10h34
  5. ajouter des dates délémitées dans INSERT INTO ?
    Par samlepiratepaddy dans le forum Access
    Réponses: 8
    Dernier message: 27/09/2005, 08h12

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