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 88 89
| Sub AjouterAnneesFutures()
'Ce module va rajouter les années futures à la table "T_Cotisation"
'
'Champs à mettre à jour
' T_Adherent_FK : vient de "T Adhérents"
' Nom de l'adhérent : vient de "T Adhérents"
' Cotisation_An : année venant de "T_Cotisation"
' AG : vient de "T_Cotisation"
' Cotisation : vient de "T_Cotisation"
' Cotisation_Du : vient de "T_Cotisation"
'
'L'approche consiste à créer une table "TableAnneesFutures" pour y stocker les années futures, par membre
'On injecte ensuite ces données dans "T_Cotisation"; c'est le moyen trouvé pour éviter les conflits des clefs et indexes
On Error GoTo err_Mngr
Dim db As Database
Dim rstAdherents As Recordset
Dim rstAnnees As Recordset
Set db = CurrentDb()
Set rstAdherents = db.OpenRecordset("T Adhérents", dbOpenDynaset)
Set rstAnnees = db.OpenRecordset("TableAnneesFutures", dbOpenDynaset)
Dim IdAdh As Long 'N°Adherent
Dim nomAdh As String
Dim AnneeAdh As Long
Dim cotisAn As Long
Dim AssG As Boolean
Dim Cotis As Boolean
Dim CotisDue As Long
Dim DerniereAnCotis
Dim NouvelAn, maxYear As Long
Const delta = 14
Dim j, k As Long
Dim Nbr As Long
maxYear = Year(Now()) + delta
DoCmd.SetWarnings False: DoCmd.RunSQL "DELETE TableAnneesFutures.* FROM TableAnneesFutures;": DoCmd.SetWarnings True
j = 0
With rstAdherents
.MoveFirst: .MoveLast: Nbr = .RecordCount
.MoveFirst
For k = 1 To Nbr
IdAdh = rstAdherents![N°Adherent]
nomAdh = DLookup("[Nom]", "[T Adhérents]", "[N°Adherent]=" & IdAdh) & " " & _
DLookup("[Prenom]", "[T Adhérents]", "[N°Adherent]=" & IdAdh)
AnneeAdh = rstAdherents![AnAdhesion]
DerniereAnCotis = DMax("[Cotisation_An]", "[T_Cotisation]", "[T_Adherent_FK]=" & IdAdh)
If IsNull(DerniereAnCotis) Then DerniereAnCotis = AnneeAdh
NouvelAn = 1 + DerniereAnCotis
If IsNull(DerniereAnCotis) Then NouvelAn = AnneeAdh
With rstAnnees
Do While True
If (NouvelAn + j) > maxYear Then Exit Do
rstAnnees.AddNew
rstAnnees![T_Adherent_FK] = IdAdh
rstAnnees![Adherent] = nomAdh
rstAnnees![Cotisation_An] = NouvelAn + j
rstAnnees![AG] = False
rstAnnees!Cotisation = False
rstAnnees![Cotisation_Du] = 0
.Update
j = j + 1
Loop
End With
j = 0
rstAdherents.MoveNext
Next k
End With
rstAdherents.Close: Set rstAdherents = Nothing
rstAnnees.Close: Set rstAnnees = Nothing
db.Close: Set db = Nothing
DoCmd.SetWarnings False: DoCmd.OpenQuery "R_AjoutDesAnneesFutures": DoCmd.SetWarnings True
err_Mngr_Exit:
Exit Sub
err_Mngr:
Dim myMsg As String
myMsg = "La procédure 'AjouterAnneesFutures' a généré une erreur !" & vbLf
myMsg = myMsg & Err & "; " & Error
MsgBox myMsg, vbCritical + vbOKOnly, "Erreur de traitement"
Resume err_Mngr_Exit
End Sub |
Partager