Access - numérotation

Access - numérotation - Logiciels - Windows & Software

Marsh Posté le 28-07-2009 à 16:25:01    

Bonjour,
 
Je suis en train de construire une base de données de mes contacts (pour apprendre à utiliser access).
J'aimerais pouvoir numéroter ces contacts pour leur donner un identifiant unique.
Comment faire, pourqu'à chaque fois que j'ajoute un nouveau contact, le numéro suivant le dernier entré lui soit affecté automatiquement??
 
Je n'y connais rien en VBA...
 
Merci

Reply

Marsh Posté le 28-07-2009 à 16:25:01   

Reply

Marsh Posté le 29-07-2009 à 14:09:32    

Bonjour
 
Plusieurs solutions :
 
- Mettre un champ AutoNumber (NuméroAuto). A chaque fois que tu saisis un contact, il va s'incrementer de 1 tout seul. Inconvenient : Si tu en supprimes un, le numéro reste en mémoire jusqu'a compactage de la base. Donc tu peux avoir des trous.
 
- Passer par une table intermédiaire :
     - Créer un champ vide, numérique, dans ta table Contacts
     - Créer deux tables, avec un champ AutoNumber (NumAuto) et un champ qui correspondra a la clé de table contact (NumContact).
     - Les nommer, les tables, par exemple comme cela : CpteContact et CpteContactV
     - Créer une requete ajout, qui va aller ajouter tous tes contacts dans la table CpteContact, dans le second champ (Ta clé de ta table contact sera dans le champ NumContact de la table CpteContact)
     - Créer une requete mise a jour, qui va aller mettre a jour le champ numérique de ta table Contacts par le second champ de la table CpteContacts, en fonction de la clé de la table CpteContacts
     - Créer une macro Access, avec un :
          - CopierObjet, Base destination : rien ; Nouveau nom : CpteContact ; Type de l'objet source : Table ; Nom de l'objet source : CpteContactV
          - Ouvrir Requete, Nom requete : Ta table ajout
          - Ouvrir Requete, Nom requete : Ta table mise a jour
 
- En VBA
     - Ajouter un champ, numérique, à ta table Contact
     - Créer un RecordSet sur ta table contact

Code :
  1. 'Liaison a la table
  2. Set bds = CurrentDb
  3. Set RstTableEnr = CurrentDb.OpenRecordset("Contacts" )


     - Créer une boucle sur le nb d'enregistrements de ta table Contacts

Code :
  1. 'Boucle
  2. With RstTableEnr   
  3.     Cpte = .RecordCount
  4.     For x = 1 To Cpte


     - Incrémenter de 1 ton champ a chaque passage, mais en fait on lui donne la valeur de x, puisque x va de 1 à ton nombre d'enregistrement.

Code :
  1. 'Affectaion du nb incrémenter a ton champ
  2. !NomDeTonChamp = x


     - Passer a l'enregistrement suivant

Code :
  1. 'Enr suivant
  2.         .MoveNext


Ce qui donnerait en complet :

Code :
  1. Sub alexstain
  2.     Set bds = CurrentDb
  3.     Set RstTableEnr = CurrentDb.OpenRecordset("Contacts" )
  4.     With RstTableEnr   
  5.         Cpte = .RecordCount
  6.         For x = 1 To Cpte
  7.             !NomDeTonChamp = x
  8.             .MoveNext
  9.         Next x
  10.     End With
  11. End sub


 
Si tu as des questions, no soucy
 
Cordialement

Message cité 1 fois
Message édité par SuppotDeSaTante le 29-07-2009 à 14:12:35

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 06-08-2009 à 14:35:17    

Super merci, l'autonumber a l'air intéressant.
Comment faire pour que l'autonumber affiche A1, A2, A3, An....pour tous les contacts donc le nom commence par A, B1, B2, B3, Bn pour tous les contacts dont le nom commence par B...etc...
 
Merci

Reply

Marsh Posté le 06-08-2009 à 16:05:38    

Hello
 

alexstain a écrit :

Super merci, l'autonumber a l'air intéressant.
Comment faire pour que l'autonumber affiche A1, A2, A3, An....pour tous les contacts donc le nom commence par A, B1, B2, B3, Bn pour tous les contacts dont le nom commence par B...etc...
 
Merci


 
Ici :

SuppotDeSaTante a écrit :

- Incrémenter de 1 ton champ a chaque passage, mais en fait on lui donne la valeur de x, puisque x va de 1 à ton nombre d'enregistrement.

Code :
  1. 'Affectaion du nb incrémenter a ton champ
  2. !NomDeTonChamp = x



 
Remplacer par :

Code :
  1. !NomDeTonChamp = Left(!NomDeTonChampContact,1) & x


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 02-10-2009 à 11:25:04    

super ! Est ce que je dois continuer à utiliser mon autonumber comme clé primaire, ou est ce que je supprime le champ?

Reply

Marsh Posté le 02-10-2009 à 13:56:23    

Ca depend de ce que tu souhaites utiliser comme index


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 19-11-2009 à 17:13:20    

Bonjour,
 
J'ai créé un module en suivant la procédure, sauf que j'ai mis un champ texte au lieu du némrique (vu qu'il y a des lettres).
Malheureusement ça ne marche pas, la colonne reste vide.
 
le module:
 
Sub contactRef()
Set bds = CurrentDb
Set RstTableEnr = CurrentDb.OpenRecordset("T_contacts" )
With RstTableEnr
Cpte = .RecordCount
For x = 1 To Cpte
!contact_Ref = Left(!contact_name, 3) & x
MoveNext
   Next x
End With
End Sub
 
Qu'est ce qui ne va pas???
 
Merci

Reply

Marsh Posté le 19-11-2009 à 17:36:00    

je trouve que vous vous compliquez la vie pour rien!
 
- Un numéro auto suffit amplement.
 
- Des trous dans les numéros (après suppression),
   ca n'a jamais été un  probleme.
   Je ne comprends pas très bien????
 
- Pourquoi vouloir une clé alphanumérique A1, A2 etc????
 
 
 

Reply

Marsh Posté le 19-11-2009 à 17:45:34    

J'ai envie de pouvoir identifier le pays d'un contact facilement rien qu'en regardant son numéro de référence.
 
Par exemple le 8ème contact italien sera ita0008
 
Comment faire?
 
Merci

Reply

Marsh Posté le 19-11-2009 à 17:46:35    

ça permet de distinguer facilement les homonymes par exemple

Reply

Marsh Posté le 19-11-2009 à 17:46:35   

Reply

Marsh Posté le 19-11-2009 à 20:49:06    

Bonsoir
 
Deja il y a une erreur dans le code.
Cela vient peut etre de ca :
.MoveNext
et pas
MoveNext
 
Ensuite si vraiment la valeur de x pose souci au format numérique, ce dont je doute (vu que la variable n'a pas de type déclaré), tu peux faire :
Cstr(x)
pour le transformer en chaine vu que ton champ est du texte.
 
Cordialement.
 
PS : pour ce qui est de se compliquer la vie, plusieurs solutions ont été proposées plus haut. Dont le autonumber.


Message édité par SuppotDeSaTante le 19-11-2009 à 20:50:27

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 20-11-2009 à 11:26:00    

Merci, mais sincèrement, je ne comprends rien.
Je ne suis pas développeur, je suis dans le marketing...
 

Reply

Marsh Posté le 20-11-2009 à 11:34:50    

Il y a mon mail dns mon profil, envoie ta base et ce que tu souhaites concretement, je jette un oeil d'ici a ce week end.
 
Je reposterais ici, interrogation, solution etc.
 
 
Cordialement.


Message édité par SuppotDeSaTante le 20-11-2009 à 11:35:09

---------------
Soyez malin, louez entre voisins !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed