Bonhour Philippou, bonjour le forum,
Essaie comme ça (à adapter) :
Sub Macro1()
Dim OT As Worksheet 'déclare la variable OT (Onglet du Texte)
Dim OLV As Worksheet 'déclare la variable OLV (Onglet de la Liste de Validation)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incréement)
Dim J As Integer 'déclare la variable J (incréement)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim L As String 'déclare la variable L (Liste)
Set OT = Worksheets("Feuil1") 'définit l'onglet OT (à adapter à ton cas)
TV = OT.Range("A1:P500") 'définit le tableau des valeurs TV
Set OLV = Worksheets("Feuil2") 'définit l'onglet OLV (à adapter à ton cas)
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionanire D
For I = 1 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV
For J = 1 To UBound(TV, 2) 'boucle 2 : sur toutes les colonnes J du tableau des valeurs TV
If TV(I, J) <> "" Then D(TV(I, J)) = "" 'si la donnée ligne I colonne J de TV n'est pas vide, alimente le dictionnaire D
Next J 'prochaine colonne de la boucle 2
Next I 'prochaine ligne de la boucle 1
TMP = D.keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionanire D sans doublon
L = Join(TMP, ",") 'crée la liste L
With OLV.Range("B39:B47") 'prend en compte la plage B39:B47 de l'onglet OLV
.Validation.Delete 'efface une éventuelle ancienne liste de validation de données
.Validation.Add xlValidateList, Formula1:=L 'ajoute la liste L comme liste de validation de données
End With 'fin de la prise en compte de la plage B39:B47 de l'onglet OLV
End Sub