Private Sub Worksheet_SelectionChange(ByVal Target As Range)
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ément)
Dim TMP As Variant 'déclare la variable TMP (Tableau TeMPoraire)
If Application.Intersect(Target, Range("A3").CurrentRegion.EntireRow) Is Nothing Then Exit Sub 'si la sélection a lieu alleurs que dans une ligne de code, sort de la procédure
TV = Me.Range("A3").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
If CStr(TV(I, 1)) = CStr(Cells(Target.Row, 1)) Then D(TV(I, 2)) = "" 'si les données correspondent, alimente le dictionnaire D avec la nuance
Next I 'prochaine ligne de la boucle
TMP = D.Keys 'alimente le tableau temporaire D avec la liste du dictionnaire D sans doublon
For I = 0 To 4 'boucle sur les 5 textboxes
UserForm1.Controls("Textbox" & 28 + I).Value = "" 'vide la Texbox de la boucle
Next I 'prochaine textbox de la boucle
For I = 0 To 4 'boucle sur les 5 textboxes
On Error Resume Next 'gestion des erreur, en cas d'erreur va à la ligne suivante
UserForm1.Controls("Textbox" & 28 + I).Value = TMP(I) 'alimente la textbox de la boucle avec la nuance du tableau (génére une erreur quand plus assez de nuance)
If Err > 0 Then Exit For 'si une erreur a été générée, sort de la boucle
Next I 'prochaine textbox de la boucle
On Error GoTo 0 'annule la gestion des erreurs
UserForm1.Show 'affiche l'UserForm1
End Sub