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

Modélisation Discussion :

Remettre à zéro NumeroAuto chaque année


Sujet :

Modélisation

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 28
    Points : 19
    Points
    19
    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.

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 388
    Points : 19 811
    Points
    19 811
    Billets dans le blog
    66
    Par défaut
    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 ?

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 350
    Points : 1 701
    Points
    1 701
    Par défaut
    Bonsoir,

    ===> Peut-être...

    Cordialement.

  4. #4
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    J'ai un champs de type date dont la valeur par défaut est parametrée à

  5. #5
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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".

  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 388
    Points : 19 811
    Points
    19 811
    Billets dans le blog
    66
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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+

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    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.

  8. #8
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Il faut créer une requête, dans l'onglet "Requête", en mode SQL : tu copies/colles ce code
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    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é.

  9. #9
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 388
    Points : 19 811
    Points
    19 811
    Billets dans le blog
    66
    Par défaut
    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+

  10. #10
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    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?

  11. #11
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 388
    Points : 19 811
    Points
    19 811
    Billets dans le blog
    66
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    Numero : DCount("NF","T_Facture","Year(DateF)=" & Year([DateF]) & " and [NF]<" & [NF])+1
    A+

  12. #12
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 756
    Points : 57 755
    Points
    57 755
    Billets dans le blog
    42
    Par défaut
    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.

  13. #13
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    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
    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.

  14. #14
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    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.

  15. #15
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Khroujou,

    Je ne comprends pas :
    Pour moi je pense que c la solution idéale.
    et
    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.

  16. #16
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    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?

    à +

  17. #17
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Khroujou,

    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.

  18. #18
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    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

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

Discussions similaires

  1. [SQL] Sélectionner un mois pour chaque année
    Par kreatik dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 07/06/2007, 14h35
  2. [c#] remettre à zéro une form
    Par erazorhead dans le forum Windows Forms
    Réponses: 13
    Dernier message: 06/04/2006, 14h48
  3. Moyenne 5 dernières année pour chaque année?
    Par kissmytoe dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/02/2006, 19h28
  4. remettre à zéro un compteur sql
    Par luimême dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 03/01/2006, 11h35
  5. [ORACLE 9i] Avoir 12 lignes pour 12 mois de chaque années
    Par Worldofdada dans le forum Oracle
    Réponses: 4
    Dernier message: 17/11/2005, 11h57

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