Private Sub Worksheet_Change(ByVal Target As Range)
Dim liste, wb As Workbook, i As Integer, s As Object
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next
liste = Array("achat", "hygiene", "organisation", "qualité")
Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & Target)
For i = UBound(liste) To 0 Step -1
ThisWorkbook.Sheets(liste(i)).Delete
For Each s In wb.Sheets
If s.Name Like "*" & liste(i) Then
s.Visible = True 'si la feuille est masquée
s.Copy After:=Me
If Not s Is Nothing Then ActiveSheet.Name = liste(i)
Exit For
End If
Next
Next
wb.Close
Me.Select
End Sub