Access - cle primaire qui evolué avec l'année

Mtygolu Messages postés 338 Statut Membre -  
LatelyGeek Messages postés 1774 Date d'inscription   Statut Membre Dernière intervention   -
salut,
j'ai fait une base de donnée pour des stock de pièce qui marche
quand je saisie mes n° de commande (clé primaire), je les rentre manuellement
donc maintenant je voudrais

1 - que les n° de commande s'incrémentent automatiquement

2 - si possible que le début du n° de commande corresponde a l'année en cours
exemple : 08001 - 08002 et ensuite 09001 - 09002 quand on sera en 2009

si vous avez une idée , je suis preneur
Merci
--

« Je suis capable du meilleur et du pire.
Mais, dans le pire, c’est moi le meilleur. »
Configuration: Windows XP-SP2
Firefox 2.0.0.14

5 réponses

  1. LatelyGeek Messages postés 1774 Date d'inscription   Statut Membre Dernière intervention   550
     
    Tu devrais mettre dans la valeur par défaut
    =VraiFaux((Format(Date();"aa")*1000)+1>MaxDom("[N°Commande]";"[Commandes]")+1;(Format(Date();"aa")*1000)+1;MaxDom("[N°Commande]";"[Commandes]")+1)

    En supposant que ta table s'appelle Commandes.

    J'explique le principe

    Format(Date();"aa")*1000)+1 va donner 8001 pendant toute l'année 2008, puis 9001 toute l'année 2009.
    Je fais abstraction du 0 qui précède, si ton champ est numérique ça n'est qu'une question de format.

    MaxDom("[N°Commande]";"[Commandes]")+1 va donner le prochain numéro de commande, soit mettons 08256 si la dernière était 08255.

    08256 est supérieur à 08001, donc pendant toute l'année 2008, c'est le dernier plus 1 qui va être choisi.

    le premier janvier 2009, il faudra trouver la plus grande valeur entre 9001 et 08756 par exemple.
    Ca sera donc 9001 qui sera retenu.

    Pour l'histoire des zéros devant, deux possibilités.
    Soit tu fais un champ numérique et le format en sera "00000", soit c'est un champ de type texte, et il faudra
    transformer un peu la formule:

    =VraiFaux((Format(Date();"aa")*1000)+1>MaxDom("[N°Commande])";"[Commandes]")+1;"0"&(Format(Date();"aa")*1000)+1;MaxDom("[N°Commande]";"[Commandes]")+1)

    0
    1. Mtygolu Messages postés 338 Statut Membre 48
       
      salut
      merci pour la réponse rapide

      donc comme ma table s'appelle "Commande" et mon champ "N° de commande"(type texte), j'ai reformulé en

      =VraiFaux((Format(Date();"aa")*1000)+1>MaxDom("[N° de Commande])";"[Commande]")+1;"0" & (Format(Date();"aa")*1000)+1;MaxDom("[N° de Commande]";"[Commande]")+1)

      mais quand je veux fermé et sauvegardé , j'ai un message d'erreur :
      fonction 'Dmax' inconnue dans l'expression de validation ou dans la valeur par défaut de 'commande.N° de commande'

      modif impossible pour le moment .... SNIIIF

      --------------------

      « Je suis capable du meilleur et du pire.
      Mais, dans le pire, c’est moi le meilleur. »
      0
  2. LatelyGeek Messages postés 1774 Date d'inscription   Statut Membre Dernière intervention   550
     
    Très bizarre... mais où as tu mis ça? Si tu l'as mis dans la table c'est PEUT-ETRE à cause de ça. Essaye dans le formulaire. Sinon je vois d'autant moins d'explication qu'il a reconnu la fonction puisqu'il l'appelle avec son nom anglais de DMax...
    0
    1. Mtygolu Messages postés 338 Statut Membre 48
       
      bon alors effectivement j'avais mis la fonction dans la table
      donc je viens de la mettre dans le champ du formulaire

      et du coup quand je veut créer un nouvel enregistrement j'ai un "#erreur" dans le champ du n° de commande qui apparait

      cela vient peut etre du faite que pour le moment ma clé primaire n'est pas automatique , quand j'avais fait la table je voulais saisir le n° de commande a la main
      0
    2. Mtygolu Messages postés 338 Statut Membre 48
       
      heu d'ailleurs je fais comment si je veux mettre ma clé primaire automatique , maintenant ?
      0
    3. Mtygolu Messages postés 338 Statut Membre 48
       
      bon alors je suis revenu en arrière
      j'ai remis une numérotation auto a mes n° de commande

      j'ai essayer les 2 fonctions que tu m'a donné dans le champs au niveau du formulaire , la fonction est acceptée (pas de message d'erreur) .
      mais mes numéros de commande sont toujours 1 - 2 - 3 etc

      a défaut je voudrais bien affiché 0001 a la place de 1

      merci
      0
  3. LatelyGeek Messages postés 1774 Date d'inscription   Statut Membre Dernière intervention   550
     
    Evidemment! Le numéro automatique est justement automatique (1 - 2 - 3)
    Tu dois mettre un champ de type numérique.

    Et s'il existe dejà des enregistrements, attention: Ce que je t'ai dit ne fonctionnera que pour les prochains numéros. C'est une valeur par défaut pour les nouveaux enregistrements.

    Si tu veux modifier les anciens, il faut faire une requête mise à jour.
    0
    1. Mtygolu Messages postés 338 Statut Membre 48
       
      donc je viens de revenir en arriere pendant ta reponse
      bon alors effectivement j'avais mis la fonction dans la table
      donc je viens de la mettre dans le champ du formulaire

      et du coup quand je veut créer un nouvel enregistrement j'ai un "#erreur" dans le champ du n° de commande qui apparait

      0
      1. Mtygolu Messages postés 338 Statut Membre 48 > Mtygolu Messages postés 338 Statut Membre
         
        bon je viens de faire un essai rapide sur une base vide
        la fonction marche , je pense que cela viens du fairte que dans ma base de stock , j'ai une relation liée avec un sous formulaire par le n° de commande

        je vais faire des essais pour trouver le bug

        merci a toi
        0
  4. LatelyGeek Messages postés 1774 Date d'inscription   Statut Membre Dernière intervention   550
     
    Non, je ne vois pas le rapport avec les liaisons. Je pencherais plutôt pour des valeurs non numériques dans ta table Commandes.

    Pour trouver la réponse, les tests que tu peux faire sont, dans une requête, faire un Max sur le champ NCommande, puis essayer d'ajouter 1 à ce max.
    Tu verras quand ça coince. Au passage, donner moi la valeur du Max, ça me permettra de réfléchir aussi...

    0
    1. Mtygolu Messages postés 338 Statut Membre 48
       
      bon alors j'ai vidé ma base , juste entre une reference d'aticle et un fournisseur pour pouvoir saisir ma commande

      j'ai vérifié le champ de la table commande , il est bien au format numérique
      j'ai entré la fonction correspondant au format numérique que tu m'a donné en adaptant avec le nom de la table (commande) et du champ (n° de commande)
      =VraiFaux((Format(Date();"aa")*1000)+1>MaxDom("[N° de Commande]";"[Commande]")+1;(Format(Date();"aa")*1000)+1;MaxDom("[N° de Commande]";"[Commande]")+1)

      la fonction est acceptée mais j'ai toujours le "#erreur" qui apparait dans le champ "n° de commande" et je ne peux donc pas saisir une nouvelle commande car ma clé primaire est invalide
      0
      1. LatelyGeek Messages postés 1774 Date d'inscription   Statut Membre Dernière intervention   550 > Mtygolu Messages postés 338 Statut Membre
         
        Tape manuellement le premier numéro de commande. Ca évitera un test qui ne servirait que pour cette première commande justement. Tape 08001 et regarde si la deucième s'appelle 08002, ensuite change la date système, mets toi en 2009 et regarde si la troisième commande porte le numéro 09001
        0
      2. Mtygolu Messages postés 338 Statut Membre 48 > LatelyGeek Messages postés 1774 Date d'inscription   Statut Membre Dernière intervention  
         
        pareil
        j'ai enlevé la fonction
        fait une 1ere commande avec 8001

        remis la fonction dans le champ du formulaire et là ... vlan pareil #erreur
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. LatelyGeek Messages postés 1774 Date d'inscription   Statut Membre Dernière intervention   550
     
    Désolée, j'ma gourée avec Excel (Qu'est ce qu'ils sont pénibles, chez GrosBill, ils pourraient faire un effort...)

    C'est =VraiFaux((Format(Date();"yy")*1000)+1>MaxDom(...
    0