Sub Effacer_liste()
'déclaration des variables
Dim f1 As Worksheet, f2 As Worksheet
Dim DerLig_AgentReste As Long
Application.ScreenUpdating = False
Set f1 = Sheets("Param")
Set f2 = Sheets("MC_For")
'Demande de confirmation avant d'effacer
If MsgBox("Etes-vous sûr de vouloir effacer la liste ci-dessous?", vbYesNo + vbCritical + vbDefaultButton2, "Effacer liste") = vbNo Then Exit Sub
f2.Range("G10:G29, B17, B20").ClearContents 'on efface les précédents résultats
f1.Select
'on réécrit en P2, la formule ùmatricielle qui construit la liste des agents
f1.Range("P2").FormulaArray = "=IF(ROWS(R1:R[-1])<=COUNTA(AgentTous)-COUNTA(AgentChoisis),INDEX(AgentTous,SMALL(IF((COUNTIF(AgentChoisis,AgentTous)=0),ROW(INDIRECT(""1:""&ROWS(AgentTous)))),ROWS(R1:R[-1]))),"""")"
f1.Range("P2").AutoFill Destination:=Range("P2:P16"), Type:=xlFillDefault 'on étire la formule jusqu'à P16
'on reconstruit les listes des Agents
ActiveWorkbook.Names("AgentReste").Delete 'on efface la liste "AgentReste"
ActiveWorkbook.Names("AgentReste_2").Delete 'on efface la liste "AgentReste_2"
DerLig_AgentReste = f1.Range("P" & Rows.Count).End(xlUp).Row 'Dernière ligne de la liste "AgentReste"
'on fait une copie de la liste des agents, c'est dans cette liste que seront retirés les agents déjà sélectionnés auparavant
f1.Range("P2:P" & DerLig_AgentReste).Select 'on sélectionne la zone sur laquelle va s'appliquer la nouvelle liste "AgentsReste"
ActiveWorkbook.Names.Add Name:="AgentReste", RefersToR1C1:="=Param!R2C16:R" & DerLig_AgentReste & "C16" 'on recrée la liste "AgentReste"
f1.Range("P2:P" & DerLig_AgentReste).Copy
f1.Range("Z2:Z" & DerLig_AgentReste).PasteSpecial Paste:=xlPasteValues 'on copie la liste "AgentReste" vers la zone "AgentReste_2" en colonne Z
ActiveWorkbook.Names.Add Name:="AgentReste_2", RefersToR1C1:="=Param!R2C26:R" & DerLig_AgentReste & "C26" 'on recrée la liste "AgentReste_2"
f2.Select
'on libère la mémoire
Set f1 = Nothing
Set f2 = Nothing
End Sub