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
| Public Sub Attribution()
Dim rstCandidats As Recordset
Dim iOption As Integer, jCapacité As Integer
Dim DisponibleA As Integer, DisponibleB As Integer, DisponibleC As Integer, DisponibleD As Integer
'Initialiser les "disponible"
DisponibleA = 2: DisponibleB = 3: DisponibleC = 4: DisponibleD = 1
'classer les candidats par priorité et affecter
Set rstCandidats = CurrentDb.OpenRecordset("SELECT Candidats.Nom, Candidats.note, Candidats.option1, Candidats.option2, Candidats.option3, Candidats.Retenu FROM Candidats ORDER BY Candidats.note DESC;")
Do Until rstCandidats.EOF
rstCandidats.Edit
For iOption = 2 To 4 'colonnes 3 à 5 de rstCandidats
If IsNull(rstCandidats(iOption)) Then
GoTo AuSuivant 'les choix sont épuisés
Else
Select Case rstCandidats(iOption)
Case "A"
If DisponibleA > 0 Then 'il reste de la place
rstCandidats(5) = "A" ' on affecte
rstCandidats.Update ' on met la table à jour
DisponibleA = DisponibleA - 1 'on émarge le disponible
GoTo AuSuivant
Else
GoTo OptionSuivante 'plus de place pour cette option --> voir suivante
End If
Case "B"
If DisponibleB > 0 Then 'il reste de la place
rstCandidats(5) = "B"
rstCandidats.Update
DisponibleB = DisponibleB - 1
GoTo AuSuivant
Else
GoTo OptionSuivante
End If
Case "C"
If DisponibleC > 0 Then 'il reste de la place
rstCandidats(5) = "C"
rstCandidats.Update
DisponibleC = DisponibleC - 1
GoTo AuSuivant
Else
GoTo OptionSuivante
End If
Case "D"
If DisponibleD > 0 Then 'il reste de la place
rstCandidats(5) = "D"
rstCandidats.Update
DisponibleD = DisponibleD - 1
GoTo AuSuivant
Else
GoTo OptionSuivante
End If
End Select
End If
OptionSuivante:
Next iOption
AuSuivant:
rstCandidats.MoveNext
Loop
End Sub |
Partager