Autoincrementation a chaque changement de valeur d'un champ

Résolu/Fermé
rman13 Messages postés 35 Date d'inscription jeudi 3 mars 2016 Statut Membre Dernière intervention 10 avril 2018 - 11 janv. 2017 à 14:01
rman13 Messages postés 35 Date d'inscription jeudi 3 mars 2016 Statut Membre Dernière intervention 10 avril 2018 - 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



A voir également:

1 réponse

yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
11 janv. 2017 à 15:23
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.
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
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
0
rman13 Messages postés 35 Date d'inscription jeudi 3 mars 2016 Statut Membre Dernière intervention 10 avril 2018
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
0
rman13 Messages postés 35 Date d'inscription jeudi 3 mars 2016 Statut Membre Dernière intervention 10 avril 2018
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
0