Dates anglo-saxonnes

Certaines de mes requêtes (exécutées notamment en Visual Basic ou en pur SQL) donnent des résultats curieux lorsqu’elles sont basées sur des dates. Access ne comprendrait-il pas les dates françaises ?

Explication

Lorsque vous manipulez des dates dans Access, celles-ci s’écrivent différemment selon que vous travaillez via l’interface graphique ou par programmation.

  • Dans l’interface graphique d’Access, les dates respectent les réglages de votre machine (donc de votre pays). Une date française s’écrira 15/07/2008 (ce qu’Access transformera en #15/07/2008#).
  • Dès que vous programmez Access (VB ou SQL), vous passez en « mode anglo-saxon » : mm/jj/aaaa au lieu de jj/mm/aaaa. La même date devient donc #07/15/2008#.

Une fonction DateUS

Une solution pratique et définitive consiste à écrire une fonction de conversion en Visual Basic, et à l’appeler dès que vous en avez besoin. Pour écrire cette fonction :

  1. Cliquez sur l’onglet Modules de la base de données.
  2. Cliquez ensuite sur le bouton Nouveau.
  3. Tapez le code ci-dessous dans le module.
  4. Enregistrez le module en le nommant par exemple mod Dates.

Lorsque vous souhaiterez convertir une date française en date anglo-saxonne, vous remplacerez votre champ [Date française] par DateUS([Date française]).

Variante

Sur le même principe, il peut être utile de tenir compte de la date et de l’heure. Utilisez dans ce cas la fonction suivante :

Vous aimerez aussi...

4 réponses

  1. Hervé Inisan dit :

    k027p15 > C’est une possibilité effectivement. Mais si la date est stockée sous forme de texte (et non pas de champ Date/Heure), on perd de nombreuses fonctionnalités intéressantes : toutes les fonctions de manipulation de dates (DateAdd, DateDiff), et tout le calcul sur le temps en général.

    Pour ma part, je serais plus tenté de stocker « nativement » (Date/Heure), et de convertir au besoin selon le logiciel destinataire.

  2. k027p15 dit :

    Bonjour,

    Pour ma part, ayant eu des fichiers provenant de divers pays, j’ai résolu le problème de date en utilisant le format de date ISO dans mes tables.

    YYYY-MM-DD

    L’avantage est que si, par exemple, on exporte des dates format ISO d’une table Access vers une feuille Excel, Excel va interprêter correctement la date en fonction des paramètres régionaux du poste de travail.

    Cordialement,

    José

  3. Hervé Inisan dit :

    Sellig60 > Les Recordsets permettent effectivement d’éviter les problèmes de conversions (imposés par SQL), ça peut être une bonne idée dans certains scénarios.

    Mais ça ne résout pas les problèmes d’extraction : si un SELECT SQL doit être filtré par un WHERE, la date qu’il contient devra être convertie au format US obligatoirement.

    Juste un complément, par rapport à ton exemple : le Edit que tu fais modifie le premier enregistrement du Recordset. Comme il n’y a pas de WHERE dans le SQL, rien ne dit qu’on modifie l’enregistrement affiché actuellement dans le formulaire.

  4. Sellig60 dit :

    Bonsoir
    J’ai trouvé un moyen de contourner ce problème.
    soit un champ texte
    Me.ChampTexte.value qui contient : blabla’blabla’blabla (l’apostrophe devrait être échappé sinon message d’erreur)
    et un champ date Me.Date.value contenant 15/02/2012 (ce qui donnerait: 02/15/2012 au format anglo saxon.)
    en faisant:

    SqlSelect = « SELECT NomDeMaTable.champ1, NomDeMaTable.date1 FROM NomDeMaTable; »
    set Rs = Application.CurrentDb.openrecordset(SqlSelect)
    Rs.Edit
    With Rs
    .champTexte = Nz(Me.ChampTexte.value, » »)
    If isdate (Me.Date.value)= true then
    .Date = Me.Date.value
    end if
    end with
    Rs.Update

    ….
    Le résultat est nickel. Le texte est enregistré (pas besoin de replace). Les apostrophes ne posent aucun problème et la date est enregistrée au format français.
    voilà voilà
    Sellig

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *