Recherche
Recherche
Les mémos
Je débute...
Visites

 998904 visiteurs

 2 visiteurs en ligne

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


Catégorie : Les mémos - Requêtes
Page lue 15569 fois