Salut GGautier,
Oui, l'avantage avec INDEX, c'est que tu gardes le "contrôle" sur le résultat lorsque celui-ci est évolutif... Je trouve que c'est le plus simple.
Si, la validation matricielle fonctionne mais à condition de modifier UNIQUE = DICO.keys par UNIQUE = application.transpose(DICO.keys). Sinon, tu peux rajouter la fonction excel transpose de manière à obtenir un vecteur colonne :
=TRANSPOSE(UNIQUE(A:A))
Je ne connais pas 365 malheureusement mais j'imagine qu'à l'instar de la fonction FILTRE (que je ne connais pas non plus mais dont j'ai furtivement entendu parler), il est possible de renvoyer plusieurs valeurs. Là, je ne vois pas trop comment faire.
En tout cas, je pense à 2 possibilités :
1) Le faire par une macro via une inputbox de sélection de range. Le but étant d'obtenir une liste sans doublon directement. Par exemple, on double clic sur une cellule, une inputbox s'ouvre, on sélectionne la plage à uniciser, on appuie sur ok et on obtient une nouvelle plage à partir de la cellule double-cliquée.
2) Sinon, on garde la fonction unique et on ajoute une évènement change portant sur la formule de la target :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then 'si la cible est une cellule unique
If UCase(Target.Formula) Like "=UNIQUE(*)" Then 'si on saisit la fonction UNIQUE
renvoi = Evaluate(Target.Formula) 'tableau contenant les valeurs de UNIQUE
Application.EnableEvents = False 'desactivation evenements
Target.Resize(UBound(renvoi), 1).FormulaArray = Target.Formula 'renvoie une matrice avec toutes les valeurs de la presente fonction UNIQUE
Application.EnableEvents = True 'reactiv events
End If
End If
End Sub
Le seul problème, c'est qu'en cas d'ajout ou de suppression, ça ne se mettra pas à jour comme tu pourrais le souhaiter idéalement. Il faudrait effacer et recommencer ou sinon essayer de passer par un évènement calculate avec un recherche (find) de tous les UNIQUE pour les mettre à jour...
Voici le fichier avec mon idée.
Cdlt,