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 :

Gestion des dates


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 206
    Par défaut Gestion des dates
    Bonsoir à tous,

    Je me retrouve face à un problème que de nombreuses personnes semblent rencontrer, mais je n'ai pourtant trouvé nul part de réponse complète au sujet. uniquement des réponses sur un des axes de celui-ci, ce qui n'aide pas à savoir comment était traité le reste !
    Ce sujet aurait pu avoir sa place dans la section SQL ou IHM, mais je pense que cette section est plus adaptée.
    Comme le titre l'indique, je souhaite trouver une solution globale pour gérer les dates dans Access 2010, version française : saisie dans une zone de texte, insertion dans une table, recherche à partir d'une autre zone de texte, trie et modification dans cette même table, utilisation de fonctions dates (datediff, month, year,...) Et tout cela sans qu'Access ne s'emporte en faisant la confusion entre les dates au format français et américain !

    Que ce soit par le code ou le mode création, je me demande quels paramètres utiliser, les modifications à apporter lors de certaines étapes,... quelqu'un aurait-il une lecture complète à me proposer sur le sujet ?

    Ou pourrait-il m'éclairer sur sa façon de gérer le problème ?

    En vous remerciant d'avance,

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Bonjour.

    Personnellement j'ai résolu le problème en mettant mes dates au format AAAA-MM-JJ.

    Dans mes tables je précise ce format, dans mes champs texte, je précise ce format.
    Je n'utilise pas les masques de saisie que je trouve trop contraignants. L'utilisateur peut continuer à entrer la date dans l'ordre qu'il préfère mais le format d'affichage fait qu'il n'y a pas de doute sur la date utilisée par le système.

    Et par sécurité lorsque je passe une date au SQL sous forme de texte, je m'assure que j'utilise Format([MaDate], "yyyy\-mm\-jj").

    Quand j'utilise des paramètres pour une requête je m'assure de les typé "Date". On peut le faire même pour des paramètres venant d'un formulaire.

    C'est un peu casse pied, mais je n'ai plus aucun problème de date mal interprétée.

    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
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 206
    Par défaut
    Si vous n'utilisez pas de masque de saisie, l'utilisateur peut donc entrer, pour le deux mars, aussi bien :
    02/03/2000 que 03/02/2000 ; Ce problème est-il géré par un simple texte affiché indiquant d'écrire au format jj-mm-aaaa ? (ou mm-jj-aaaa) Et lequel de ces deux format choisir pour qu'Access utilise bien la bonne valeur pour le mois/jour ?
    Dans le cas d'un des deux nombre > 12, c'est simple, dans le cas contraire... ?

    Je suis preneur d'autres pistes réduisant les risques de saisies - ne correspondant pas à des dates entre autre-, et en attendant je vais de ce pas essayer ce format yyyy-mm-dd !

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Dans la zone de texte (ou le champ) tu définis comme format d'affichage aaaa\-mm\-jj.
    Le \- c'est pour forcer un tiret, c'est optionnel mais j'aime bien. On peut utiliser aaaa/mm/jj et Access utilisera le séparateur de date sur système.

    Si l'utilisateur entre 02/03/2016, il va voir 2016-03-02 sur un système français et 2016-02-03 sur un système anglais (ou US).
    Donc le problème n'est pas en soi résolu mais l'ambiguïté, une fois la saisie faite, est levée car le mois et le jour sont clairement identifiés.

    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.

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Évidement si tes dates proviennent d'un fichier texte, t'es fait. Il faut savoir quel est le bon format pour les interpréter correctement en découpant la chaîne à la main.
    Pour Access c'est du texte sans indication que ce pourrait être une date et si tu lui demande de la convertir, il se basera (probablement) sur le format de date défini au niveau de Windows.

    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.

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Dernier point, en interne les dates sont stockées comme des réels. La partie entière donne le nombre de jour depuis une date de référence (différente sur Windows et su Mac) et la partie décimale le nombre de 100ième de secondes (ou de secondes ?) depuis 00:00:00.
    Et dans SQL, c'est le format US qui est utilisé pour l'affichage des date.
    Dans l'éditeur c'est le format de Windows .

    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.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Comme la dit très justement marot_r, la seule chose vaille c'est le format international!


    http://www.developpez.net/forums/d15...u/#post8394195

    Et ça marche même dans le requêteur d'Access!

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 206
    Par défaut
    Désolé pour le temps de réponse, un coup de fil à prendre !

    Effectivement, j'ai fait quelques essais ; les données entrées étaient : 01/02/2000 et 13/01/2000 avec pour résultat dans ma table avec comme format aaaa/mm/jj :
    madateyy
    2000/01/02
    2000/02/01
    2000/01/13
    2000/01/13
    2000/02/01
    2000/01/02
    2000/01/13
    2000/01/13
    2000/02/01
    2000/01/13

    Le code pour insérer :
    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
    Private Sub btnok_Click()
     
    Dim dateav12jj As Date
    Dim dateav12mm As Date
    Dim dateap12jj As Date
    Dim dateap12mm As Date
     
    dateav12jj = Format(Me.txtav12.Value, "dd/mm/yyyy")
    dateav12mm = Format(Me.txtav12, "mm/dd/yyyy")
    dateap12jj = Format(Me.txtap12, "dd/mm/yyyy")
    dateap12mm = Format(Me.txtap12, "mm/dd/yyyy")
     
     
     
     
    CurrentDb.Execute "INSERT INTO Table1(madateyy) VALUES (# " & dateav12jj & " #) "
    CurrentDb.Close
    CurrentDb.Execute "INSERT INTO Table1(madateyy) VALUES (#" & dateav12mm & "#) "
    CurrentDb.Close
    CurrentDb.Execute "INSERT INTO Table1(madateyy) VALUES (#" & dateap12jj & "#) "
    CurrentDb.Close
    CurrentDb.Execute "INSERT INTO Table1(madateyy) VALUES (#" & dateap12mm & "#) "
    CurrentDb.Close
     
    CurrentDb.Execute "INSERT INTO Table1(madateyy) VALUES (#" & Format(dateav12jj, "yyyy/mm/dd") & "#) "
    CurrentDb.Close
    CurrentDb.Execute "INSERT INTO Table1(madateyy) VALUES (#" & Format(dateav12mm, "yyyy/mm/dd") & "#) "
    CurrentDb.Close
    CurrentDb.Execute "INSERT INTO Table1(madateyy) VALUES (#" & Format(dateap12jj, "yyyy/mm/dd") & "#) "
    CurrentDb.Close
    CurrentDb.Execute "INSERT INTO Table1(madateyy) VALUES (#" & Format(dateap12mm, "yyyy/mm/dd") & "#) "
    CurrentDb.Close
     
    CurrentDb.Execute "INSERT INTO Table1(madateyy) VALUES (#" & Format(Me.txtav12.Value, "yyyy/mm/dd") & "#) "
    CurrentDb.Close
    CurrentDb.Execute "INSERT INTO Table1(madateyy) VALUES (#" & Format(Me.txtap12.Value, "yyyy/mm/dd") & "#) "
    CurrentDb.Close
     
     
    End Sub
    On voit bien que dans le cas de mes paramètres régionaux + version Access, celui-ci considère que la date entrée dans la textbox est au format jj/mm/aaaa ; Les lignes 2, 5 et 9 sont donc au même format :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    'cas de la date dans la box mise au format mm/dd/yyyy par le code VBA
    CurrentDb.Execute "INSERT INTO Table1(madateyy) VALUES (#" & dateav12mm & "#) "
    'cas de la date mise au format dd/mm/yyyy par le code VBA puis au format international dans la requête
    CurrentDb.Execute "INSERT INTO Table1(madateyy) VALUES (#" & Format(dateav12jj, "yyyy/mm/dd") & "#) "
    'cas de la valeur de la textbox mise au format international dans la requête SQL
    CurrentDb.Execute "INSERT INTO Table1(madateyy) VALUES (#" & Format(Me.txtav12.Value, "yyyy/mm/dd") & "#) "
    Pour que la date soit correctement enregistrée dans la table au format international, il faut donc que celle-ci soit rentrée sous la forme jj/mm/aaaa par l'utilisateur ayant les mêmes paramètres régionaux que moi, puis utiliser le Format()
    Je vais essayer comme ça pour l'instant (en réglant donc le problème niveau utilisateur) et voir ce que ça donne par la suite, en utilisant la date dans divers scenarii.

    Merci en tout cas de m'avoir reparlé de ce format que je crois avoir aperçu quelque part sans y avoir vraiment fait attention !

    Je laisse le sujet en non résolu encore 24h, au cas où quelqu'un aurait une autre piste à proposer !

    [au passage, je cherche toujours une piste pour ce problème]

  9. #9
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    un tuto pour les parametres regionaux :
    http://jpcheck.developpez.com/tutori...international/

    le cas le plus casse pied etant celui allemand, avec un separateur "." au lieu des habituels "/"
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

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

Discussions similaires

  1. gestion des dates dans un formulaire
    Par clement42 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 18/05/2006, 11h34
  2. [VB6]gestion des dates
    Par luckelm dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 19/04/2006, 20h25
  3. Application international (Gestion des dates)
    Par vsavoir dans le forum C++Builder
    Réponses: 2
    Dernier message: 01/08/2005, 10h22
  4. Réponses: 3
    Dernier message: 13/08/2004, 18h52
  5. [MCD] [MCD] Gestion des dates
    Par brionne dans le forum Schéma
    Réponses: 3
    Dernier message: 30/05/2003, 13h01

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