Salut,
Pour pouvoir me servir de la mise en forme conditionnel d'un contrôle dans un formulaire, je souhaiterais modifier la requête sous-jacente pour y ajouter un champ correspondant à un compteur de l'ordre de classement de chaque enregistrement.
Je m'explique. En autre le requête fait un regroupement sur toutes les personnes référencées dans une table de planning (T_PREVISIONNEL) qui est d'une taille assez respectable (de l'ordre de 100 000 enregistrements). Je souhaite que la requête trie ces personnes par leur nom et indique également le niveau de rang de chaque personne par rapport à la liste triée.
Exemple : Soit 5 personnes dans le planning : B, E, A, D, C. Une fois trié, cela donnerait :
1, A
2, B
3, C
4, D
5, E
J'ai réalisé une fonction placée dans un nouveau champ de classement de la requête sous-jacente (le #03/01/07# c'est juste pour tester) :
Problème : Comme la table T_PREVISIONNEL est assez volumineuse, la requête sous-jascente s'exécute désormais très lentement (et en plus elle s'exécute 4 fois pour chaque enregistrement mais ça s'est normal, c'est dû au niveau de regroupement de la requête sous-jacente).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Function v_classement(v_num_enfant) ChSQL = "SELECT num_enfant, (nom_enfant & prenom_enfant) AS tri FROM T_PREVISIONNEL LEFT JOIN T_ENFANT ON T_PREVISIONNEL.num_enfant = T_ENFANT.cle GROUP BY periode, [date], num_enfant, (nom_enfant & prenom_enfant) HAVING cdbl([date])=#03/01/07# ORDER BY (nom_enfant & prenom_enfant) ASC" Set rst = CurrentDb.OpenRecordset(ChSQL) If Not rst.EOF Then rst.FindFirst "num_enfant = " & v_num_enfant If Not rst.NoMatch Then v_classement = rst.AbsolutePosition End If End Function
Auriez-vous des solutions plus simples pour créer ce champ de classement (attention, il doit respecter le tri final de la requête) ? Je suis persuadé que l'on doit pouvoir arriver à quelque chose directement en SQL sans passer par un recordset VBA toujours beaucoup plus lent !
Merci d'avance.
Partager