Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim zoneFournisseurs As Range, nomFourn() As String, iFourn As Long, searchC As Range, memAdr As String, iL As Long
'ne pas traiter les onglets GENERAL et Liste
If Sh.Name = "GENERAL" Or Sh.Name = "Listes" Then Exit Sub
'récupérer le nom de l'onglet composé de noms de fournisseurs (1 ou plusieurs
' séparés par un tiret "-") dans un tableau
nomFourn = Split(Sh.Name, "-")
'effacer les données
Sh.Range("2 : " & Sh.Rows.Count).Clear
iL = 1
'récupérer la "zone fournisseur" de l'onglet général (colonne C)
With ThisWorkbook.Sheets("GENERAL")
Set zoneFournisseurs = .Range("C1", .Range("C" & .Rows.Count).End(xlUp))
End With
'boucler sur chaque fournisseur (nom de l'onglet)
For iFourn = LBound(nomFourn) To UBound(nomFourn)
'rechercher dans la zoneFournisseurs
Set searchC = zoneFournisseurs.Find(nomFourn(iFourn), , xlValues, xlWhole)
'si une cellule est trouvée
If Not searchC Is Nothing Then
memAdr = searchC.Address
Do
iL = iL + 1
searchC.EntireRow.Copy Sh.Range("A" & iL)
Set searchC = zoneFournisseurs.FindNext(searchC)
Loop Until memAdr = searchC.Address
End If
Next iFourn
'trier les données par date
Sh.Range("A2:E" & iL).Sort Sh.Range("A2"), xlAscending
End Sub