Calcul impôt

Bonjour,

J'essaye des hypothèses de calcul d'impôt selon le nombre d'enfants sous VBA.

J'ai réussi à faire une fonction pour calculer l'impôt avec comme argument (Revenu,Quotient familial et Nombre de parts).

J'essaye de faire le test de 1 à 10 enfants (Cellule D14:D23) mais lorsque je fais appel à la fonction j'ai l'erreur "type d'argument byref incompatible"

Pouvez-vous m'aider à comprendre mon erreur ?

Merci d'avance.

Function MonImpot(R As Range, QF As Range, Np As Range) As Single

Application.Volatile

If QF < 0 Then
MonImpot = 0
ElseIf QF <= 5693 And QF >= 0 Then
MonImpot = 0
ElseIf QF <= 11896 Then
MonImpot = R * 0.055 - 327.97 * Np
ElseIf QF <= 26420 Then
MonImpot = R * 0.14 - 1339.13 * Np
ElseIf QF <= 79830 Then
MonImpot = R * 0.3 - 5566.33 * Np
Else
MonImpot = R * 0.41 - 13357.63 * Np
End If

End Function

Sub Simulation_Impot()

Dim R As Single
Dim Cellule As Range
Dim QF As Single
Dim Np As Single
Dim Impot As Single

R = Range("E6").Value

For Each Cellule In Range("D14:D23")
If Cellule.Value <= 2 Then
Np = Np + 0.5 * Cellule.Value
Else
Np = Np + 0.5 * 2 + 1 * Cellule.Value
End If
Next

For Each Cellule In Range("D14:D23")
QF = Revenu / Np
Next

For Each Cellule In Range("D14:D23")
Impot = MonImpot(R, QF, Np)
Next

For Each Cellule In Range("D14:D23")
Cellule.Offset(0, 1) = Impot
Next
End Sub

Bonjour,

Il faut que les arguments d'appel et ceux de la fonction soient de même type.

Au lieu Single, il est préférable d'utiliser Double pour bénéficier de la précision standard d'Excel.

Il ne faut pas utiliser une boucle par calcul, mais même tous les calculs dans une seule boucle.

Par Exemple :

Function MonImpot(R As Double, QF As Double, Np As Double) As Double

  Application.Volatile

  If QF < 0 Then
    MonImpot = 0
  ElseIf QF <= 5693 And QF >= 0 Then
    MonImpot = 0
  ElseIf QF <= 11896 Then
    MonImpot = R * 0.055 - 327.97 * Np
  ElseIf QF <= 26420 Then
    MonImpot = R * 0.14 - 1339.13 * Np
  ElseIf QF <= 79830 Then
    MonImpot = R * 0.3 - 5566.33 * Np
  Else
    MonImpot = R * 0.41 - 13357.63 * Np
  End If

End Function

Sub Simulation_Impot()

Dim R As Double
Dim Cellule As Range
Dim QF As Double
Dim Np As Double
Dim Impot As Double

  With Worksheets("Feuil1") ' à adapter
    R = .Range("E6").Value
    For Each Cellule In .Range("D14:D23")
      If Cellule.Value <= 2 Then
        Np = 1 + 0.5 * Cellule.Value    'ou 2 + ou alors Np + mais initialiser Np
      Else
        Np = 1 + 0.5 * Cellule.Value + 1
      End If
      QF = R / Np
      Impot = MonImpot(R, QF, Np)
      Cellule.Offset(0, 1).Value = Impot
    Next
  End With
End Sub

Merci pour ta réponse, mon programme fonctionne !

Bonne journée

Rechercher des sujets similaires à "calcul impot"