Salut Brice,
premier jet qui devrait déjà convenir, sauf incompréhension de tes conditions de sélection des remplaçants potentiels.
- un clic gauche sur une cellule SOUS un "ABS" ouvre une liste de validation selon critères ;
- un clic droit sur cette même cellule efface la valeur.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
Dim iRow%, iCol%, iNb%, iNb1%, iNb2%, iNbAbs%, iNbEnd%, iNbWk%, sEq$, sFormula$
'
If Selection.Columns.Count > 1 Or Selection.Row = 1 Then Exit Sub
'
iRow = Target.Row
iCol = Target.Column
iNb1 = Columns(1).Find(what:="Equipe 1", lookat:=xlWhole, LookIn:=xlValues, searchdirection:=xlNext).Row 'ligne Equipe 1
iNb2 = Columns(1).Find(what:="Equipe 2", lookat:=xlWhole, LookIn:=xlValues, searchdirection:=xlNext).Row 'ligne Equipe 2
iNbAbs = Columns(1).Find(what:="Absence", lookat:=xlWhole, LookIn:=xlValues, searchdirection:=xlNext).Row 'ligne Absence (Equipe 1)
iNbEnd = Columns(1).Find(what:="Equipe", lookat:=xlPart, LookIn:=xlValues, searchdirection:=xlPrevious).Row 'ligne dernière équipe
iNbWk = (iNbAbs - (iNb1 + 2)) / 2 'nbre de travailleurs par équipe
iNb = iNb2 - iNb1 'nbre de lignes (libres comprises) occupées par une équipe
'
Cells.Validation.Delete
If Target.Offset(-1, 0) = "ABS" Then
sEq = Range("A1:A" & iRow).Find(what:="Equipe", lookat:=xlPart, LookIn:=xlValues, searchdirection:=xlPrevious) 'nom de l'équipe en cours
For x = iNb1 To iNbEnd Step iNb
If Cells(x, 1) <> sEq And (Cells(x + 1, iCol) = "J" Or Cells(x + 1, iCol) = "REPOS") And Cells(x + 1, iCol + 1) <> "M" Then
For y = 1 To iNbWk
If Cells(x + (y * 2), 1) <> 0 And Cells(x + (y * 2) + 1, iCol) <> "ABS" And _
WorksheetFunction.CountIf(Columns(iCol), Cells(x + (y * 2), 1)) = 0 Then _
sFormula = sFormula & IIf(sFormula = "", "", ",") & Cells(x + (y * 2), 1)
Next
End If
Next
If sFormula <> "" Then Target.Validation.Add Type:=xlValidateList, Formula1:=sFormula
End If
'
End Sub
Tu peux augmenter ou réduire le nombre d'équipes, le nombre de travailleurs par équipe à volonté À CONDITION que chaque équipe dans 'Planning' occupe le même nombre de lignes, quelque soit le nombre effectif de travailleurs dans chaque équipe ET que le nombre de lignes libres entre les différentes équipes soit RIGOUREUSEMENT identique !!!!!!!!!!!!
À tester...
Problème avec Chrome... pas moyen de charger le fichier... autre envoi...
A+