Private Sub Worksheet_Change(ByVal Target As Range)
Dim LD As Byte 'déclare la variable LD (Ligne du Début)
Dim TV As Variant 'déclare la variable TV (Tavleu des valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)
Dim TD() As Variant 'déclare la variable TD (Tableau des Différences)
Dim TA() As Variant 'déclare la variable TA (Tableau des Adresses)
Dim K As Integer 'déclare la variable I (Incrément)
Dim F As Variant 'déclare la variable F (Fourchette)
Dim VFI As Double 'déclare la variable VFI (Valeur Fourchette Inférieure)
Dim VFS As Double 'déclare la variable VFS (Valeur Fourchette Supérieure)
Cells.Interior.ColorIndex = xlNone 'enleve les éventuelles couleurs
LD = Range("A4").Value 'définit la ligne du début LD
If Target.Address <> "$A$1" Then Exit Sub 'si le changement a lieu ailleurs qu'en A10, sort de la procédure
If Target.Value = "" Then Application.Union(Range("D1"), Range("F1")).ClearContents: Exit Sub 'si A10 est effacée, efface D1, F1 et sort de la procédure
F = Application.InputBox("Indiquez la valeur de la fouchette !", "VALEUR", Type:=1) 'définit la boîte d'entrée F
If F = False Then Application.Union(Range("D1"), Range("F1")).ClearContents: Exit Sub ''si bouton "Annuler", efface D1, F1 et sort de la procédures
VFI = Target.Value - F 'définit la valeur de la fourchette inférieure VFI
VFS = Target.Value + F 'définit la valeur de la fourchette supérieure VFI
MsgBox "La fouchette est de " & VFI & " à " & VFS
Range("D1") = VFI 'renvoie la valeur de la fouchette inférieure en D1
Range("F1") = VFS 'renvoie la valeur de la fouchette supérieure en F1
TV = Range("C" & LD).CurrentRegion 'définit le tableau des valeurs TV
For I = 2 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
K = 0: Erase TA: 'initialise K, vide le tableau TA
For J = 2 To UBound(TV, 2) 'boucle 2 : sur toutes les colonnes J du tableau des valeurs TV (en partant de la seconde)
If IsNumeric(TV(I, J)) Then 'condition 1 : si TV(I,J) est une valeur numérique
If TV(I, J) >= VFI And TV(I, J) <= VFS Then 'condition 2 : si TV(I,J) est compris dans la fourchette
ReDim Preserve TA(1, K) 'redimensionne le tableau des adresses TA (à deux entrées)
TA(0, K) = I + LD - 1 'récupère la ligne du tableau des valeurs TV
TA(1, K) = J + 2 'récupère la colonne (plus deux) du tableau des valeurs TV
K = K + 1 'incrémente K
End If 'fin de la condition 2
End If 'fin de la condition 1
Next J 'prochaine colonne de la boucle 2
If K > 0 Then 'condition : si K est supérieur à zéro
For K = 0 To UBound(TA, 2) 'boucle sur toutes les différences u tableau TD
'si la valeur TD(K) est égale à la valeur minimale des valeurs de ce tableau, colore la cellule correspondante de rouge
Cells(TA(0, K), TA(1, K)).Interior.ColorIndex = 3
Next K 'prochaine différence de la boucle
End If 'fin de la condition
Next I 'prochaine ligne de la boucle 1
End Sub