Private Sub CommandButton2_Click()
Dim Nom As Range, Trouve As Range, Remplace As Range, Debut As String, Suivant As Range, Flag As Boolean
'dans la feuille Remplacement
With Sheets("Remplacement")
'pour chaque nom colonne A
For Each Nom In .Range("A3", .[A65536].End(xlUp)).SpecialCells(xlCellTypeConstants, xlTextValues)
'trouve cette personne dans Horaire Viandes
Set Trouve = Columns(1).Find(Nom.Value, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlByRows)
If Not Trouve Is Nothing Then
'si cette personne est absente
If Range("S" & Trouve.Row).Value = "ABSENT" Then
'trouve cette personne dans colonne D à IV de "ligne à ligne" (Horaire Viandes)
Set Trouve2 = .Range("D3:IV65536").Find(Nom.Value, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlByRows)
If Not Trouve2 Is Nothing Then
Debut = Trouve2.Address
'la boucle permet de gérer l'absence ou non des personnes remplaçantes
Do
'on cherche la personne de remplacement dans la feuille Horaire Viandes
Set Remplace = Columns(1).Find(.Range("A" & Trouve2.Row).Value, LookIn:=xlValues, lookat:=xlWhole)
'si cette personne de remplacement n'est pas également absente et ne remplace pas déjà quelqu'un
If Range("S" & Remplace.Row).Value <> "ABSENT" And Not UCase(Range("S" & Remplace.Row).Value) Like "REMPLACEMENT DE*" Then
'on copie les horaires de la semaine
Range("E" & Remplace.Row & ":Q" & Remplace.Row).Value = Range("E" & Trouve.Row & ":Q" & Trouve.Row).Value
Range("E" & Remplace.Row + 1 & ":Q" & Remplace.Row + 1).Value = Range("E" & Trouve.Row + 1 & ":Q" & Trouve.Row + 1).Value
Range("S" & Remplace.Row) = "REMPLACEMENT DE " & Nom
'on copie horaire colonne D
Range("D" & Remplace.Row + 1).Value = Range("D" & Trouve.Row + 1).Value
Flag = True
'on sort de la boucle
Exit Do
End If
Set Suivant = Trouve2
Set Trouve2 = .Range("D3:IV65536").Find(Nom.Value, after:=Suivant, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlByRows)
Loop While Not Trouve2 Is Nothing And Trouve2.Address <> Debut
If Trouve2.Address = Debut And Not Flag Then
MsgBox Nom & " n'a pas de remplaçant!", vbExclamation
Flag = False
End If
End If
End If
End If
Next
End With
End Sub