Formatage de date

Résolu
Bonjour,
J'ai un formulaire avec une date de naissance. Dans la table elle est enregistrée sous la forme jj/mm/aaaa.
Le demandeur lui importe peu pour l'instant le jour et le mois, il aimerait avoir 01/01/ et seulement l'année à renseigner. J'ai regardé les différents formats,mais je pense qu'il va falloir que je fasse une macro. Je ne renseignerai que l'année puis avec la macro forcer 01 pour le jour et pour le mois.
Qu'en pensez-vous et si vous avez le code et la façon de le faire je suis preneuse.
Bonne soirée
PS par contre, je ne veux pas modifier le jour et le mois pour les enregistrements déjà créés.

Configuration: Windows / Firefox 88.0

11 réponses

Résumé de la discussion

Un formulaire collecte la date de naissance au format jj/mm/aaaa et le demandeur souhaite n’indiquer que l’année, en imposant 01/01 comme jour et mois sans toucher aux records existants. Des participants évoquent l’utilisation d’une macro/VBA pour remplir automatiquement le jour et le mois lors de l’entrée de l’année et des solutions alternatives comme des formats ou champs séparés. En pratique, plusieurs intervenants envisagent d’un champ année séparé et d’une macro VBA pour forcer le 01/01 dans le champ né, tout en préservant les enregistrements existants. D'autres détails évoquent la nécessité de tester sur une copie de la base et d'assurer qu'aucune donnée existante ne soit modifiée, tout en prévoyant une éventuelle remise à zéro si nécessaire.

Bobot (l’IA à votre service)
  1. Je reviendrai plus tard sur un autre problème si je n'arrive pas à le résoudre, c'est pour insertion d'une photo sur mon formulaire.
    A bientôt
    0
    1. Ok, c'est ce que j'ai fait. Le masque c'est mieux, sinon il vont me mettre une virgule par erreur ou autre.
      Merci
      0
      1. Contributeur
        peux-tu alors marquer la discussion comme résolue?
        0
    2. Super, cela répond exactement à mes besoins, j'ai rajouté un masque de saisie : 0000;;_ à ce champ "andn" de façon qu'il ne tape que 4 chiffres.
      Je ne connaissais pas le code CSng ou je ne m'en souviens plus c'est tellement loin la programmation.
      J'aimerai bien que vous me l'expliquiez, par contre est-il utile du fait que j'ai mis un masque de saisie ?
      Grand merci à vous
      0
      1. Contributeur
        csng() convertit le texte en un nombre (de type
        single
        ).
        comme tu l'as deviné, les lignes 10, 11, 13 et 14 sont inutiles en présence de ce masque de saisie. elles vérifient que le texte est un nombre entier positif.
        je les ai ajoutées après avoir supprimé le masque de saisie que j'avais créé initialement, ne sachant si tu pouvais ou voulais utiliser un tel masque (surtout, pour éviter d'expliquer le masque).
        0
    3. Contributeur
      voilà, je propose ceci:
      - créer un nouveau contrôle de type "boîte de texte" nommé "andn" dans le formulaire, destiné à contenir l'année de naissance
      - rendre non modifiable le contrôle nommé "Né__e_" (ou le cacher, mais pas le supprimer)
      - ajouter ce code dans le formulaire:
      Private Sub Form_Current()
      If Not IsNull(Me.Né__e_) Then
          Me.andn = Year(Me.Né__e_)
      Else
          Me.andn = Null
      End If
      End Sub
      Private Sub andn_AfterUpdate()
      If Not IsNull(andn) Then
          If IsNumeric(andn) Then
              If Int(andn) = CSng(andn) And Int(andn) > 0 Then
                  Me.Né__e_ = DateSerial(andn, 1, 1)
              End If
          End If
      End If
      End Sub
      0
      1. https://www.cjoint.com/c/KEeu1m0mLqE
        bonsoir
        tu trouveras dans ce lien un fichier compressé avec diffirent format de date
        tiens moi au courant
        0
        1. Bonsoir
          Oui je veux bien mais quel fichier dans une BD access ?
          Merci
          0
          1. Contributeur
            en as-tu plusieurs?
            0
          2. @yg_beBonjour, J'ai réduit ma base au minima, par contre je ne sais pas comment vous l'envoyer. C'est la 1ère fois.
            Merci
            0
        2. Bonjour,

          Comment créer un champ indépendant dans un formulaire pour enregistrer une valeur qui sera année de naissance et pouvoir par vba inscrire dans né le 01/01/année de naissance ?
          Merci à vous
          0
          1. Contributeur
            peux-tu partager ton fichier?
            0
          2. @yg_beBonjour, J'ai réduit ma base au minima, par contre je ne sais pas comment vous l'envoyer. C'est la 1ère fois.
            Merci
            0
          3. Contributeur
            @Ouistiti73il faut publier le fichier sur internet (google drive, one drive, cjoint.com, ...) puis partager ici un lien vers le fichier publié.
            0
          4. @yg_behttps://accounts.google.com/ServiceLogin?service=wise&passive=1209600&continue=https://drive.google.com/file/d/1vUGeyH1_WIwEMUyks8HbGDmzQMxD0HOt/view?usp%3Dsharing&followup=https://drive.google.com/file/d/1vUGeyH1_WIwEMUyks8HbGDmzQMxD0HOt/view?usp%3Dsharing

            En espérant bonne réception.
            En fait je ne voudrais entrer qu'une année de naissance et forcer 01/01 en jour et mois pour alimenter mon champ né (e).
            Comme ça si un jour on veut revenir en arrière, il sera possible de remettre le champ né (e) .
            Merci à vous.
            0
          5. Contributeur
            @Ouistiti73le fichier n'est pas public.
            0
        3. Oui désolée, j'ai oublié de préciser c'est bien "Date/Heure".
          Elle ne veut pas d'un autre champ, je lui avais demandé.
          Ce que je pensais, c'est de modifier le formulaire. Remplacer le champ "né le" par "AnnéeNaissance" et après modif, il crée 01/01/Année renseignée dans le champ "AnnéeNaissance" et met à jour le champ "né le" qui pourrait rester dans le formulaire en non visible. (je ne sais plus s'il doit apparaitre sur le formulaire ou non pour qu'il soit maj)
          Le jour où ils veulent revenir à la saisie complète, il suffira de modifier ce champ par "né le"
          Qu'est ce que vous en pensez ? Par contre les dates rendant parfois des choses bizarres, je ne sais pas trop comment faire ça.
          Cela revient à votre deuxième point. Je peux laisser les 2 en visuel mais ne pouvoir modifier que le champ "AnnéeNaissance" du formulaire.
          0
          1. Bonjour, Merci pour votre retour rapide.
            C'est un formulaire pour mettre à jour une table Adhérent, dans cette table il y a un champ Né le -
            (en aparté je n'aime pas ce nom de champ, mais ce n'est pas moi qui ai créé cette BD). je viens juste apporter des modifs et régler certains problèmes.
            le format de Né le est en Date, général et le format est 00/00/00;0;_
            L'utilisateur voudrait ne taper que l'année lors d'une inscription et que cela inscrive dans la table 01/01/1972 par ex.
            Par contre il veut conserver pour les adhérents déjà créés leur date d'anniversaire car si marche arrière, il n'y aura que les nouveaux à modifier.
            Il y a un bouton "Nouvelle Inscription" avec ce contenu sur clic :

            Private Sub Commande193_Click()
            On Error GoTo Err_Commande193_Click

            DoCmd.GoToRecord , , acNewRec
            If Month(Date) < 8 Then
            INSCRADH = Year(Date) - 1

            Else
            INSCRADH = Year(Date)

            End If
            [Insen cours] = DLookup("[AnnéeCours]", "Année en cours")

            Me.CivADH.SetFocus
            Me.Code_intervenant = 1

            Exit_Commande193_Click:
            Exit Sub

            Err_Commande193_Click:
            MsgBox Err.Description
            Resume Exit_Commande193_Click

            End Sub

            Le format de la date dans le formulaire est texte brut avec un masque de saisie 00/00/00;0;_

            J'aurais voulu que dans le champ né le, le curseur arrive directement sur
            l'année type 01/01/???? lors d'un nouvel enregistrement et en Modification, c'est pas grave, on modifie rarement des dates d'anniversaire, à moins d'une erreur. Et donc dans la table on obtiendrait 01/01/1972
            J'espère que cela vous paraît clair.
            Merci à vous

            Il y a longtemps que je ne pratique plus et beaucoup de choses oubliées et des nouveautés à couper le souffle. Style on point sur la table principale et on clic sur formulaire et là magique tout apparait.
            0
            1. Contributeur
              tu n'as pas répondu à ma question, peux-tu confirmer que le type du champ "né le" est "Date/Heure"? Le format n'a en général que très peu d'importance.

              Le plus propre, je pense, serait de créer un champ année dans la table, au lieu d'enregistrer une fausse date de naissance dans ce cas.

              Sinon, ajouter un contrôle
              année de naissance
              dans le formulaire, et, quand ce contrôle est modifié, adapter la valeur du contrôle
              né le
              du formulaire.
              0
          2. Contributeur
            bonjour, quel est le type du champ dans la table?
            tu ne dis rien de ton formulaire, ni de comment le formulaire provoque la création d'un enregistrement.
            tu peux peut-être utiliser la fonction DateSerial, pour transformer l'année en une date, exemple:
            DateSerial(2054,1,1)
            0