Private Sub Worksheet_Change(ByVal Target As Range)
Dim o As Object 'déclare la variable o (Onglet)
Dim col As Byte 'déclare la variable col (COLonne)
Dim tot As Double 'déclare la variable tot (TOTal)
'si le changement a lieu ailleurs que dans la colonne C
'(de la ligne 6 à la dernière ligne éditée dans la colonne B), sort de la procédure
If Application.Intersect(Target, Range("C6:C" & Cells(Application.Rows.Count, 2).End(xlUp).Row)) Is Nothing Then Exit Sub
If Selection.Cells.Count > 1 Then Exit Sub 'si le nombre de cellules sélectionnées est supérieur à 1, sort de la procédure
Set o = Sheets(Target.Offset(0, -1).Value) 'définit l'onglet o
On Error Resume Next 'gestion des erreurs si une erreur est génénée, passe à la ligne suivante)
'définit la colonne col (génère une erreur si la semaine n'existe pas dans l'onglet o)
col = o.Rows(2).Find(CStr(Target.Value), , xlValues, xlWhole).Column
If Err <> 0 Then 'condition : si une erreur a été générée
Err = 0 'annule l'erreur
MsgBox "Semaine non renseignée dans l'onglet " & o.Name & " !" 'message
Target.ClearContents 'efface la semaine renseignée
GoTo fin 'va à l'étiquette fin
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
'définit la total tot (la cellule de la ligne 3 si ligne unique,sinon, la somme de la ligne 3 à dernière ligne éditée)
tot = IIf(o.Cells(Application.Rows.Count, col).End(xlUp).Row = 3, o.Cells(3, col), Application.WorksheetFunction.Sum(o.Cells(3, col), o.Cells(Application.Rows.Count, col).End(xlUp)))
Target.Offset(0, 1) = tot 'affiche le total tot dans la cellule de la colonne D
fin: 'étiquette
If Target.Value = "" Then Target.Offset(0, 1).Value = "" 'si la cellule a été effacée, efface aussi la cellule de la colonne D
End Sub