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

Access Discussion :

Numerotation automatique si champs null à partir de 40000 dans une table [AC-2016]


Sujet :

Access

  1. #1
    Membre à l'essai
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 63
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2020
    Messages : 8
    Points : 11
    Points
    11
    Par défaut Numerotation automatique si champs null à partir de 40000 dans une table
    Bonjour,
    Dans le cadre d'une reprise de données d'une application informatique complexe, je reprends toutes les données existantes via BO. J'ai des numéros automatique obligatoire de l'ancienne application mais qui ne se suivent pas. L'application précédente étant nationale, je la reprends en locale. Ces numéros d'identifications "Volc_Id" sont nécessaires dans des tables annexes.

    Je souhaiterai numéroter mes nouvelles entrées à partir de 40000 (j'ai 37000 numéros pour 27000 entrées) si le champs est vide. Je suppose que c'est un champ calculé et que l'on positionne la formule dans la ligne de l'expression du champs calculé.

    Mais voilà, je n'arrive pas à la formuler correctement avec le langage ACCESS

    J'ai fait de nombreuses recherches, mais je cale.

    Merci pour votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 182
    Points : 5 514
    Points
    5 514
    Par défaut
    Bonjour,

    Pour autant que j'aie bien compris votre question, ceci pourrait peut-être vous convenir selon l'exemple ci attaché.
    1) récupérer vos données dans une table tampon tRecup où le champ Volc_Id est entier long.
    A vérifier: aucun Volc_Id vide ni aucun doublon.
    2) ajouter un enregistrement "bidon" dont le champ Volc_Id = 40000.
    3) créer une table tNew de structure identique à tRecup sauf que le champ Volc_Id est de type "NuméroAuto" et clef primaire.
    4) lancer la requête qAjout_de_tRecup_dans_tNew qui recopie tous les enregistrements de tRecup dans tNew.
    5) supprimer l'enregistrement "bidon" dans tNew.
    6) à partir de maintenant les nouveaux enregistrements entrés dans tNew ont leur Volc_Id qui s'incrémente automatiquement à partir de 40000: 40001, 40002, ...

    Cordialement.
    Fichiers attachés Fichiers attachés

  3. #3
    Membre à l'essai
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 63
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2020
    Messages : 8
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup pour votre aide, mais je pense que ça ne me conviendra pas, à moins de ne pas avoir tout compris. Sur ma table, j'ai effectivement un champs Volc_Id, qui est un numéro sans doublon et qui correspond à un nom et un prénom. Le problème c'est que j'ai deux autres tables, une pour les participations et l'autre correspond à des contacts ou j'ai effectivement aussi le Volc_Id, mais avec dans les deux cas une relation de un Volc_Id à plusieurs dans la table participations et la table contacts. Tout fonctionne à merveille, sauf que maintenant je veux ajouter de nouvelles personnes et c'est là que le bât blesse. Il faudrait que je numérote mes Volc_Id au moment de l'ajout d'une nouvelle fiche dans le formulaire. Probablement, sur le bouton de fermeture du formulaire, sur les propriétés du bouton. J'ajoute donc ma personne et au moment ou je ferme le formulaire l'application devrait numéroter Si [Volc_Id] est null, numéroter à partir de 40000.
    Je pense que c'est possible en mode VBA mais je ne sais pas écrire ma formule.

  4. #4
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 182
    Points : 5 514
    Points
    5 514
    Par défaut
    Si le champ Volc_Id est mis au type NuméroAuto il n'y a pas de valeur à introduire: ce numéro se crée automatiquement dès que le nouvel enregistrement est validé (ce qui se produit entre autres quand on passe à l'enregistrement de la personne suivante).
    Cordialement.

  5. #5
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Salut
    Si j'ai bien compris la problématique, vous souhaitez démarrer le prochain Volc_Id à partir de 40000.
    Je pense que ceci va vous intéresser.
    Sinon créer une req en mode SQL et passer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO NomDeLaTable (Volc_Id)
    SELECT 40000 AS Expr1;
    Exécuter qu'une seule fois
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  6. #6
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 182
    Points : 5 514
    Points
    5 514
    Par défaut
    Un exemple en attaché. Entrez de nouvelles valeurs, le champ Volc_Id y est auto incrémenté.
    Cordialement.
    Fichiers attachés Fichiers attachés

  7. #7
    Membre à l'essai
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 63
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2020
    Messages : 8
    Points : 11
    Points
    11
    Par défaut
    Je réponds à Hypérion, j'ai testé dans le formulaire sur le bouton que j'ai créé pour l'ajout, procédure évènementielle et l'appli me dit que j'ai fait une erreur :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    = INSERT INTO [T02_DonneesAdministratives].[Volc-Id] SELECT 40000 AS Expr1;
    La syntaxe n'est pas valide

    Pour Eric je n'ai pas testé car je pense avoir compris que c'est une manœuvre de renumérotation automatique totale et j'ai plusieurs tables liées, il faudra donc que je fasse cette manip dans toutes les tables ? ça ne me paraît pas simple.

    Merci à vous deux

  8. #8
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Sur l'évènement sur click() du btn de commande, passez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Commande10_Click()
    Dim StrSQL As String
    StrSQL = "INSERT INTO T02_DonneesAdministratives (Volc_Id)"
    StrSQL = StrSQL & "SELECT 40000 AS Expr1"
    CurrentDb.Execute StrSQL, dbFailOnError
    End Sub
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  9. #9
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 182
    Points : 5 514
    Points
    5 514
    Par défaut
    Citation Envoyé par VCM5962 Voir le message
    ...j'ai plusieurs tables liés, il faudra donc que je fasse cette mani dans toutes les tables ?
    La numérotation automatique n'est mise en oeuvre que pour les nouveaux enregistrements. Pour tous les enregistrements existants il n'y a rien à faire, rien à aller modifier (surtout pas même).
    Cordialement.

  10. #10
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 114
    Points : 491
    Points
    491
    Par défaut
    Citation Envoyé par EricDgn Voir le message
    La numérotation automatique n'est mise en oeuvre que pour les nouveaux enregistrements. Pour tous les enregistrements existants il n'y a rien à faire, rien à aller modifier (surtout pas même).
    Cordialement.
    Bonsoir membres du forum,
    bonsoir EricDgn,
    bonsoir hyperion13,

    Vos interventions sont tellement claires que je n'est pas pu m'empêcher d'intervenir
    afin de garder cette discussion parmi tant d'autres où j'ai participé.
    Donc je suis allé récupérer la procédure dans le chemin que vous avez indiqué.
    Vraiment très intéressante. Je vais l'exploiter.
    Je conseille VCM5962, en plus des exemples qu'EricDon a offerts, il devrait voir aussi cette procédure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    Définissez AutoNumbers pour commencer à partir de ...
    La réinitialisation d' un numéro automatique à 1 est simple: supprimez les enregistrements et compactez la base de données.
     
    Mais comment forcez- vous un numéro automatique à démarrer à partir d'une valeur spécifiée? L'astuce consiste à importer un enregistrement avec un de moins que le nombre souhaité, puis à le supprimer. Le sous-suivant effectue cette opération. Par exemple, pour forcer la table "tblClient" à commencer la numérotation à partir de 7500, entrez:
     
        Appelez SetAutoNumber ("tblClient", 7500)
    Sub SetAutoNumber (sTable As String, ByVal lNum As Long)
    En cas d'erreur GoTo Err_SetAutoNumber
        'Objectif: définir le champ NuméroAuto dans sTable pour commencer à lNum.
        'Arguments: sTable = nom de la table à modifier.
        'lNum = le nombre à partir duquel vous souhaitez commencer.
        'Exemple d'utilisation: appeler SetAutoNumber ("tblInvoice", 1000) 
        Dim db As DAO.Database       ' Current db. 
        Dim tdf As DAO.TableDef      'TableDef of sTable. 
        Dim i As Integer             'Loop counter 
        Dim fld As DAO.Field         ' Champ de table. 
        Dim sFieldName As String     'Nom du champ NuméroAuto. 
        Dim vMaxID As Variant        'Current Maximum AutoNumber value. 
        Dim sSQL As String           'Append / Delete string de requête. 
        Dim sMsg As String           'MsgBox string.
     
        lNum = lNum - 1              'Attribuer à 1 de moins que la valeur souhaitée.
     
        'Localisez le champ d'incrémentation automatique de cette table.
        Définir db = CurrentDb ()
        Définissez tdf = db.TableDefs (sTable)
        Pour i = 0 À tdf.Fields.Count - 1
            Définissez fld = tdf.Fields (i)
            Si fld.Attributes Et dbAutoIncrField Alors
                sFieldName = fld.name
                Quitter pour
            Fin si
        Prochain
     
        Si Len (sFieldName) = 0 Alors
            sMsg = "Aucun champ NuméroAuto trouvé dans la table" "" & sTable & "" "."
            MsgBox sMsg, vbInformation, "Cannot set AutoNumber"
        Autre
            vMaxID = DMax (sFieldName, sTable)
            Si IsNull (vMaxID) Alors vMaxID = 0
            Si vMaxID> = lNum Then
                sMsg = "Fournissez un plus grand nombre." "" & sTable & "." & _
                    sFieldName & "" "contient déjà la valeur" & vMaxID
                MsgBox sMsg, vbInformation, "Trop bas".
            Autre
                ' Insérez et supprimez l'enregistrement.
                sSQL = "INSERT INTO" & sTable & "([" & sFieldName & "]) SELECT" & lNum & "AS lNum;"
                db.Execute sSQL, dbFailOnError
                sSQL = "DELETE FROM" & sTable & "WHERE" & sFieldName & "=" & lNum & ";"
                db.Execute sSQL, dbFailOnError
            Fin si
        Fin si
    Exit_SetAutoNumber:
        Quitter sous
     
    Err_SetAutoNumber:
        MsgBox "Error" & Err.Number & ":" & Err.Description,, "SetAutoNumber ()"
        Reprendre Exit_SetAutoNumber
    End Sub
    Je lui conseille de poster une pièce jointe de sa base de données afin qu'on puisse mieux comprendre ses explications.
    toujours pour le bien que vous nous apporté.
    Cordialement.
    Je ne Suis Pas un Expert en Programmation
    Le savoir est la lumière de l'esprit
    Le chemin de la réussite

    Les savants sont les héritiers de la science
    Qui cherche positivement trouve
    Tout ce qui brille n'est pas l'or ou diamant
    Mais l'or et le diamant se trouvent avec sagesse, intelligence et effort

  11. #11
    Membre à l'essai
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 63
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2020
    Messages : 8
    Points : 11
    Points
    11
    Par défaut REMERCIEMENT A TOUS LES PARTICIPANTS
    Je vous remercie tous pour vos précieux conseils, néanmoins n'étant pas experte ACCESS je n'ai pas réussi à les mettre en oeuvre aussi ai-je choisi une autre solution. J'avais beaucoup d'enregistrements mais peu de tables. J'ai donc pensé à exporter toutes mes données sur un tableeur excel et j'ai renuméroté mes volontaires avec un numéro automatique sur excel, fait une RECHERCHEV sur les tables supplémentaires et recopié le tout sur ACCESS ce qui m'a résolu le problème.

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

Discussions similaires

  1. [AC-2007] Utilisation d'un champ de type pièce jointe dans une table liée
    Par lio33 dans le forum VBA Access
    Réponses: 1
    Dernier message: 03/04/2012, 11h39
  2. Réponses: 4
    Dernier message: 06/01/2010, 20h58
  3. recherche de champ vide ou non vide dans une table
    Par milan dans le forum Requêtes
    Réponses: 4
    Dernier message: 22/07/2008, 10h42
  4. Champ independant: valeur par defaut dans une Table
    Par bakaccess dans le forum Access
    Réponses: 2
    Dernier message: 27/02/2008, 15h35
  5. Réponses: 4
    Dernier message: 10/04/2007, 11h10

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