Private Sub Worksheet_Change(ByVal Target As Range)
Dim Ligne%, Nb_Colonne%, Tablo, i%, Dat
'On sort si on n'est pas dans la plage active
If Intersect(Target, Range("D10:P40")) Is Nothing Then Exit Sub
If ctrl = True Or Target.Count > 1 Or Target.Value = "" Then Exit Sub
Ligne = Sheets("Data").Range("B" & Rows.Count).End(xlUp).Row + 1
LigResult = Target.Row
ColResult = Target.Column
DateResult = Cells(Target.Row, "A")
With Sheets("Data")
Tablo = .[A1].CurrentRegion ' On met Data dans un tableau, plus rapide
Dat = Cells(Target.Row, "A") ' On mémorise la date, pour éviter de la lire N fois
For i = 1 To UBound(Tablo) ' On cherche s'il y a la bonne configuration, si trouvé on memorise ligne en ExisteEnLigne
If Tablo(i, 1) = Dat And Tablo(i, 3) = Target.Row And Tablo(i, 4) = Target.Column Then
Ligne = i ' On réactualise le N° de ligne
Exit For ' On sort car trouvé
End If
Next i
' On enregistre les valeurs. Ligne vaut soit la dernière soit celle trouvée
.Range("A" & Ligne) = Cells(Target.Row, "A")
.Range("B" & Ligne) = Target.Value
.Range("C" & Ligne) = Target.Row
.Range("D" & Ligne) = Target.Column
End With
End Sub