Salut tseoy,
Salut Pedro ,
une solution full VBA qui calcule une liste de validation en excluant les noms des agents déjà renseignés à la date en [E].
- un clic en [E] vide affiche par défaut la date de la ligne supérieure si ligne > 3 ;
- si tous les agents ont déjà un compte à la date, [E] prend par défaut la date du jour si <> de [E] ;
- si clic en ['I] mais [E] est vide => [E].Select.
If Not Intersect(Target, Range("I:I")) Is Nothing Then
Range("I:I").Validation.Delete
If Target.Offset(0, -4) = "" Then
Target.Offset(0, -4).Select
Exit Sub
End If
iRowT = Target.Row
Range("AA:AA").Value = ""
With Worksheets("BDD")
iRowA = .Range("A" & Rows.Count).End(xlUp).Row
Range("AA1").Resize(iRowA - 1, 1).Value = .Range("A2:A" & iRowA).Value
End With
On Error Resume Next
iRow = Range("E:E").Find(what:=Range("E" & iRowT).Value, lookat:=xlWhole, LookIn:=xlValues, searchdirection:=xlNext).Row
If iRow < iRowT Then
For x = iRow To iRowT - 1
If Range("E" & x).Value = Range("E" & iRowT).Value Then
Set rCel = Range("AA:AA").Find(what:=Range("I" & x).Value, lookat:=xlWhole, LookIn:=xlValues, searchdirection:=xlNext)
If Not rCel Is Nothing Then rCel.Delete shift:=xlUp
End If
Next
End If
On Error GoTo 0
iRow = Range("AA" & Rows.Count).End(xlUp).Row
If iRow = 1 And Range("AA1").Value = "" Then
msgbox "Tous les agents ont un enregistrement à cette date!", vbCritical + vbOKOnly, "Heures Sup"
Range("E" & iRowT).Value = ""
If iRowT > 3 Then Range("E" & iRowT).Value = IIf(CDate(Range("E" & iRowT - 1).Value) <> Date, Date, "")
Range("E" & iRowT).Select
Else
Range("I" & iRowT).Validation.Add Type:=xlValidateList, Formula1:="=AA1:AA" & iRow
End If
End If
A tester en situation réelle...
A+