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

Fermé
Mtygolu Messages postés 337 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 6 février 2016 - 15 juin 2008 à 14:00
LatelyGeek Messages postés 1758 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 janvier 2023 - 16 juin 2008 à 19:13
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
A voir également:

5 réponses

LatelyGeek Messages postés 1758 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 janvier 2023 550
15 juin 2008 à 15:23
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
Mtygolu Messages postés 337 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 6 février 2016 48
15 juin 2008 à 15:55
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
LatelyGeek Messages postés 1758 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 janvier 2023 550
15 juin 2008 à 16:44
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
Mtygolu Messages postés 337 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 6 février 2016 48
15 juin 2008 à 17:01
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
Mtygolu Messages postés 337 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 6 février 2016 48
15 juin 2008 à 17:15
heu d'ailleurs je fais comment si je veux mettre ma clé primaire automatique , maintenant ?
0
Mtygolu Messages postés 337 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 6 février 2016 48
15 juin 2008 à 18: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
LatelyGeek Messages postés 1758 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 janvier 2023 550
15 juin 2008 à 19:00
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
Mtygolu Messages postés 337 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 6 février 2016 48
15 juin 2008 à 19:10
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
Mtygolu Messages postés 337 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 6 février 2016 48 > Mtygolu Messages postés 337 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 6 février 2016
15 juin 2008 à 19:26
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
LatelyGeek Messages postés 1758 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 janvier 2023 550
16 juin 2008 à 08:16
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
Mtygolu Messages postés 337 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 6 février 2016 48
16 juin 2008 à 18:06
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
LatelyGeek Messages postés 1758 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 janvier 2023 550 > Mtygolu Messages postés 337 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 6 février 2016
16 juin 2008 à 18:31
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
Mtygolu Messages postés 337 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 6 février 2016 48 > LatelyGeek Messages postés 1758 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 janvier 2023
16 juin 2008 à 18:51
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LatelyGeek Messages postés 1758 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 janvier 2023 550
16 juin 2008 à 19:13
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