Numérotation continue
Numérotation continue dans une requête
Si dans un état une numérotation continue est très simple à réaliser, dans une requête la solution est moins évidente.
Sachant qu'une table n'est qu'un conteneur dans lequel les enregistrements ne possèdent pas réellement un ordre défini, il faut donc que dans cette table source existe un champ sur lequel on puisse trier.
- Nom de la table : Table1
- Champ destiné au tri : Champ1
Il est entendu que le Champ1 peut être de type numérique (numéro d'adhérant) ou texte (nom d'adhérent, mais attention au homonyme) ou encore une date quelconque (attention ici au date identique). La numérotation se fera selon l'ordre du champ désigné.
Solution 1
Dans un champ calculé NoLigne: et à l'aide de la fonction de domaine DCount()
NoLigne: CpteDom("*";"Table1";"Champ1<" & Champ1)+1
Solution 2
Si la table contient beaucoup d'enregistrements, on peut essayer avec une sous-requête
NoLigne: (SELECT Count(*) FROM Table1 AS LaTable WHERE Champ1 < Table1.Champ1 )+1
Solution 3
En cas de clé primaire numérique [ID] comportant des "trous" on peut également utiliser cette fonction VBA.
NumLigne: fnNumLigne("T_Table1";"ID";[ID])
Ci-dessous, la fonction fnNumLigne()
Public Function fnNumLigne(strTable As String, strChamp As String, MaVar As Variant) As Long Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset(strTable, dbOpenDynaset) If Not rs.EOF Then rs.FindFirst ("[" & strChamp & "] = " & MaVar) fnNumLigne = rs.AbsolutePosition + 1 End If rs.Close Set rs = Nothing db.Close Set db = Nothing End Function