ResetAutoNumber

Retour vers Access

Réinitialisation de la numérotation automatique

Tout le monde connait cela un jour au l'autre. On utilise un champ index avec une numérotation automatique et bien sûr, on finit par effacer des enregistrements. La base de données se retrouve alors orpheline de quelques numéros. Cela n'empêche pas son utilisation, mais cela nous chagrine de voir cette numérotation discontinue

Or Access ne possède pas en natif d'une fonction qui permet de réinitialiser cela, il faut effacer la table. Bien sûr, il y a le fruit de nos encodages que l'on ne souhaite pas perdre. Alors ! Quelle solution ?

Une fois encore, nous allons leurrer Access. Cela se passe en 7 grosses étapes :

  • Nous nous assurons que la table est bien fermée
  • Nous créons une copie de notre table en lui donnant un autre nom
  • Nous vidons la table originelle
  • Nous créons une seconde copie de la table mais comme elle est SANS enregistrement, l'index est automatiquement réinitialisé à zéro
  • Nous écrasons l'ancienne table en renommant cette seconde copie
  • Nous réinjectons les enregistrements (SAUF le champ indexé) de la première copie vers notre nouvelle table (son champ numérotation automatique fait son travail, numérote sans "trou" et depuis le chiffre 1 ses nouveaux enregistrements
  • Nous effaçons la table temporaire...

Ni vu, nu connu, je t'embrouille...

Sub reset()
  'il faut personnaliser les mentions Table1 avec le nom de votre table,
  'il faut complèter l'instruction insert Into
  With DoCmd
     Close acTable, "Table1", acSaveYes 'la table doit absolument être fermée
    SetWarnings False 'pas de message système
    CopyObject , "Table1Temp", acTable, "Table1" 'ceci crée une table temporaire qui contient les enregistrements
    RunSQL "Delete * From Table1" 'on efface les enregistrements dans la table d'origine
    Rename "Table1Old", acTable, "Table1" 'si vous ouvrez la table old,créez un enregistrement, vous verrez que la numérotation se poursuit
    CopyObject , "Table1", acTable, "Table1Old" 'c'est ici que le miracle s'accomplit, la numérotation est réinitialisée
     'en fait on a recréé la table en réutilisant l'ancien nom et elle est donc considérée comme une nouvelle table
    DeleteObject acTable, "Table1Old" 'on efface cette table old qui ne sert plus à rien
   RunSQL "INSERT INTO Table1( Nom,Prenom)SELECT Table1Temp.Nom,Table1Temp.Prenom FROM Table1Temp"
   'à personnaliser suivant les champs, on réinjecte les enregistrements
   DeleteObject acTable, "Table1Temp" 'on efface cette table qui ne sert plus
   SetWarnings True 'on réactive les alertes du système
  End With
End Sub

Suivant le nombre d'enregistrements dans votre table, cela peut prendre un certain temps.

Attention, ceci n'est pas valable sur des tables secondaires avec des relations sans examiner vos jointures. Faites toujours un test sur une copie de votre base de données avant de mettre cette fonction en production.

Cliquez ici pour télécharger le fichier ResetAutonumber

Fin