Bonjour,
Non ce n'est pas Excel. Tu ne peux pas dans un formulaire, état, table ou une requête indiquer "Enregistrement précédent".
Dans tous les cas il faut identifier qui est Enr1 pour Enr2.
Y-a-t-il un N° de tour par exemple ?
Dans ce cas :
Méthode 1
1 2 3 4
|
N° Tour
1 ENR1 stnpot stnpit
2 ENR2 stnpot stnpit (enr1.stnpit - enr2.stnpot) |
Alors (enr1.stnpit - enr2.stnpot) vaudrait :
dlookup("stnpit","nomtable","Tour=" & valTourCourant -1) - enr2.stnpot
Où valTourCourant est la valeur du tour courant (field ou control)
Dlookup() permet de recherche rapidement une valeur (stnpit) et une seule dans une table (nomtable) d'après une condition ("Tour=" valTourCourant -1)
Bien sur il faut tenir compte de la course dans le where pour ne pas aller prendre le tour précédent d'une autre course PUIS gérer le cas où c'est le premier tour.
Pour la course on l'ajoute dans le where :
"Tour=" & valTourCourant -1 & " and course=" & valCourseCourante
Où valCourseCourante est la valeur de la course (id_course ?).
Pour le premier tour on ajoute un NZ(..;0) qui remplace un Null par 0 :
nz( dlookup("stnpit","nomtable","Tour=" & valTourCourant -1 & " and course=" & valCourseCourante-1) ,0) - enr2.stnpot
Évidemment n'ayant qu'une vue partielle je te donne là qu'une vue théorique de la résolution. Cette méthode fonctionne pour les formulaires/états et requête.
Méthode 2
Pour les formulaires et les états uniquement on peut utiliser la méthode DAO avec le recordsetclone de l'objet Form/Report.
On fait un déplacement arrière (moveprevious) pour récupérer la valeur stnpit qu'on stocke pour s'en servir dans le calcul.
C'est un peu plus complexe si tu n'as pas l'habitude de DAO.
La source (l'ensemble des ENR) doit être triée dans l'ordre du tour.
Il faut être vigilant sur le moveprevious depuis un Newrecord, intercepter le cas d'un moveprevious sur le tour 1, ...
Cordialement
Partager