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

VBA Access Discussion :

[VBA]Numéro automatique commençant par un nombre donné ?


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 22
    Par défaut [VBA]Numéro automatique commençant par un nombre donné ?
    Bonjour,

    voilà, je voudrais ajouter à une table existante (vide) un champ numéro automatique.
    Comment faire pour que la valeur attribuée commence à partir d'un nombre donné ? pour que la valeur du champ soit par exemple "401" au premier enregistrement, "402" au deuxième, etc...
    J'ai déjà un numéro auto dans ma table et access ne veut pas en ajouter un deuxième.
    Serait-il alors possible, étant donné que le premier numéro auto commence par "1" d'ajouter à chaque fois "400" au premier numéro auto pour définir le deuxième champ numéro auto (qui n'en est pas un en fait) ?

    merci pour votre aide

  2. #2
    Membre éclairé Avatar de samlepiratepaddy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 320
    Par défaut
    http://access.developpez.com/faq/?pa...reerSonNumAuto
    je crois que c'est exactement le resultat que tu veux !
    C'est a dire Créer ton propre N°Auto qui s'incrémente tout seul !
    Et qui commence a 400, ben ça c'est pas dur!!!

  3. #3
    Expert confirmé
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Par défaut
    Ce n'est pas la meilleure méthode, il vaut mieux procéder de la sorte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE maTable ALTER COLUMN monChampAutoIncrement COUNTER(400,1)

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 22
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE maTable ALTER COLUMN monChampAutoIncrement COUNTER(400,1)
    avec cette solution, Access affiche le message d'erreur

    "Type de champs de données non valide" (mon champ est un numérique étant donné qu'Access n'accepte qu'un numéro auto et que j'en ai déjà un)

  5. #5
    Membre Expert
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Par défaut
    et si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE maTable ALTER COLUMN monChampAutoIncrement COUNTER(1,400)
    ?
    Début du numéro auto à 1 avec une intervalle de 400, si j'ai bien saisi ce que te propose Caféine.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 22
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE Tbl_CLIENT ALTER COLUMN Num_privilege COUNTER(1,400);
    Cela ne change rien, j'ai toujours le message d'erreur d'Access
    "Type de champs de données non valide"

    et avec la proposition de samlepiratepaddy, aucune valeur ne s'enregistre dans le champ Num_privilege

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Private Sub Form_BeforeInsert(Cancel As Integer)
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset(Me.RecordSource, dbOpenForwardOnly)
    If rs.EOF Then
    Me!Num_privilege = 401
    Else
    rs.MoveLast
    Me!Num_privilege = rs!Num_privilege + 1
    End If
    rs.Close
    Set rs = Nothing
    End Sub

  7. #7
    Membre éclairé Avatar de samlepiratepaddy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 320
    Par défaut
    Re,
    Je ne pense par que le code soit sur le bon evènement !
    Sur afterMaj du premier champ rempli peut etre !
    Mais attention dans ton code tu partira toujours de 401 !!!!
    Me!NumPrivilege doit etre le dernier N° de la table !!!
    Et non =401 !!!
    La première ligne OK mais la seconde tu veux bien quelle affiche 402, la troisième 403 etc....
    Sinon dans ton code actuel, il renverra toujours 402 en résultat !
    il faut donc ajouter 1 au dernier enregistrement de NumPrivilege de ta table !
    @+

  8. #8
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 618
    Billets dans le blog
    67
    Par défaut
    Pour la 1ère solution,
    As tu mis [event procedure] sur l'evenement BeforeInsert de ton form:

    Sinon pour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE Tbl_CLIENT ALTER COLUMN Num_privilege COUNTER(1,400);
    quelle version d'access utilise tu ?
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 22
    Par défaut
    dans les propriétés du form sous VBA, il y a bien [event procedure] dans BeforeInsert.
    Sinon j'utilise Access 2003.

  10. #10
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 618
    Billets dans le blog
    67
    Par défaut
    Ton champ Num_privilege dans ta table tbl_Client est de quel type pour le moment ?
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 22
    Par défaut
    Num_privilege est de type Numérique (Entier Long)

  12. #12
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 618
    Billets dans le blog
    67
    Par défaut
    Pour la 1ère solution sur ajout d'1 nouvel enrg normalement 1 numéro s'ajoute égal à 1+le numéro de l'enrg précédent, mais sur ajout seulement.

    Je ne conseil plutot d'utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE Tbl_CLIENT ALTER COLUMN Num_privilege COUNTER(1,400);
    Ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE Tbl_CLIENT ADD COLUMN Num_privilege COUNTER(1,400);

    mais il faut supprimer ton champ Num_Privilege avant.
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 22
    Par défaut
    Pour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE Tbl_CLIENT ALTER COLUMN Num_privilege COUNTER(1,400);
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ALTER TABLE Tbl_CLIENT ADD COLUMN Num_privilege COUNTER(1,400);
    j'ai un message d'erreur qui me dit
    "la table résultante ne peut pas avoir plus d'un champ AutoNumber"

  14. #14
    Expert confirmé
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Par défaut
    Tu ne peux pas avoir plus d'un champ autoincrement par table.

    je vais tester mon code sur une base 2000 ...

    en attendant as-tu bien orthographié le nom du champ autoincrement de ta table ainsi que ta table ?

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 22
    Par défaut
    Oui, le nom du champ et le nom de la table sont bien orthographiés;

  16. #16
    Expert confirmé
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Par défaut
    Bon je viens de tester ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    docmd.RunSQL "ALTER TABLE clients ADD COLUMN id COUNTER(401);"
    ce code fonctionne mais uniquement pour les nouveaux enregistrements que tu vas ajouter.

    Entre nous, un id autoincrémenté n'a pas à être porteur d'information, c'est une erreur de conception, le numéro pourrait être arbitraire, si tu as besoin de créer un chrono je te recommande d'utiliser un autre champ ou de repenser ton modèle.

  17. #17
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 33
    Par défaut
    Salut
    Autre solution qu'on m'avait proposé
    1- créer une table temporaire tbl1 avec un champ contenant la valeur souhaité - 1 (400-1=399)
    2 - créer une requête ajout avec comme source tbl1
    et ajout table : sélectionne ta table
    et sélectionne ton champ n° auto
    3 - dans ta table (avec ton numéro auto) supprime la clé primaire, les propriétés null interdit, indexé, valide si
    4 - exécute la requête ajout
    5 - supprime la table tbl1 ainsi que la requête ajout
    6 - compacte ta base de donnée
    7 - suprime le nouvel enregistrement dans ta table
    et enfin remet ta clé ainsi que les paramètre supprimés

    Je sais que sais long mais je pense que ça marche

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 167
    Par défaut
    Je viens de suivre les procédures décrites pour initialiser un autonumber à ma table à partir d'un nombre précis et ca fonctionner sans problème. Excellente suggestion. Bravo !

    Merci pour tous.

  19. #19
    Membre confirmé
    Homme Profil pro
    apprenti ingénieur en informatique et réseaux
    Inscrit en
    Octobre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : apprenti ingénieur en informatique et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 71
    Par défaut
    Désolé de remonter le message, mais pour résoudre le problème de Nefret j'ai du modifier mon numeroAuto en Numérique, sauvegarder, puis le remettre en numeroAuto. et la requete SQL marche.

  20. #20
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 137
    Par défaut
    Bonjour,

    Tu fais ça en plein milieu du fonctionnement de ton appli ?

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

Discussions similaires

  1. [XL-2010] VBA: Supprimer ligne commençant par un caractère donné
    Par arves dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/01/2014, 10h07
  2. [RegEx] Trouver un mot commençant par une lettre donnée
    Par Arget dans le forum Langage
    Réponses: 7
    Dernier message: 18/09/2011, 17h41
  3. [Chaines de caractères] commençant par un nombre
    Par sempire dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 13/05/2009, 18h30
  4. Réponses: 2
    Dernier message: 03/03/2008, 03h31
  5. VBA: Supprimer ligne commençant par un caractère donné
    Par urbanspike dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 18/01/2008, 12h03

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