Option Explicit
Sub tri()
Dim data, activ, stat
Dim i As Long, j As Long, k As Long
'Lecture des données de A3 à ...dernière cellule. Conditions : pas de ligne vide dans le tableau de données,
'une ligne vide en-dessous et une colonne vide à droite des données ( ligne 59 et colonne M dans l'exemple donné).
data = Range(Cells(3, 1), Cells(Cells(3, 1).CurrentRegion.Rows.Count, Cells(3, 1).CurrentRegion.Columns.Count))
'Lecture des activités de N3 à O.. (ici, O11). Condition : pas de ligne vide dans le tableau de données, une ligne
'vide en dessous du tableau.
activ = Range(Cells(3, 14), Cells(Cells(3, 14).CurrentRegion.Rows.Count, 15))
'Tableau statistique qui sera collé en N35...
ReDim stat(1 To UBound(activ, 1), 1 To 7)
For i = 1 To UBound(activ, 1)
stat(i, 1) = activ(i, 1)
Next i
'Groupement des données
For i = 1 To UBound(data, 1)
For j = 10 To 12 'Pour lire les trois colonnes d'activité
For k = 1 To UBound(activ, 1) 'Recherche de l'activité
If data(i, j) = activ(k, 2) Then Exit For
Next k
If k <= UBound(activ, 1) Then 'Si une activité est trouvée, incrémentation de la catégorie
Select Case Replace(data(i, 8), " ", "") & Replace(data(i, 9), " ", "")
Case "FilleBenjamin": stat(k, 2) = 1 + stat(k, 2)
Case "GarçonBenjamin": stat(k, 3) = 1 + stat(k, 3)
Case "FilleMinime": stat(k, 4) = 1 + stat(k, 4)
Case "GarçonMinime": stat(k, 5) = 1 + stat(k, 5)
Case "FilleCadet": stat(k, 6) = 1 + stat(k, 6)
Case "GarçonCadet": stat(k, 7) = 1 + stat(k, 7)
End Select
End If
Next j
Next i
'Affichage
With Range("N35", Range("N35").Offset(UBound(stat, 1) - 1, UBound(stat, 2) - 1))
.ClearContents
.Value = stat
End With
End Sub