Autoincrementation a chaque changement de valeur d'un champ [Résolu/Fermé]

rman13 30 Messages postés jeudi 3 mars 2016Date d'inscription 31 août 2017 Dernière intervention - 11 janv. 2017 à 14:01 - Dernière réponse : rman13 30 Messages postés jeudi 3 mars 2016Date d'inscription 31 août 2017 Dernière intervention
- 12 janv. 2017 à 07:22
Bonjour,
bonne année a tous les forumers,

quelqu'un aurait-il une idée comment rajouter un champ autoincrémenté en VBA à chaque changement de code placement?

ci après un petit bout de ma table:


Placement champ_auto
A3
A3
A3
A3
A3
B2
A3
A9
A3
H1
H1
H1
A1
A3
A3
A7
V2
H1
A2
A9
B3
B1
V2
H1
V1
A3
H1
D1
D1
D1
D1
D1
A3
A3
B2
A2
M2
A3
V1
A1
M1
I2

ce que j'aimerais avoir c'est qu'à chaque changement de code placement le nombre incrémenté va revenir à 1 et s'il trouve un code qui existait déjà dans les lignes précédentes il va rajouter la valeur de champ_auto correspondant à la dernière code par 1 et ainsi de suite.
Bien sûr ma table contient 9000 lignes d'où la nécessité d'adopter de VBA

Merci a vous
en attendant votre réponse impatiemment



Afficher la suite 

4 réponses

yg_be 4387 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 20 janvier 2018 Dernière intervention - 11 janv. 2017 à 15:23
0
Utile
3
bonjour,
je te suggère de remplir champ_auto dans ton exemple, ce sera plus clair.
tu veux peut-être simplement dans ton champ_auto avoir un compteur des occurrences de la valeur en Placement?
ta table contient-t-elle une autre colonne qui peut servir de critère de tri?
ou bien faut-il obligatoirement se baser uniquement sur l'ordre d’apparition dans la table.
yg_be 4387 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 20 janvier 2018 Dernière intervention - 11 janv. 2017 à 15:28
une technique possible est de parcourir les enregistrements de ta table, et, pour chaque enregistrement,
si champ_auto est vide 
   select max(champ_auto) where placement=...
   mettre en champ_auto max+1
rman13 30 Messages postés jeudi 3 mars 2016Date d'inscription 31 août 2017 Dernière intervention - 12 janv. 2017 à 06:30
Bonjour,
Merci pour ta réponse. Ce que je veux avoir c'est comme ce qui est écrit en bas.En effet, il faut uniquement se baser sur l'ordre d'apparition dans la table.





Placement champ_auto
A3 1
A3 2
A3 3
A3 4
A3 5
B2 1
A3 6
A9 1
A3 7
H1
H1
H1
A1
A3
A3
A7
V2
H1
A2
A9
B3
B1
V2
H1
V1
A3
H1
D1
D1
D1
D1
D1
A3
A3
B2
A2
M2
A3
V1
A1
M1
I2


Bien à toi
rman13 30 Messages postés jeudi 3 mars 2016Date d'inscription 31 août 2017 Dernière intervention - 12 janv. 2017 à 07:22
en fouinant dans les forums j'ai réussi à le faire, merci pour ton aide et je met en dessous mon code:





Sub BImp()
maTable = "pays"
monChampEnum = "placement"
nom = "NAME"

Dim i As Long
Dim v As Variant
Dim rs As Recordset

On Error Resume Next
DoCmd.RunSQL "ALTER TABLE [" & maTable & "] DROP COLUMN increm"
DoCmd.RunSQL "ALTER TABLE [" & maTable & "] ADD COLUMN increm INTEGER"
On Error GoTo 0

Set rs = CurrentDb.OpenRecordset("SELECT * FROM [" & maTable & "] where Enservice=-1 ORDER BY [" & monChampEnum & "], [" & nom & "] ")
i = 1
If Not rs.EOF Then v = rs.Fields(monChampEnum)
While Not rs.EOF
If rs.Fields(monChampEnum) <> v Then
v = rs.Fields(monChampEnum)
i = 1
End If
rs.Edit
rs![increm] = i
rs.Update
i = i + 1
rs.MoveNext
Wend
End Sub




PS: Je ne me souvient plus d'où j'ai trouver le code principal