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