1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| Public Function Ristourne(Achats As Double) As Double
Dim rst As Recordset, TrancheSup As Double, RistourneTrancheSup As Double, _
PalierMax As Double, nbreDeTranchesSup As Integer
' on se crée une série d'enregistrements Palier/Ristourne,
'classés dans l'ordre croissant des paliers
Set rst = CurrentDb.OpenRecordset("SELECT tParametresRistourne.Palier," _
& "tParametresRistourne.Ristourne " _
& "FROM tParametresRistourne " _
& "ORDER BY tParametresRistourne.Palier;")
'le 1er palier est-il atteint ?
's'il n'est pas atteint --> la ristourne = 0 et on sort
If Achats < rst("palier") Then Ristourne = 0: Exit Function
'si un palier est atteint, on lance une boucle qui va lire chaque enregistrement
' on cumule les ristournes, tant que le montant des achats reste > au palier lu
Do Until rst.EOF
If Achats >= rst("palier") Then
Ristourne = Ristourne + rst("Ristourne")
Else
Exit Function
End If
rst.MoveNext
Loop
'On arrive ici, si achats > palier maximum
' tranches supérieures au plafond
PalierMax = DMax("Palier", "tParametresRistourne")
TrancheSup = DLookup("ResultatNum", "tAutresParametres", "Argument=""TrancheSup""")
RistourneTrancheSup = DLookup("ResultatNum", "tAutresParametres", "Argument=""RistourneTrancheSup""")
nbreDeTranchesSup = Int((Achats - PalierMax) / TrancheSup)
Ristourne = Ristourne + nbreDeTranchesSup * RistourneTrancheSup
End Function |
Partager