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 :

Enregistrement bizarre d'une date [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    analyste-programmeur
    Inscrit en
    Mars 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : analyste-programmeur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2013
    Messages : 28
    Points : 24
    Points
    24
    Par défaut Enregistrement bizarre d'une date
    Bonjour à tous,
    J'ai un problème étonnant avec une date.
    Elle est saisie dans une zone format texte avec un masque de saisie "00/00/0000;0;_"
    La date saisie par l'utilisateur est 12/05/1978, soit une année sur 4 chiffres.
    Cette saisie est destinée à une table où tout est enregistré au format texte, donc jusque là pas de souci.
    Maintenant, j'ai besoin de cette date dans une autre table où elle sera au format date.
    Je la convertis donc en utilisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CDate(Me.Controls("maZoneDate").Value)
    Mais là, si j'affiche la table, je retrouve 30-déc-1899.
    Et si je clique sur la cellule de la table, j'ai 00:01:45.
    J'ai regardé le tutoriel sur les dates et contrôlé la définition des paramètres régionaux de mon PC qui sont:
    date courte: jj/MM/aaaa
    date longue: jjjj j MMMM aaaa
    année sur deux chiffres entre 1930 et 2029
    premier jour de la sa semaine: lundi
    Et, je ne vois pas d'où vient mon problème.
    Quelqu'un pourrait-il m'aider?
    Merci,
    FabOK

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    Je ne sais pas comment tu arrives à ce résultat.
    Tout ce que je constate c'est que la date 30-déc-1899 00:01:45 correspond au nombre réel obtenu en divisant 12 par 5 puis par 1978.
    C'est à dire comme si on faisait CDate(12/05/1978) au lieu de CDate("12/05/1978").
    Ou CDate(Eval(Me.Controls("maZoneDate").Value))

    Essaie peut-être de passer par des variables intermédiaires.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim sDateEnTexte as string
    Dim dtDate as date
     
    sDateEnTexte = Me.Controls("maZoneDate").Value
    dtDate = CDate(sDateEnTexte)
    A+

  3. #3
    Membre à l'essai
    Homme Profil pro
    analyste-programmeur
    Inscrit en
    Mars 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : analyste-programmeur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2013
    Messages : 28
    Points : 24
    Points
    24
    Par défaut
    Merci pour ta proposition!
    Malheureusement, elle ne résout pas mon problème.
    Je continue de chercher.

  4. #4
    Membre à l'essai
    Homme Profil pro
    analyste-programmeur
    Inscrit en
    Mars 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : analyste-programmeur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2013
    Messages : 28
    Points : 24
    Points
    24
    Par défaut
    Tiens, il y a un truc encore plus drôle.
    A partir de cette date saisie, je dois calculer un age.
    Je fais donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iAge = DateDiff("YYYY", CDate(maZoneDate)), Now)
    Et j'obtiens bien l'age attendu, soit 35 ans

  5. #5
    Membre à l'essai
    Homme Profil pro
    analyste-programmeur
    Inscrit en
    Mars 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : analyste-programmeur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2013
    Messages : 28
    Points : 24
    Points
    24
    Par défaut
    Nouveau test, nouvelle surprise.
    Je convertis avec les fonctions de manipulation des chaines de caractère ma date de 12/05/1978 en 12-05-1978.
    Et maintenant, la date enregistrée dans la table devient 07-août-1894!!!

  6. #6
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Citation Envoyé par fabOK Voir le message
    Nouveau test, nouvelle surprise.
    Je convertis avec les fonctions de manipulation des chaines de caractère ma date de 12/05/1978 en 12-05-1978.
    Et maintenant, la date enregistrée dans la table devient 07-août-1894!!!
    Ça reste dans la logique de ton premier message.
    12-05-1978 = -1971
    Cdate(-1971) = 07/08/1894

    La date en texte est évaluée en expression arithmétique.
    Avec 12-05-1978 ça fait des soustractions.
    Avec 12/05/1978 ça fait des divisions.

    Quand tu passes par les variables intermédiaires, est-ce que tu vois quelque chose en mode pas à pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim sDateEnTexte as string
    Dim dtDate as date
     
    sDateEnTexte = Me.Controls("maZoneDate").Value
    Stop
    ' Est-ce sDateEnTexte contient bien ce qui est attendu ?
     
    dtDate = CDate(sDateEnTexte)
    Stop
    ' Est-ce dtDate contient bien la date attendue ?
    A+

  7. #7
    Membre à l'essai
    Homme Profil pro
    analyste-programmeur
    Inscrit en
    Mars 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : analyste-programmeur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2013
    Messages : 28
    Points : 24
    Points
    24
    Par défaut
    Un MsgBox de sDateEnTexte m'affiche 12/05/1978.
    Et un autre de dtDate m'affiche 12/05/1978.
    Merci de ton aide

  8. #8
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    Il semblerait qu'il n'y ait donc pas d'anomalie côté VBA.
    La conversion Texte->Date fonctionne.
    On peut en déduire que le problème se situe après.

    Comment affectes-tu la date dans le champs de destination ?
    Si tu es capable de reproduire le problème dans une base exemple, n'hésite pas à la poster.

    A+

  9. #9
    Membre à l'essai
    Homme Profil pro
    analyste-programmeur
    Inscrit en
    Mars 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : analyste-programmeur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2013
    Messages : 28
    Points : 24
    Points
    24
    Par défaut
    Ah, ben oui, c'est ça.
    Je n'avais pas mis la date entre guillemets dans la requête de mise à jour de la table.
    Merci de ton aide.

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

Discussions similaires

  1. [AC-2003] Requête pour sortir tous les enregistrements modifés depuis une date
    Par piercleo dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 07/01/2010, 15h08
  2. [MySQL] Enregistrement erroné d'une date provenant d'un formulaire en base
    Par dedein84 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 11/01/2008, 14h25
  3. [Dates] enregistrement d'une date
    Par einsteineuzzz dans le forum Langage
    Réponses: 2
    Dernier message: 19/07/2006, 16h11
  4. Numérotation enregistrement suivant une date
    Par kornkiller dans le forum Access
    Réponses: 6
    Dernier message: 13/06/2006, 10h18
  5. Nombre d'enregistrements à une date donnée
    Par martonpylon12 dans le forum Access
    Réponses: 2
    Dernier message: 18/06/2005, 14h21

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