Private Sub Worksheet_Change(ByVal la_plage_qui_a_déclenché_la_procédure As Range)
Dim i&, Cel As Range, CTva As Range, Plg As Range, Dat As Range, tmp
On Error GoTo E
Set CTva = Range("P7:Q14") 'Tableau des codes de TVA
Set Plg = Range("H7:M35") 'Plage de calcul
Set Dat = Intersect(Plg, la_plage_qui_a_déclenché_la_procédure) 'Cellules à traiter
If Not Dat Is Nothing Then
For Each Cel In Dat.Cells
tmp = Plg(Cel.Row - Plg(1).Row + 1, Plg.Columns.Count)
For i = 1 To CTva.Rows.Count
If tmp = CTva(i, 1).Value Then Exit For
Next
If Cel.Column - Plg(1).Column = 5 Then
If i > CTva.Rows.Count Then
Application.EnableEvents = 0
Cel.Value = Empty
Application.EnableEvents = 1
Else
If Not IsEmpty(Cel.Offset(0, -4)) Then Cel.Offset(0, -5).Value = Cel.Offset(0, -1).Value / (1 + CTva(i, 2).Value)
End If
Else
Application.EnableEvents = 0
Select Case Cel.Column - Plg(1).Column
Case 0
If IsEmpty(Cel.Value) Then
Cel.Offset(0, 1).Value = Empty
Cel.Offset(0, 4).Value = Empty
Else
Cel.Offset(0, 1).Value = Cel.Value * CTva(i, 2).Value
Cel.Offset(0, 4).Value = Cel.Value + Cel.Offset(0, 1).Value
End If
Case 1
If i > CTva.Rows.Count Then
Cel.Value = Empty
Else
If CTva(i, 2).Value Then
Cel.Offset(0, -1).Value = Cel.Value / CTva(i, 2).Value
Cel.Offset(0, 3).Value = Cel.Value + Cel.Offset(0, -1).Value
Else
Cel.Offset(0, 3).Value = Cel.Offset(0, -1).Value
End If
End If
Case 4
If IsEmpty(Cel.Value) Then
Cel.Offset(0, -4).Value = Empty
Cel.Offset(0, -3).Value = Empty
Else
Cel.Offset(0, -4).Value = Cel.Value / (1 + CTva(i, 2).Value)
Cel.Offset(0, -3).Value = Cel.Value - Cel.Offset(0, -4).Value
End If
End Select
Application.EnableEvents = 1
End If
Next
End If
Exit Sub
E:
Application.EnableEvents = 1
End Sub