Option Compare Text 'la casse est ignorée (sécurité)
Sub Feuille_regroupe()
'se lance par Ctrl+R
Sheets("Regroupe").Activate
End Sub
Sub Liste(w As Worksheet)
Dim dest As Range, nlig&, cible$, nf$, i&, n, a(), x$, flag As Boolean, j&
Set dest = w.[A2:E10] 'plage à remplir, à adapter éventuellement
nlig = dest.Rows.Count
cible = w.Name
'---liste de tous les noms/classes---
For Each w In Worksheets
nf = w.Name
If Val(nf) Then 'nom de la feuille commençant par un chiffre
For i = 2 To w.[A1].CurrentRegion.Rows.Count
If w.Cells(i, 3) = cible Then
n = n + 1
ReDim Preserve a(1 To 3, 1 To n)
a(1, n) = w.Cells(i, 1)
a(2, n) = nf
End If
Next i
End If
Next w
'---repérage des noms/classes déjà inscrits et effacement des autres---
For i = 1 To nlig
x = dest(i, 1) & dest(i, 2)
flag = False
If x <> "" Then
For j = 1 To n
If a(1, j) & a(2, j) = x Then a(3, j) = "x": flag = True
Next j
If Not flag Then dest(i, 1).Resize(, 5) = ""
End If
Next i
'---inscription du reste sur les lignes vides---
For j = 1 To n
If a(3, j) = "" Then
flag = False
For i = 1 To nlig
If dest(i, 1) & dest(i, 2) = "" Then
dest(i, 1) = a(1, j)
dest(i, 2) = a(2, j)
dest(i, 3).Resize(, 3) = ""
flag = True
Exit For
End If
Next i
If Not flag Then MsgBox "Zone à remplir insuffisante !", 48: Exit For
End If
Next j
dest.Sort dest(1), xlAscending, Header:=xlNo 'tri pour regrouper en cas de lignes vides
End Sub