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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| ' requête pour sélectionner les contrats dont la durée n'est pas multiples de 12
' et les durées supérieures à 12 mois
' et les devises XPF et EUR
SQL_contrat_durée1 = "SELECT Calcul_Marges.* FROM Calcul_Marges WHERE("
SQL_contrat_durée2 = SQL_contrat_durée1 & " ([DEVISE]='XPF' OR [DEVISE]='EUR') AND [MULTIPLE]<>0 AND [RESTANT]<>0 AND [TCI_bis] is null);"
' Initialisation des recordset
Dim rst_tci As DAo.Recordset
Dim rst As DAo.Recordset
' Enregistrement de la sélection des contrats dans un recordset
Set rst = CurrentDb.OpenRecordset(SQL_contrat_durée2, dbOpenDynaset, dbConsistent)
' boucle pour parcourir chaque contrat du recordset
If Not rst.EOF Then
rst.MoveFirst
While Not rst.EOF
' Insérer pour chaque enregistrement du recordset la valeur des champs utiles dans des variables
Marges_Courbe = rst.Fields(41).Value
Marges_Type_amort = rst.Fields(33).Value
Marges_Pas_amort = rst.Fields(35).Value
Marges_RA = Replace((rst.Fields(40).Value), ",", ".")
Marges_Duree = rst.Fields(42).Value
Marges_Annee = rst.Fields(28).Value
Marges_Semaine_mois = rst.Fields(26).Value
Marges_Tci_inf_proche = rst.Fields(46).Value
Marges_Tci_sup_proche = rst.Fields(47).Value
Marges_Duree_inf_proche = rst.Fields(48).Value
Marges_Duree_sup_proche = rst.Fields(49).Value
Marges_Multiple = rst.Fields(44).Value
Marges_Restant = rst.Fields(45).Value
Marges_Date_signature = rst.Fields(18).Value
' requête pour sélectionner les TCI en fonction de tous les critères SAUF la durée
SQL_TCI_STOCK1 = "SELECT TCI_STOCK.* FROM TCI_STOCK WHERE("
SQL_TCI_STOCK2 = SQL_TCI_STOCK1 & " [Courbe marche]='" & Marges_Courbe & "' AND"
SQL_TCI_STOCK3 = SQL_TCI_STOCK2 & " [Type Amortissement]='" & Marges_Type_amort & "' AND"
SQL_TCI_STOCK4 = SQL_TCI_STOCK3 & " [Periodicite]='" & Marges_Pas_amort & "' AND"
SQL_TCI_STOCK5 = SQL_TCI_STOCK4 & " [RA]=" & Marges_RA & " AND"
SQL_TCI_STOCK6 = SQL_TCI_STOCK5 & " [Semaine Mois]='" & Marges_Semaine_mois & "' AND"
SQL_TCI_STOCK7 = SQL_TCI_STOCK6 & " [Annee]='" & Marges_Annee & "');"
' Enregistrement de la requête de selection des TCI dans un recordset
Set rst_tci = CurrentDb.OpenRecordset(SQL_TCI_STOCK7, dbOpenSnapshot, dbAppendOnly)
' boucle pour parcourir chaque TCI du recordset
If Not rst_tci.EOF Then
' Initialisation des durées inf/sup les + proches
rst.Edit
rst.Fields(48).Value = 0 ' durée min
rst.Fields(49).Value = 600 ' durée max
rst.Update
rst_tci.MoveFirst
While Not rst_tci.EOF
' Boucle pour trouver la durée inférieure la plus proche
If (rst_tci.Fields(4) < Marges_Duree) And (rst.Fields(48).Value < rst_tci.Fields(4)) Then
rst.Edit
rst.Fields(48).Value = rst_tci.Fields(4) 'Récupération de la durée inférieur la + proche
rst.Update
End If
' Boucle pour trouver la durée supérieure la plus proche
If (rst_tci.Fields(4) > Marges_Duree) And (rst.Fields(49).Value > rst_tci.Fields(4)) Then
rst.Edit
rst.Fields(49).Value = rst_tci.Fields(4) 'Récupération de la durée supérieure la + proche
rst.Update
End If
' Passer au TCI suivant
rst_tci.MoveNext
Wend
End If
' Passer au contrat suivant
rst.MoveNext
Wend
End If
'Fermeture des recordset
rst_tci.Close
rst.Close
Set rst_tci = Nothing
Set rst = Nothing |
Partager