OVH Cloud OVH Cloud

Numéro de ligne dans une requête triée

7 réponses
Avatar
jg1
Bonjour,

Pour num=E9roter les lignes de ma requ=EAte tri=E9e (Access) j'ai utilis=E9
la fonction pr=E9conis=E9e par Helv=E9 le 16/05/2001, et Damien Mermoz le
23/01/2004.
Cela fonctionne correctement lorsque la requ=EAte n'est pas tri=E9e
(N=B0Ligne =3D 1, 2 , 3 , 4 etc...) mais d=E8s que j'applique un tri
j'obtiens (N=B0Ligne =3D 1, 3 , 5, 6, 8 etc...) .
Avez-vous la solution pour ce probl=E8me, ou existe-t'il une autre
fonction ?
Merci pour votre aide.

Salutations

7 réponses

Avatar
jg1
Toutes mes exscuses, j'ai omis de joindre la fonction.

Crée un nouveau module et colle ce qui suit :


Function Incrémente(NomTable As String, NomChamp As String, var As
Variant) As
Long
Dim rs As Recordset


' NomTable est le nom de ta table
' NomChamp est le nom de n'importe quel champ de ta table que tu as
inclus
' dans ta requête
' var est le contenu du champ NomChamp


Set rs = CurrentDb.OpenRecordset(NomTable, dbOpenDynaset)


If Not rs.EOF Then ' s'il y à au moins 1 enregistrement
rs.FindFirst ("[" & NomChamp & "]= " & var)
Incrémente = rs.AbsolutePosition + 1 ' AbsolutePosition démarre
à 0 (donc +1)
Exit Function
End If


rs.Close: Set rs = Nothing


End Function


Crée ta requête avec les champs que tu souhaites voir apparaître
puis ajoute le champ suivant :
Nom du champ : Num: Incrémente("Nom de ta
table";"ChampX";[ChampX])
Ce qui devrait donner, dans ton cas:
Num: Incrémente("TArticle";"NumArt";[NumART])
Avatar
3stone
Salut,

Pour numéroter les lignes de ma requête triée (Access) j'ai utilisé
la fonction préconisée par Helvé le 16/05/2001, et Damien Mermoz le
23/01/2004.
Cela fonctionne correctement lorsque la requête n'est pas triée
(N°Ligne = 1, 2 , 3 , 4 etc...) mais dès que j'applique un tri
j'obtiens (N°Ligne = 1, 3 , 5, 6, 8 etc...) .
Avez-vous la solution pour ce problème, ou existe-t'il une autre
fonction ?



Tu peux utiliser une des fonctions suivantes :
http://www.3stone.be/access/articles.php?lng=fr&pg9

il est entendu que la requête doit posséder un tri et c'est ce
champ trié qui intervient pour créer la numérotation.


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
jg1
Bonjour,

Merci pour la réponse et l'indication du site à consulter qui me
semble pas mal.

La fonction que j'utilise correspond à la solution 3 qui fonctionne
correctement, mais par exemple losque je mets un critère (Voir Nota)
sur un champ de la requête je nai plus de numérotation chrono
(1,2,3,4,5,6) mais (1,3,5,6,8).

Nota : Dans "mais dès que j'applique un tri" du premier message il
faut lire "mais dès que j'applique un critère "

Salutations
Avatar
3stone
Salut,

La fonction que j'utilise correspond à la solution 3 qui fonctionne
correctement, mais par exemple losque je mets un critère (Voir Nota)
sur un champ de la requête je nai plus de numérotation chrono
(1,2,3,4,5,6) mais (1,3,5,6,8).

Nota : Dans "mais dès que j'applique un tri" du premier message il
faut lire "mais dès que j'applique un critère "


Evidement...

La méthode doit porter sur les données qui seront effectivements
utilisées et affichées !!
Au lieu de la baser sur la table... que tu filtre ensuite par un critère,
base la méthode sur la requête.

Eventuellement sur une requête qui aura ta requête avec critère
comme source.


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
jg1
Bonjour,

Merci pour ton aide, en effet pour que ça marche il faut d'abord
mettre les critères.

Il serait intéressant de mettre un Nota dans le « Mémo Numération
continu Solution 3 «

Par contre peux-tu m'aider pour résoudre ma requête ?

Je crée un StrSQL avec les critères.

StrSQL = "SELECT [tbl Adhérents].RéfAdhérent, [tbl
Adhérents].Titre, [tbl Adhérents].NOM, [tbl Adhérents].Prénom,
[tbl Adhérents].MillLicence " & _
"FROM [tbl Adhérents] INNER JOIN [tbl Cours] ON [tbl
Adhérents].RéfAdhérent = [tbl Cours].RéfAdhérent " & _
"GROUP BY [tbl Adhérents].RéfAdhérent, [tbl
Adhérents].Titre, [tbl Adhérents].NOM, [tbl Adhérents].Prénom, [tbl
Adhérents].MillLicence " & _
"HAVING [tbl Adhérents].MillLicence=" & strMillLicence

Puis je colle ma fonction Incrémente au StrSql.

StrSQL = strSQL & " Incrémente (""tbl
adhérents"",""réfadhérent"",[tbl adhérents].[réfadhérent]) AS
Num"

rs.Open strSQL, cn, adOpenForwardOnly

Dans le principe est-ce que cela peut fonctionner ?

Si oui j'ai une erreur de syntaxe qui se produit sur le dernier
strSQL.

Si non as-tu une solution ?

Salutations
Avatar
3stone
re,

a écrit

Je crée un StrSQL avec les critères.

StrSQL = "SELECT [tbl Adhérents].RéfAdhérent, [tbl
Adhérents].Titre, [tbl Adhérents].NOM, [tbl Adhérents].Prénom,
[tbl Adhérents].MillLicence " & _
"FROM [tbl Adhérents] INNER JOIN [tbl Cours] ON [tbl
Adhérents].RéfAdhérent = [tbl Cours].RéfAdhérent " & _
"GROUP BY [tbl Adhérents].RéfAdhérent, [tbl
Adhérents].Titre, [tbl Adhérents].NOM, [tbl Adhérents].Prénom, [tbl
Adhérents].MillLicence " & _
"HAVING [tbl Adhérents].MillLicence=" & strMillLicence

Puis je colle ma fonction Incrémente au StrSql.

StrSQL = strSQL & " Incrémente (""tbl
adhérents"",""réfadhérent"",[tbl adhérents].[réfadhérent]) AS
Num"

rs.Open strSQL, cn, adOpenForwardOnly

Dans le principe est-ce que cela peut fonctionner ?




Non...

Crée une requête enregistrée (éventuellement temporaire)
CurrentDb.CreateQueryDef("reqTemp", sSQL)

et base ta numérotation également sur cette requête...



--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
Bruno Frisque
Ouf ti !!
Vous êtes bien compliqués, à la lecture de vos échanges...
Mais on apprend toujours!

((ceci n'ayant strictement rien à voir avec le (compliqué) sujet...))

bàv




"3stone" wrote in message
news:
re,

a écrit

Je crée un StrSQL avec les critères.

StrSQL = "SELECT [tbl Adhérents].RéfAdhérent, [tbl
Adhérents].Titre, [tbl Adhérents].NOM, [tbl Adhérents].Prénom,
[tbl Adhérents].MillLicence " & _
"FROM [tbl Adhérents] INNER JOIN [tbl Cours] ON [tbl
Adhérents].RéfAdhérent = [tbl Cours].RéfAdhérent " & _
"GROUP BY [tbl Adhérents].RéfAdhérent, [tbl
Adhérents].Titre, [tbl Adhérents].NOM, [tbl Adhérents].Prénom, [tbl
Adhérents].MillLicence " & _
"HAVING [tbl Adhérents].MillLicence=" & strMillLicence

Puis je colle ma fonction Incrémente au StrSql.

StrSQL = strSQL & " Incrémente (""tbl
adhérents"",""réfadhérent"",[tbl adhérents].[réfadhérent]) AS
Num"

rs.Open strSQL, cn, adOpenForwardOnly

Dans le principe est-ce que cela peut fonctionner ?




Non...

Crée une requête enregistrée (éventuellement temporaire)
CurrentDb.CreateQueryDef("reqTemp", sSQL)

et base ta numérotation également sur cette requête...



--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/