Est-ce que vous pourriez m'expliquer pourquoi ce que je faisais était faux et pourquoi il fallait faire ce que vous avez fait ?
En complément des explications données par Darzou, je te soumets deux observations sur ton code :
1) Pour balayer les cellules G15 à G27, il aurait fallu écrire
If Target.Address = "$G$" & i Then
2) La procédure évènementielle Worksheet_Change est lancée à chaque modification d’une cellule. Avec ton code, tu vas effectuer inutilement 13 fois le test sur Target.Address.
De plus, si la cellule modifiée est dans la plage G1:G17, tu vas lancer Finish ou No_finish qui vont modifier une cellule. Cette modification de cellule va relancer la procédure Worksheet_Change . Et c’est reparti pour 13 tours de manège !
Pour te faire une idée, tu peux comparer l’effet produit par les 2 procédures suivantes (exécution en mode pas à pas).
Private Sub Worksheet_Change(ByVal Target As Range)
For i = 15 To 27
If Target.Address = "$G$" & i Then
If Target = "Yes" Then
Finish (i)
Else
No_finish (i)
End If
End If
Next
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 And Not Application.Intersect(Target, Range("$G$15:$G$27")) Is Nothing Then
Application.EnableEvents = False
If Target = "Yes" Then
Finish (Target.Row)
Else
No_finish (Target.Row)
End If
Application.EnableEvents = True
End If
End Sub
A+