Pour info au cas ou cela serve à quelqu'un.
J'ai trouvé une solution "plan A". L'idée est de faire un test à chaque changement de sélection dans le feuillet concerné. Si la sélection est dans la colonne ou je dois construire ma liste, le programme continue et construit la liste.
Très simple, et ne consomme pas de puissance de calcul !
Seul problème avec cette méthode on ne peut pas avoir de virgules dans la colonne AE, car la virgule est le signe qui distingue les éléments de la future liste. Si quelqu'un a une autre méthode pour construire une liste je suis preneur. Par exemple construire un objet table et le renvoyer vers une liste? Je ne sais pas quel objets accepte Validation.Add Type:=xlValidateList, Formula1:=list.
Le code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Application.ActiveCell.Column = 26 Then
criteria = Application.ActiveCell.Offset(0, -1).Value 'critère catégorie
col = "AF" 'colonne ou se trouve le catégories
colbut = "AE" 'colonne ou se trouve des noms associés à une catégorie
Application.ActiveCell.Validation.Delete 'ok
For i = 3 To 1000 'construit la liste
'a = range(col & i).Value
If Range(col & i).Value = criteria Then
a = Range(colbut & i).Value
list = list & a & ", "
'MsgBox list
End If
Next
Application.ActiveCell.Validation.Add Type:=xlValidateList, Formula1:=list
End If
End Sub