Bonjour …
Voici une autre proposition basée sur l'utilisations de Tableaux (classes ListObjects-ListObject) mais, ici, avec une syntaxe de base donc, tout en gardant leurs spécificités, sans leur syntaxe nouvelle*.
Le tableau de base étant nommé BD et le réceptif nommé TbQ
'… prévoir le lancement
Application.ScreenUpdating = 0
If Application.CountA([TbQ]) > 0 Then [TbQ].Delete 'nettoyage
[BD].Columns(4).Copy [TbQ].Columns(1) 'copie d'une colonne
[TbQ].Columns(2).FormulaR1C1 = "=COUNTIF([Lampe],[@[Lampe]])"
[TbQ] = [TbQ].Value 'n'avoir que les valeurs …
[TbQ].Columns(1).RemoveDuplicates Columns:=1, Header:=1 'sans doublon
[TbQ].Sort [TbQ].Columns(1), , Header:=1'qui plus est, avec tri
End Sub
Nota : si on ne connaît pas Columns, on peut facilement adapter ce code avec les noms des titres des colonnes plutôt que leur numéro. Dans ce cas, on aura intérêt à choisir des noms courts !
* classes pleins de ressources (à utiliser et même abuser).
Ayant de plus en plus de fuites dans les idées, je ne fais pas l'effort de retenir des expressions nouvelles, souvent à rallonge, que j'aurai du mal à mémoriser par contre j'ai pu retenir quelques spécificités pour me simplifier la mise en place des procédures. Parmi elles, on n'a pas besoin de savoir dans quels onglets ils sont définis donc de les référencer, on peut compléter leur étude avec TCD, PowerQuery …