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 SubBonjour,
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 SubMerci pour ta réponse, mon programme fonctionne !
Bonne journée