Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
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) Is Nothing Then Exit Sub 'si le double-clic a lieu alleurs que dans un code, sort de la procédure
Cancel = True
TV = Me.Range("A3").CurrentRegion 'défini 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 ligne I du tableau des valeur TV
If CStr(TV(I, 1)) = CStr(Target.Value) 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
UserForm1.Controls("Textbox" & 28 + I).Value = "" 'vide la Texbox de la boucle
Next I
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 de nucance)
If Err > 0 Then Exit For 'si une erreur a été générée, sort de la procédure
Next I 'prochaine textbox de la boucle
On Error GoTo 0 'annule la gestion des erreurs
UserForm1.Show 'affiche l'UserForm1
End Sub