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

Macros Access Discussion :

Requête sur un champ date en VBA [AC-2013]


Sujet :

Macros Access

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    responsable d'équipe
    Inscrit en
    Avril 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : responsable d'équipe
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 203
    Points : 0
    Points
    0
    Par défaut Requête sur un champ date en VBA
    bonjour
    dans ma base access, j'ai un champs date en format text

    je souhaiterais réaliser un requette sql en vba, et récupérer toutes les données qui sont antérieur à 3 mois

    mais ça ne fonctionne pas, ça me renvoie toutes les données

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TexteSQL = "SELECT * FROM [feuille atdec] WHERE ([cloture] is not null) and [date_création]<" & (CDate(Date) - 90) & ""
    vous auriez une soluce?

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 621
    Points : 14 577
    Points
    14 577
    Par défaut
    bonsoir,
    dans ma base access, j'ai un champs date en format text
    sauf si c'est une table non modifiable (fichier texte, classeur Excel, ou table d'une base externe) c'est une très mauvaise idée de stocker une date dans un champ texte surtout si elle est au format JJ/MM/AAAA, car le tri se fait de gauche à droite ainsi: "25/12/2020" sera toujours inférieur "31/01/2020" puisque 2..... est inférieur à 3.....
    En réalité, une date dans Access est représenté par un nombre numérique, ainsi:
    31/01/2020, c'est 43861 et 25/12/2020 c'est 44190. Je passe le détail de la codification des heures représentées par les décimales de ces nombres.

    Je te conseille donc fortement de convertir ce champ. Et si ce n'est pas possible, il faut convertir le champ de la table pour que cela fonctionne (et inutile de le faire pour la fonction Date qui renvoie déjà une date):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TexteSQL = "SELECT * FROM [feuille atdec] WHERE ([cloture] is not null) and CDate([date_création])< DateAdd('d',-90,date)"
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    responsable d'équipe
    Inscrit en
    Avril 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : responsable d'équipe
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 203
    Points : 0
    Points
    0
    Par défaut
    merci pour ta solution

    après une petite adaptation, elle fonctionne presque

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TexteSQL_feuilles_atdec = "SELECT * FROM [feuille atdec] WHERE ([cloture] is not null) and CDate([date_création])< " & DateAdd("D", -90, Date) & ""
    elle me renvoie une message d'erreur "utilisation incorrect de NULL"
    je pense que j'ai ce message car il y a des champs vide de temps en temps

    une solution?

    voici ma configuration: base access, piloté par un fichier excel en vba

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 621
    Points : 14 577
    Points
    14 577
    Par défaut
    bonjour,
    une solution?
    enlève les dates nulles:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TexteSQL_feuilles_atdec = "SELECT * FROM [feuille atdec] WHERE ([cloture] is not null) and [date_création] is not null and CDate([date_création])< " & DateAdd("D", -90, Date) & ""
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    responsable d'équipe
    Inscrit en
    Avril 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : responsable d'équipe
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 203
    Points : 0
    Points
    0
    Par défaut
    merci, mais j'avais déjà essayé
    Nom : Annotation 2020-03-27 143244.jpg
Affichages : 346
Taille : 16,4 Ko

    j'ai toujours l’erreur null?

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 621
    Points : 14 577
    Points
    14 577
    Par défaut
    et avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TexteSQL_feuilles_atdec = "SELECT * FROM [feuille atdec] WHERE ([cloture] is not null) and CDate(Nz([date_création],Date))< " & DateAdd("D", -90, Date) & ""
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    responsable d'équipe
    Inscrit en
    Avril 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : responsable d'équipe
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 203
    Points : 0
    Points
    0
    Par défaut


    Nom : Annotation 2020-03-27 150326.jpg
Affichages : 302
Taille : 11,5 Ko

  8. #8
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 621
    Points : 14 577
    Points
    14 577
    Par défaut
    est-ce que le message d'erreur ne concernerait pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE [cloture] is not null
    sinon essaie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TexteSQL_feuilles_atdec = "SELECT * FROM [feuille atdec] WHERE ([cloture] is not null) and [date_création]&'' <> '' and CDate([date_création])< " & DateAdd("D", -90, Date) & ""
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TexteSQL_feuilles_atdec = "SELECT * FROM [feuille atdec] WHERE ([cloture] is not null) and CDate(iif([date_création]&''='',Date,[date_création]))< " & DateAdd("D", -90, Date) & ""
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    responsable d'équipe
    Inscrit en
    Avril 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : responsable d'équipe
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 203
    Points : 0
    Points
    0
    Par défaut
    ce n'est pas mieux non plus


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE [cloture] is not null
    le message d'erreur ne concerne pas ceci , car si j'enlève cette partie j'ai le même pb

    toujours le même message d'erreur NULL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TexteSQL_feuilles_atdec = "SELECT * FROM [feuille atdec] WHERE ([cloture] is not null) and [date_création]&'' <> '' and CDate([date_création])< " & DateAdd("D", -90, Date) & ""
    et pour celui ci, le message d'erreur me dit que l'argument n'est pas valide/absent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TexteSQL_feuilles_atdec = "SELECT * FROM [feuille atdec] WHERE ([cloture] is not null) and CDate(iif([date_création]&''='',Date,[date_création]))< " & DateAdd("D", -90, Date) & ""

  10. #10
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 621
    Points : 14 577
    Points
    14 577
    Par défaut
    dans ma première réponse (post #2), il me semble que j'ai donné cette syntaxe (sans concaténation):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TexteSQL = "SELECT * FROM [feuille atdec] WHERE ([cloture] is not null) and CDate([date_création])< DateAdd('d',-90,date)"
    pour quelle raison a t-elle changée (avec concaténation) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TexteSQL_feuilles_atdec = "SELECT * FROM [feuille atdec] WHERE ([cloture] is not null) and CDate(iif([date_création]&''='',Date,[date_création]))< " & DateAdd("D", -90, Date) & ""
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    responsable d'équipe
    Inscrit en
    Avril 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : responsable d'équipe
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 203
    Points : 0
    Points
    0
    Par défaut
    parce que le code me générait une erreur, il falait que je rajoute

  12. #12
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 621
    Points : 14 577
    Points
    14 577
    Par défaut
    alors là, je ne comprend pas ... peux-tu poster la base au format zip ou rar et le classeur sans données confidentielles ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    responsable d'équipe
    Inscrit en
    Avril 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : responsable d'équipe
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 203
    Points : 0
    Points
    0
    Par défaut
    bonjour
    voici un lien


    la base de donnée access vierge et le fichier excel qui pilote la base en VBA

    TEST.zip

  14. #14
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 621
    Points : 14 577
    Points
    14 577
    Par défaut
    bonjour,
    la base de donnée access vierge
    heureusement elle ne l'était pas, sinon j'aurais eu des problèmes pour tester
    voici la correction (il manquait les délimiteurs de date (#) et les parenthèses après la fonction Date):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TexteSQL_feuilles_atdec = "SELECT * FROM [feuille atdec] WHERE ([cloture] is not null) and CDate(iif([date_création]&''='',Date(),[date_création]))< #" & DateAdd("D", -90, Date()) & "#"
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    responsable d'équipe
    Inscrit en
    Avril 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : responsable d'équipe
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 203
    Points : 0
    Points
    0
    Par défaut
    magnifique, merci beaucoup, ça fonctionne parfaitement

    même si je ne comprend pas tout dans le code!

  16. #16
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 621
    Points : 14 577
    Points
    14 577
    Par défaut
    même si je ne comprend pas tout dans le code!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "CDate(iif([date_création]&''='',Date(),[date_création]))"
    la fonction IIF (Vraifaux en français) contient 3 paramètres:
    1er: l'expression à tester ====> [date_création]&''=''
    2è : la valeur si l'expression est vraie ====> Date()
    3è : la valeur si l'expression est fausse ====> [date_création]

    explication de [date_création]&'': si la date de création est nulle et qu'on la concatène avec '' (qui correspond à vide), le nul disparait.
    Pourquoi ? parce qu'on ne peut pas comparer nul avec les signes (<, >, =) : UneValeur= Nul ne fonctionne pas. C'est pour cela qu'en temps normal on évalue avec IsNull(UneValeur) qui renvoie Vrai ou Faux.
    On utilise '' à la place de "" car on est à l'intérieur d'une chaine de caractères habituellement délimité par les guillemets "". Donc si on ne veut pas que cela génère une erreur, on utilise les apostrophes.
    On aurait pu aussi doubler les guillemets car c'est l'usage quand on est dans une chaine de caractères:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "CDate(iif([date_création]&""""="""",Date(),[date_création]))"
    Null + '' = '': parce que quand on compare la concaténation (date+'') à '' et que cela renvoie vrai, cela veut dire que la date testée est nulle et si elle est nulle, on met la date du jour (valeur si expression vraie), sinon on met la date de la table (valeur si expression fausse). Comme la date du jour ne sera jamais inférieure à elle-même - 90 jours, les dates nulles ne seront jamais sélectionnées.
    As-tu mieux compris ?

    N'oublie pas le bouton
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  17. #17
    Nouveau Candidat au Club
    Homme Profil pro
    responsable d'équipe
    Inscrit en
    Avril 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : responsable d'équipe
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 203
    Points : 0
    Points
    0
    Par défaut
    parfait
    solution et en prime les explications, que demander de plus

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

Discussions similaires

  1. [AC-2016] filtre vba sur 2 champs date
    Par Milou16 dans le forum VBA Access
    Réponses: 18
    Dernier message: 14/08/2017, 19h05
  2. Requête SQL sur une base Access, where sur un champ date
    Par digital prophecy dans le forum Bases de données
    Réponses: 1
    Dernier message: 09/05/2008, 17h47
  3. Requête sur un champ date
    Par BZH75 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 13/11/2007, 17h10
  4. requête sur le champ date
    Par bouba_95 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 10/01/2007, 16h10
  5. requêtes sur des champs date
    Par wiwi dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 03/02/2006, 15h14

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