Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Modélisation
Modélisation Le forum qui vous aide à résoudre vos questions relatives à la modélisation (tables et relations) de votre base de données sous Access. Pour les états et les formulaires, postez dans le forum IHM.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/12/2010, 21h37   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 19
Points : 2
Points : 2
Par défaut Remettre à zéro NumeroAuto chaque année

Bonjour,


En fait je suis novice dans Access et je ne maitrise pas du tt vba et j'ai une BD pour la gestion des patients dans une clinique et l'dentifient est de type NumeroAuto.

Alors j'aimerais avoir la possibilité d'initialiser l'identifiant chaque année et de commencer la numerotation par 001.

Mon besoin donc se resume en deux problèmes :

1 - Je veux un champs numerique qui s'autoincrémente automatiquement

2 - Je veux que ce champs se reinitialise chaque année.

aidez-moi svp car on est en fin d'année et je n'ai pas encore pu trouver de solution.

Merci d'avance.

NB : je ne tient pas à ce que ce champs soit la clé primaire de la table même si c le K aujourd'hui.
khroujou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 21h50   #2
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 204
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 204
Points : 5 255
Points : 5 255
Salut,

As-tu un autre champ qui permet de connaitre l'année, ou bien est-ce l'année du jour ou tu ajoutes l'enregistrement ?
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 22h33   #3
Membre Expert
 
Inscription : mars 2006
Messages : 1 331
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 1 331
Points : 1 460
Points : 1 460
Bonsoir,

===> Peut-être...

Cordialement.
__________________
Questions techniques par MP
Le peu que je sais, c'est à mon ignorance que je le dois.
...............................................................................Sacha Guitry
francishop est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 11h17   #4
Invité de passage
 
Inscription : décembre 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 19
Points : 2
Points : 2
J'ai un champs de type date dont la valeur par défaut est parametrée à
khroujou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 12h12   #5
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour Khroujou, Francishop et User,

Voici le code "bête et méchant" qui permet de ré-initialiser un champ en numéro auto :
Code sql :
ALTER TABLE [nom_table] ALTER [nom_champ_en_numero_auto] COUNTER(123,1) ;
Avec :
  • 123 : numéro forcé ;
  • 1 : incrément désiré.
A adapter à ton besoin de manière "non-bête et non-méchante".
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/12/2010, 12h25   #6
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 204
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 204
Points : 5 255
Points : 5 255
Salut,

Si tu as 1 déjà un champ date alors tu peux garder ton champ numéro auto et créer un champ calculé dans une requête ou dans un formulaire:

Par exemple, si tu as une table T_Facture, un champ numéro auto NF, un champ date DateF, alors tu peux créer un champ calculé Numero basés sur ces deux champs:

Code :
Numero : DCount("NF","T_Facture","Year(DateF)=" & Year([DateF]) & " and [NF]<" & [NF])+1
Autre possibilité en appliquant la méthode proposé par francishop et en transformant ton champ numéro auto NF en entier long et:

Sur l'évènement avant-insertion du formulaire de saisie basé sur la table T_Facture, mettre le code :

Code :
1
2
3
4
5
Private Sub Form_BeforeInsert(Cancel As Integer)
 
Me.NF = Nz(DMax("NF", "T_Facture", "Year(DateF)=" & Year(Date)), 0) + 1
 
End Sub
A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/12/2010, 14h22   #7
Invité de passage
 
Inscription : décembre 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 19
Points : 2
Points : 2
Merci les amis pour les efforts que vous deployez mais :
Je n'ai pas compris où dois-je mettre le code "bête et méchant" de Richard_35 ni la première solution proposée par User alors que la deuxième solution a marché mais pas sans problème.

En fait j'ai inséré le code dans les deux formulaires qui utilisent le champs en question [RéfPC] après avoir créer au niveau de la table mère "EVASANS" un autre champs NumAuto [NRéfPC] juste comme clé primaire.

Le problème est que la base de données est partagée entre 3 utilisateurs et je ne veux pas que les deux autres, moins avertis que moi en Access, se trompent et saisissent un numero manuellement dans le champs [RéfPC].

D'autres part le champs [RéfPC] est récupéré dans un état sous forme 001 - 2011. Ma question :

Ya t-il une possibilité de le récupérer sous forme de 3 ou 4 chiffres (001 ou 0001)?

Comment empécher la saisie à la fois dans les formulaires et dans la table affichée en mode feuille de données?

C long mais j'espère au mois que c clair.

Merci.
khroujou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 14h33   #8
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Il faut créer une requête, dans l'onglet "Requête", en mode SQL : tu copies/colles ce code
Code sql :
ALTER TABLE [nom_table] ALTER [nom_champ_en_numero_auto] COUNTER(123,1) ;
et tu sauvegardes la requête en la nommant "Req_bete_etmechante", par exemple...
En l'exécutant (double-click), cette requête remet à xxx le champ numéro auto indiqué.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 17h11   #9
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 204
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 204
Points : 5 255
Points : 5 255
Salut,

La solution proposée par francishop et moi-même est 1 peu problématique dans le cas de plusieurs utilisateurs simultanés qui ajoutent un enregistrement dans la base.

C'est pourquoi je te conseille la solution "bête et méchante" proposée par Richard.

A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 19h31   #10
Invité de passage
 
Inscription : décembre 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 19
Points : 2
Points : 2
Le problème avec la solution "méchante" c sont les doublons qui seront refusés si champs clé primaire.

Alors ya t-il une façon d'avoir deux champs numeroAuto dans la même table un qui servira à la clé primaire et l'autre sera reinitialisé au besoin (début d'année dans mon cas) et continue à s'incrémenter par +1?
khroujou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 23h20   #11
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 204
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 204
Points : 5 255
Points : 5 255
Salut,

Dans ce cas le 2ème champ de numérotation sera un champ calculé dans une requête par exemple et les données de ce champ ne seront pas stockées dans la table, donc pas de 2ème champ numéro auto dans ta table.

Il s'agit de la 1ère solution que je t'ai proposée

Code :
Numero : DCount("NF","T_Facture","Year(DateF)=" & Year([DateF]) & " and [NF]<" & [NF])+1
A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 10h30   #12
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 410
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 410
Points : 4 439
Points : 4 439
Bonjour à tous,

pour les problèmes de numérotation personnalisée on peut aussi regarder dans le tutoriel :

Numérotation personnalisée des enregistrements dans Access 2010

Si on n’a pas (encore) Access 2010 (la version utilisée n’est pas précisée dans la discussion), on se contentera du paragraphe : II - Avant Access 2010

On peut également consulter le paragraphe : III-C - Intérêt d'une table supplémentaire.
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 11h41   #13
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour à tous,

Khroujou, toutes les solutions "non-bêtes et non-méchantes" proposées sont des solutions élégantes. Après étude de ta part, c'est toi le décisionnaire.

L'adaptation de la solution "bête et méchante" serait de mettre ton champ TonChampDate
Citation:
J'ai un champs de type date dont la valeur par défaut est parametrée à =Date()
et ton champ numéro auto en clé primaire. Donc :
  • ta clé primaire serait le couple TonChampDate / TonChampNumeroAuto (et non pas TonChampNumeroAuto seul) ;
  • en début d'année (donc quand Date() change), appliquer la solution "bête et méchante" décrite précédemment.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 18h54   #14
Invité de passage
 
Inscription : décembre 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 19
Points : 2
Points : 2
Richard_35 :

Pour moi je pense que c la solution idéale.

Le problème est que je ne sais pas comment créer un champs calculé dans une table et lui attribuer la fonction "clé primaire".

comme je l'ai dit au départ, j'ai un niveau de débutant dans access. J'ai commencé avec Access 2000 et aujourd'hui j'utilise Access 2007.

Merci ka même.
khroujou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2010, 15h58   #15
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour Khroujou,

Je ne comprends pas :
Citation:
Pour moi je pense que c la solution idéale.
et
Citation:
Le problème est que je ne sais pas comment créer un champs calculé dans une table et lui attribuer la fonction "clé primaire".
sont deux remarques contradictoires.

Ta 1ère remarque :
TaTable
- id_numauto (clé primaire, numéro auto)
- champ_date (clé primaire, champ date)
...
==> le couple id_numauto/champ_date constitue la clé primaire de ta table ;
==> c'est toi qui gère l'initialisation de id_numauto quand, dans ton formulair en champ_date change ;
==> ce n'est pas une solution très élégante... "bête et méchante", même.

Ta 2ème remarque :
Il faut utiliser les tutos indiqués : il montrent, très bien, comment gérer une numérotation spécifique.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/12/2010, 11h28   #16
Invité de passage
 
Inscription : décembre 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 19
Points : 2
Points : 2
Bonjour,

Peut-être que je me suis mal exprimé. La question devient :

Comment créer une clé primaire basée sur le couple NumeroAuto/ChampsDate?

à +
khroujou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/12/2010, 13h23   #17
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour Khroujou,

Citation:
Comment créer une clé primaire basée sur le couple NumeroAuto/ChampsDate?
En mode "création", sur ta table (là où apparaît la liste des champs) :
  • sélectionner les 2 lignes NumeroAuto et ChampDate (shift + sélecteur des deux lignes) ;
  • click droit sur la sélection (les deux lignes en noir) ;
  • choisir "Clé primaire".
==> l"icône "clé" doit apparaître sur le sélecteur des deux lignes.

Tu peux, également, consulter l'aide en ligne de Access pour toutes ces questions de fonctionnement non-techniques.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/12/2010, 16h25   #18
Invité de passage
 
Inscription : décembre 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 19
Points : 2
Points : 2
Merci Rchard_35, merci à tous.

Toutes les solutions proposées ont été utiles.

J'ai choisi la solution "Bête_et_méchante" après avoir prametré le couple de champs NumeroAuto/Date comme clé primaire et ça marche.

Encore merci et à bientôt
khroujou est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h23.


 
 
 
 
Partenaires

Hébergement Web