1. #1
    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 671
    Points
    1 671

    Par défaut Réinitialiser un champ de type numéro auto

    Bonjour,

    Pour réinitialiser un NumAuto j'ai cherché, certainement trés mal, mais je n'ai rien trouvé pour remettre à zéro un auto-increment à l'aide de quelques lignes de code.

    La table-->"Tbl_Demo" Le champ de type numéro auto-->Id_Clef :
    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
    Private Sub CmdSup_Click()
    On Error Resume Next
     
    Dim Rst As DAO.Recordset
    Dim StrCritere As String
     
     StrCritere = "SELECT * FROM Tbl_Demo"
     Set Rst = CurrentDb.OpenRecordset(StrCritere, dbOpenDynaset)
     
    ' On supprime toutes les données de la table
     Rst.MoveFirst
     Do Until Rst.EOF
        Rst.Edit
        Rst.Delete
     Rst.MoveNext
    Loop
     
    ' Mise à zéro du compteur 
        Rst.AddNew
        Rst!Id_Clef = 0     '99 pour débuter à 100 
        Rst.Update
     
    ' On élimine ce 0 prohibé, voir 99
     Rst.MoveFirst
      Do Until Rst.EOF
        Rst.Edit
        Rst.Delete
      Rst.MoveNext
     Loop
     
    End Sub
    Cordialement.
    Questions techniques par MP
    Le peu que je sais, c'est à mon ignorance que je le dois.
    ...............................................................................Sacha Guitry

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Developpeur VBA, C# et VB.Net =]
    Inscrit en
    juillet 2007
    Messages
    12 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Developpeur VBA, C# et VB.Net =]
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2007
    Messages : 12 879
    Points : 28 846
    Points
    28 846

    Par défaut

    salut,
    je pense que sinon, un
    suivi d'un compactage de la base fonctionne.
    Toutefois, tu ne pourras pas le faire si des liaisons existent avec d'autres tables.
    Pas de question technique par MP, je ne réponds pas

    Apprendre à programmer avec Access 2016

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  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 671
    Points
    1 671

    Par défaut

    Bonjour,

    Citation Envoyé par jpcheck Voir le message
    Toutefois, tu ne pourras pas le faire si des liaisons existent avec d'autres tables.
    Si on doit supprimer les données de plusieurs tables liées, il faut commencer par les tables secondaires et terminer par les tables principales des liaisons.
    Par contre,cet ordre ne s'avère pas indispensable avec des tables liées.

    Citation Envoyé par jpcheck Voir le message
    je pense que sinon, un
    suivi d'un compactage de la base fonctionne.
    L'intérêt de ces quelques lignes de code, que j'ai hésité à mettre en ligne, est justement de ne pas fermer la base. Ce qui peut aider à l'occasion.

    Cordialement.
    Questions techniques par MP
    Le peu que je sais, c'est à mon ignorance que je le dois.
    ...............................................................................Sacha Guitry

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    mars 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2010
    Messages : 22
    Points : 21
    Points
    21

    Par défaut

    Sinon tu peux utiliser la procédure suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim SQL As String
     
    'Purge des enregistrements de la table "Tbl_NumAuto"
    SQL = "DELETE * FROM Tbl_NumAuto"
    DoCmd.RunSQL SQL
     
    'Copie en "Tbl_NumAuto_Copy" de la table "Tbl_NumAuto" où le numero auto est à ré-incrémenter
    DoCmd.CopyObject , "Tbl_NumAuto_Copy", acTable, "Tbl_NumAuto"
     
    'Suppression des tables "Tbl_NumAuto"
    DoCmd.DeleteObject acTable, "Tbl_NumAuto"
     
    'Renommage de la table "Tbl_NumAuto_Copy" en "Tbl_NumAuto"
    DoCmd.Rename "Tbl_NumAuto", acTable, "Tbl_NumAuto_Copy"

  5. #5
    Membre éclairé

    Homme Profil pro
    Inscrit en
    juillet 2005
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : juillet 2005
    Messages : 626
    Points : 712
    Points
    712

    Par défaut Inscrutation

    Bonjour à tous,

    Si je peux me permettre de donner mon avis sur la question des numauto qui revient souvent et poser une question.

    Je créé un champ "chrono" dans la table que j'incrémente avec une fonction qui comble les trous ou ajoute +1 sur le champ.

    Sinon je ne vois pas l'intérêt de réinitialiser les champs numauto et j'aimerai bien savoir dans quel cas de figure a-t-on besoin de le faire ?

    a+

  6. #6
    Rédacteur
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : décembre 2005
    Messages : 4 485
    Points : 7 629
    Points
    7 629

    Par défaut

    Bonjour,

    Voila la comment je procède avec une table dont le champ clé RowNum est NuméroAuto :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ' Vider Table
    DoCmd.SetWarnings False
    DoCmd.RunSQL "DELETE FROM LaTable;"
    DoCmd.SetWarnings True
    ' Enlever clé primaire
    DoCmd.RunSQL "ALTER TABLE LaTable DROP CONSTRAINT PrimaryKey ;"
    ' Modifier type champ Numauto -> Long
    DoCmd.RunSQL "ALTER TABLE LaTable ALTER COLUMN [RowNum] Long ;"
    ' Modifier type champ Long -> NumAuto et remettre clé primaire
    DoCmd.RunSQL "ALTER TABLE LaTable ALTER COLUMN [RowNum] Counter (1,1) CONSTRAINT PrimaryKey PRIMARY KEY ;"
    A+

  7. #7
    Rédacteur
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : décembre 2005
    Messages : 4 485
    Points : 7 629
    Points
    7 629

    Par défaut

    Bonjour,

    Apparemment on peut faire plus court (en tout cas depuis Access 2003)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DoCmd.RunSQL "DELETE FROM LaTable"
    DoCmd.RunSQL "ALTER TABLE LaTable ALTER COLUMN [RowNum] COUNTER(1,1)"
    Cdlt.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    septembre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : septembre 2007
    Messages : 25
    Points : 16
    Points
    16

    Par défaut

    Citation Envoyé par naphta Voir le message
    Bonjour à tous,

    Si je peux me permettre de donner mon avis sur la question des numauto qui revient souvent et poser une question.

    Je créé un champ "chrono" dans la table que j'incrémente avec une fonction qui comble les trous ou ajoute +1 sur le champ.

    Sinon je ne vois pas l'intérêt de réinitialiser les champs numauto et j'aimerai bien savoir dans quel cas de figure a-t-on besoin de le faire ?

    a+
    Je peux repondre a cette question !! je viens de creer une base un peu compliquer (pour moi !) et j'ai fait pas mal d'essai avant d'arriver a ce que je voulais. resultat mon numéro auto est a 40 et je veux revenir à 1 pour mettre la base en service et je dois dire que les lignes de codes c'est pas forcement mon truc !!

  9. #9
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    avril 2006
    Messages
    2 861
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : avril 2006
    Messages : 2 861
    Points : 4 269
    Points
    4 269

    Par défaut

    Citation Envoyé par naphta
    Sinon je ne vois pas l'intérêt de réinitialiser les champs numauto et j'aimerai bien savoir dans quel cas de figure a-t-on besoin de le faire ?
    bien que cela date...
    réajuster l'auto incrément c'est utile après des tests pendant la conception mais aussi modification, donc pas forcement pour remettre à zéro.
    mais c'est aussi utile pour le cas de bug sur l'auto incrément qui peut repartir sur une valeur antérieur.
    ms fourni un exemple pour produire cette erreur ici.

    le compactage remets à zéro l'auto incrément mais seulement si la table est vide. de plus la commande sql ne marche pas quand la table est liée dans la fenêtre des relations.
    étant amener à faire parfois cette manip j'ai donc fait un script pour réaliser cela automatiquement.

    Citation Envoyé par steph31250
    je dois dire que les lignes de codes c'est pas forcement mon truc !!
    moi si mais c'est vite ch... ^^ vous trouverez le script ici.
    il y aura un maj bientot pour résoudre un cas particulier d'erreur qui peut se produire. n'es ce pas LedZeppII ? ;P


  10. #10
    Membre à l'essai
    Homme Profil pro
    Retraité
    Inscrit en
    mars 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : mars 2016
    Messages : 14
    Points : 13
    Points
    13

    Par défaut

    Bonjour à tous,
    Le post date déjà mais ça peut intéresser quelqu'un en recherche d'une solution (comme moi jusqu'à hier):
    J'ai testé, une fois la table vidée, de modifier le format du champ NumAuto en Texte puis de le remettre aussitôt en format NumAuto. Ça marche, la numérotation repart à un et ça ne prend que 4 lignes de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim dbs As Database
    Set dbs = CurrentDb
    dbs.Execute "ALTER TABLE Nom_de_la_Table " & "ALTER COLUMN Nom_du_Champ CHAR(20);"
    dbs.Execute "ALTER TABLE Nom_de_la_Table " & "ALTER COLUMN Nom_du_Champ counter;"
    A noter que le 2ème dbs.Execute ne marche que si la table est vide.
    Cordialement

  11. #11
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    11 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 11 633
    Points : 17 612
    Points
    17 612

    Par défaut

    Bonjour.

    Pour info, la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DoCmd.RunSQL "DELETE FROM LaTable"
    DoCmd.RunSQL "ALTER TABLE LaTable ALTER COLUMN [RowNum] COUNTER(1,1)"
    Donnée par LedZeppII fonctionne parfaitement aussi.
    Accessoirement elle permet même de ne pas repartir de 1 mais de n'importe quelle valeur.

    Aussi, le champ AutoNum est là pour donner un numéro unique par pour fournir un compteur continu donc il peut bien commencer à n'importe quelle valeur.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  12. #12
    Membre à l'essai
    Homme Profil pro
    Retraité
    Inscrit en
    mars 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : mars 2016
    Messages : 14
    Points : 13
    Points
    13

    Par défaut

    Ah pardon, je n'avais pas vu la solution de LedZeppII. C'est vrai, c'est encore mieux. Je la note ...
    Cordialement.

Discussions similaires

  1. [WD14] Comment incrémenter une rubrique de type numéro auto
    Par bahloula dans le forum WinDev
    Réponses: 7
    Dernier message: 27/04/2011, 13h19
  2. Problème sur un champ de type numéro-incrémenté
    Par loic20h28 dans le forum MS SQL-Server
    Réponses: 3
    Dernier message: 19/01/2008, 09h19
  3. Déterminer un champ de type n° auto
    Par soso78 dans le forum Modélisation
    Réponses: 3
    Dernier message: 16/11/2007, 17h11
  4. [formulaire] réinitialiser un champ de type file
    Par Baadshah dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 20/12/2005, 14h28
  5. Réinitialiser les valeurs d'un champ de type identify
    Par Oluha dans le forum MS SQL-Server
    Réponses: 2
    Dernier message: 19/01/2005, 13h39

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