Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Grade As String ' Grade de l'agent
Dim Off As Currency ' Officiers
Dim Sof As Currency ' Sous/Officiers
Dim Cap As Currency ' Caporaux
Dim Sap As Currency ' Sapeurs
' Initialisation des variables et constantes
Grade = Range("A" & Target.Row).Value ' Valeur en colonne A
Off = 11.43 ' Rémunération horaire des Officiers
Sof = 9.21 ' Rémunération horaire des Sous-Officiers
Cap = 8.16 ' Rémunération horaire des Caporaux
Sap = 7.6 ' Rémunération horaire des Sapeurs
' Permet de n'agir que sur la zone "Exercices"
If Intersect(Target, Range("D3:O44")) Is Nothing Or Target.Count > 1 Then Exit Sub
' Empècher les évènements, en cas de changement
Application.EnableEvents = False
' Réinitialisation du total
Range("P" & Target.Row).Value = 0
' En fonction du choix dans la liste déroulante (1;2;3; Excusé; Absent)
Select Case Target.Value
' Calcul du montant en fonction de la durée de présence et du grade
Case 1 To 3
If Grade = "LTN" Or Grade = "CNE" _
Then Target.Value = Round(Target.Value * Off / 2, 2)
Range("P" & Target.Row).Value = Round(Application.Sum(Range("D" & Target.Row & ":O" & Target.Row)) * 2 / Off, 0)
If Grade = "ADC" Or Grade = "ADJ" Or Grade = "SCH" Or Grade = "SGT" _
Then Target.Value = Round(Target.Value * Sof / 2, 2)
Range("P" & Target.Row).Value = Round(Application.Sum(Range("D" & Target.Row & ":O" & Target.Row)) * 2 / Sof, 0)
If Grade = "CCH" Or Grade = "CPL" _
Then Target.Value = Round(Target.Value * Cap / 2, 2)
Range("P" & Target.Row).Value = Round(Application.Sum(Range("D" & Target.Row & ":O" & Target.Row)) * 2 / Cap, 0)
If Grade = "SAP" Or Grade = "1CL" _
Then Target.Value = Round(Target.Value * Sap / 2, 2)
Range("P" & Target.Row).Value = Round(Application.Sum(Range("D" & Target.Row & ":O" & Target.Row)) * 2 / Sap, 0)
' En cas d'absence
Case Else
Target.Value = Target.Value
End Select
' Activer les évènements
Application.EnableEvents = True
End Sub