Signaler

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

Posez votre question rman13 29Messages postés jeudi 3 mars 2016Date d'inscription 31 mars 2017 Dernière intervention - Dernière réponse le 12 janv. 2017 à 07:22 par rman13
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 
Utile
+0
plus moins
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 2209Messages postés lundi 9 juin 2008Date d'inscription 22 mai 2017 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
Répondre
rman13 29Messages postés jeudi 3 mars 2016Date d'inscription 31 mars 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
Répondre
rman13 29Messages postés jeudi 3 mars 2016Date d'inscription 31 mars 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
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !