Bonjour,
Dans ce cas vous avez nécessairement besoin de passer par VBA, car les fonctions ne se "rappellent" pas de leurs valeurs actuelles, autrement cela créé des boucles infinies.
Ci-joint une proposition, et ci-après le code en question, qui doit se trouver dans le code de la feuille où se trouve votre tableau.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
' The variable KeyCells contains the cells that will
' cause an alert when they are changed.
Set KeyCells = Range(Range("B2"), Range("B2").End(xlDown))
If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
Select Case Target.Value2
Case "Oui"
'on passe de non à oui
Target.Offset(0, 1).Value2 = [MAX(C:C)] + 1
Case Else
' on passe de oui à non, il faut réindexer
Target.Offset(0, 1).Value2 = vbNullString
Dim cell As Range
For Each cell In KeyCells.Offset(0, 1)
If cell.Value2 <> vbNullString Then
cell.Value2 = WorksheetFunction.Max(1, cell.Value2 - 1)
End If
Next cell
End Select
End If
End Sub