Bonsoir Mathieur, bonsoir le forum,
Désolé, trop nul en formules... Mais si une proposition VBA t'intéresse :
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim L As String 'déclare la variable L (Liste)
Set O = Worksheets("Feuil1") 'définit l'onglet O
DL = O.Cells(Application.Rows.Count, "D").End(xlUp).Row 'définit la dernière ligne éditée Dl de la colonne D de l'onglet O
TV = O.Range("D2:D" & DL) 'définit le tableau des valeurs TV
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableu des valeurs
TV(I, 1) = Left(TV(I, 1), 4) 'récupère dans la donnée ligne I colonne 1 de TV les 4 premiers caractères de cette même donnée
Next I 'prochaine ligne de la boucle
L = Join(Application.Transpose(TV), ",") 'définit la liste L (les valeurs de chaque ligne de TV séparée par une virgule)
With O.Range("E2").Validation 'prend en compte la validation de donnée de la cellule B2
.Delete 'supprime une éventuelle validation de données existante
.Add xlValidateList, Formula1:=L 'ajoute la liste L comme liste de validation de donnée `1a la cellule E2
End With 'fin de la prise en compte de la validation de donnée de la cellule B2
End Sub
Je te conseille, pour tes futures venues sur le site, de nous proposer le fichier Excel plutôt que des captures d'écran de celui-ci. Ça nous évite de reconstruire avant de te proposer une solution...