Utilise la propriété Value plutôt que Text.
C.Offset(, 3).Value = Target.Value
et pas
C.Offset(, 3).[barrer]Text[/barrer] = Target.Value
De plus changer ceci n'est pas suffisant car à chaque fois que la ligne C.Offset(, 3).Value = Target.Value est exécutée, tu relances la procédure évènementielle indéfiniment.
Une solution serait de désactiver les procédures évènementielles avec l'instruction Application.EnableEvents mais ça peut être problématique si ton code bug.
Une autre solution pour pallier ce problème avec le code suivant :
Dim temoin As Boolean
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim DerLig As Long, C As Range
If temoin Then Exit Sub
If ActiveSheet.Name = "GLOBAL" Then Exit Sub
On Error Resume Next
If Target.Count > 1 Then Exit Sub
temoin = True
With Sheets("GLOBAL")
Set C = .Columns("A").Find(What:=Target.Offset(, -3))
C.Offset(, 3).Value = Target.Value
End With
DerLig = Sheets(UCase(Target)).Cells(Rows.Count, 1).End(xlUp).Row + 1
If Not Intersect(Target, Range("D5:D100")) Is Nothing Then
If UCase(Target) <> ActiveSheet.Name Then Target.EntireRow.Cut Destination:=Sheets(CStr(Target)).Range("A" & DerLig)
End If
temoin = False
End Sub