Recherche

FONCTION "IMPOT MENSUEL" SUR EXCEL EN UTILISANT VBA

Version PDF

1. Présentation de l’IRPP[1]

Nous saisissons cette occasion pour rappeler que le barème d’Impôt sur le Revenu des Personnes Physiques à été modifié par la Loi de Finance 2017 comme détaillé dans ce qui suit :

Tranche de Revenu en TND
Taux
Taux Effectif
De 0 à 5000
0%
0%
De 5000,001  à  20.000
26%
19,5%
De 20.000,001  à  30.000
28%
22,33%
De 30.000,001 à  50.000
32%
26,20%
Supérieur à  50.000 DT
35%


En outre, la déduction des frais professionnel (10%) à été plafonnée à 2.000 Dinars

2. Modalité de Calcul


Le calcul de la retenue à la source sur les salaires se fait principalement en se basant sur les critères suivants.

+ Revenue Brut Annuel

- Cotisation Sociale
9,18%*Revenue Brut
= Salaire Net Sociale
Revenue Brut-Cotisation
- Déduction pour Frais Professionnel
10%*Salaire Net Sociale
- Déduction Commune (chef de famille, enfants à charges, etc.)
150 TND Chef de famille
Respectivement (90 ; 75 ; 60 ; 45) pour les quatre 1er enfants.
= Salaire Net Imposable

Retenue à la Source IRPP
Selon Un barème

3. Fonction Excel 


ImpotMensuel (Salaire, Situation Familiale, Nombre d’Enfant)

Nous vous proposons dans ce qui suit une astuce pour déterminer l’impôt comme n’importe quelles autres fonctions Excel et ce telle illustrée dans les images ci-dessous :

Fonction Excel Impôt Mensuel
Fonction Excel Impôt Mensuel

Aperçu Fonction Impôt Mensuel
Aperçu Fonction Impôt Mensuel



 Cette fonction tient compte seulement des paramètres dans le tableau ci-dessous du calcul de la retenue à la source sur la revenue des personnes physiques. Elle peut être améliorée pour tenir compte des autres conditions de calcul de l’impôt.

4. Code VBA


u Fonction Principale Pour Calculer L’impôt Annuel

Public Function IRPP_Annuel(Salaire As Double, Mariee As Boolean, Nombre_Enfant As Integer)
Dim Tranche, Taux
Dim Net_Social As Double

Taux = Array(0, 0.26, 0.28, 0.32, 0.34)
Tranche = Array(0, 5000, 20000, 30000, 50000)

Net_Social = 12 * (Salaire - CNSS(Salaire))
Annuel = Net_Social - FraisProfessionel(Salaire) - Deduction_Chef_Famille(Mariee) - Deduction_Enfant(Nombre_Enfant)

If Annuel <= Tranche(1) Then
IRPP_Annuel = Annuel * t0

ElseIf Annuel <= Tranche(2) Then
IRPP_Annuel = (Annuel - Tranche(1)) * Taux(1)

ElseIf Annuel <= Tranche(3) Then
IRPP_Annuel = (Tranche(2) - Tranche(1)) * Taux(1) + (Annuel - Tranche(2)) * Taux(2)

ElseIf Annuel <= Tranche(4) Then
IRPP_Annuel = (Tranche(2) - Tranche(1)) * Taux(1) + (Tranche(3) - Tranche(2)) _ *Taux(2) + (Annuel - Tranche(3)) * Taux(3)

ElseIf Annuel > Tranche(4) Then
IRPP_Annuel = (Tranche(2) - Tranche(1)) * Taux(1) + (Tranche(3) - Tranche(2)) * Taux(t2) + (Tranche(4) - Tranche(3)) * Taux(3) + (Annuel - Tranche(4)) * Taux(4)
End If
End Function

u Fonction Pour Calculer l’Impôt Mensuel

Public Function ImpotMensuel(Salaire As Double, Mariee As Boolean, Nombre_Enfant As Integer)
ImpotMensuel = Round(IRPP_Annuel(Salaire, Mariee, Nombre_Enfant) / 12, 3)
'Round pour arrondir au 3 eme chiffre aprés la virgule
End Function

u Fonction Pour calculer les cotisations sociales

Public Function CNSS(Salaire As Double)
'Calculer le CNSS en fonction du salaire Brut
CNSS = Salaire * 0.0918
End Function

u Fonction Pour calculer les déductions à titre de frais Professionnel
Public Function FraisProfessionel(Salaire As Double)
'Calculer les frais professionnel en fonction de la de finance 2017
If 0.1 * (Salaire - CNSS(Salaire)) * 12 > 2000 Then
FraisProfessionel = 2000

Else
FraisProfessionel = 0.1 * (Salaire - CNSS(Salaire)) * 12
End If
End Function

u Fonction pour calculer la déduction à titre de chef de famille

Public Function Deduction_Chef_Famille(Mariee As Boolean)
If Mariee = False Then
Deduction_Chef_Famille = 0
ElseIf Mariee = True Then
Deduction_Chef_Famille = 150
End If
End Function

u Fonction pour calculer la déduction au titre des enfants à charges

Public Function Deduction_Enfant(Nombre_Enfant As Integer)
If Nombre_Enfant = 0 Then
Deduction_Enfant = 0

ElseIf Nombre_Enfant = 1 Then
Deduction_Enfant = 90

ElseIf Nombre_Enfant = 2 Then
Deduction_Enfant = 90 + 75

ElseIf Nombre_Enfant = 3 Then
Deduction_Enfant = 90 + 75 + 60

ElseIf Nombre_Enfant >= 4 Then
Deduction_Enfant = 90 + 75 + 60 + 45
End If
End Function

Auteur: N’hésitez pas à me signaler les erreurs qui peuvent glisser dans cet article afin de les corriger. 


4 commentaires :

  1. il ya une faute dans la ligne 4 de la premiére fonction taux=...........0,35 et non pas 0,34
    et merci comme méme

    RépondreSupprimer
  2. Ce commentaire a été supprimé par l'auteur.

    RépondreSupprimer
  3. Bonjour à tous,

    J'ai cherché sur la toile un code pour calculer les impôts en fonction du revenu, nombre de parts et nombre d'adultes mais ne le trouvant pas voici le mien.

    Il prend en compte la décote et le plafonnement de la réduction lié au quotient familial par année.

    Option Explicit
    Function CalculImpotSansQuotient(revenu As Double, Optional annee As Integer = 2024) As Double
    Dim i As Integer
    Dim calculImpotParAnnee As Double
    Dim Tbl As Variant, Taux As Variant

    '2023 par defaut
    Tbl = Array(0, 11294, 28797, 82341, 177106)
    Taux = Array(0, 0.11, 0.3, 0.41, 0.45)

    Select Case annee
    'https://fr.wikipedia.org/wiki/Bar%C3%A8mes_de_l%27imp%C3%B4t_sur_le_revenu_en_France
    Case 2022
    Tbl = Array(0, 10777, 27478, 78570, 168994)
    Taux = Array(0, 0.11, 0.3, 0.41, 0.45)

    Case 2021
    Tbl = Array(0, 10225, 26070, 74545, 160336)
    Taux = Array(0, 0.11, 0.3, 0.41, 0.45)

    Case 2020
    Tbl = Array(0, 10084, 25710, 73516, 158122)
    Taux = Array(0, 0.11, 0.3, 0.41, 0.45)
    Case 2019
    Tbl = Array(0, 10064, 27794, 74517, 157806)
    Taux = Array(0, 0.14, 0.3, 0.41, 0.45)
    Case 2018
    Tbl = Array(0, 9964, 27519, 73779, 156244)
    Taux = Array(0, 0.14, 0.3, 0.41, 0.45)
    End Select


    i = 1
    Do
    calculImpotParAnnee = calculImpotParAnnee + WorksheetFunction.Max(WorksheetFunction.Min(revenu - Tbl(i), Tbl(i + 1) - Tbl(i)), 0) * Taux(i)
    i = i + 1
    Loop While revenu > Tbl(i) And i < UBound(Tbl)

    CalculImpotSansQuotient = calculImpotParAnnee

    End Function

    Function CalculImpot(revenu As Double, nbPart As Double, nbAdultes As Double, Optional SalaireDejaAbattu As Boolean = False, Optional annee As Integer = 2024, Optional plafondDemiePart As Double = 1759) As Double

    Dim impotParPart As Double
    Dim impotParPartRameneATouteLesParts As Double
    Dim impotPourAdultes As Double
    Dim reductionImpotGraceAuxEnfants As Double
    Dim nbDemiPartSupplementaire As Double
    Dim plafondCalcule As Double
    Dim sommeAAjouterLieeAuPlafond As Double
    Dim impotAvantDecote As Double
    Dim impotFinal As Double


    If SalaireDejaAbattu = False Then
    revenu = revenu * 0.9 'abattement de 10%
    End If


    impotParPart = CalculImpotSansQuotient(revenu / nbPart, annee)
    impotParPartRameneATouteLesParts = impotParPart * nbPart
    impotPourAdultes = CalculImpotSansQuotient(revenu / nbAdultes, annee)


    reductionImpotGraceAuxEnfants = impotPourAdultes - impotParPartRameneATouteLesParts

    nbDemiPartSupplementaire = (nbPart - nbAdultes) * 2

    plafondCalcule = nbDemiPartSupplementaire * plafondDemiePart

    sommeAAjouterLieeAuPlafond = reductionImpotGraceAuxEnfants - plafondCalcule

    If sommeAAjouterLieeAuPlafond > 0 Then
    impotAvantDecote = impotParPartRameneATouteLesParts + sommeAAjouterLieeAuPlafond
    Else
    impotAvantDecote = impotParPartRameneATouteLesParts
    End If


    If annee < 2020 Then 'Decote par cherchée avant cette date (a faire)
    CalculImpot = impotAvantDecote
    Else
    'Partie decote:
    impotFinal = impotAvantDecote
    If (impotAvantDecote < 1929 And nbAdultes = 1) Then
    impotFinal = impotAvantDecote - (873 - (impotAvantDecote * 45.25 / 100)) '2023
    ElseIf impotAvantDecote < 3191 And nbAdultes > 1 Then
    impotFinal = impotAvantDecote - (1144 - (impotAvantDecote * 45.25 / 100)) '2023
    End If


    Select Case annee
    Case 2022
    If (impotAvantDecote < 1840 And nbAdultes = 1) Then
    impotFinal = impotAvantDecote - (833 - (impotAvantDecote * 45.25 / 100)) '2023
    ElseIf impotAvantDecote < 3045 And nbAdultes > 1 Then
    impotFinal = impotAvantDecote - (1307 - (impotAvantDecote * 45.25 / 100)) '2023
    End If
    End Select



    'Cas de calcul d'impôt à 527 euros (impotAvantDecote) pour un adulte: dans ce cas, négatif
    If impotFinal < 0 Then
    impotFinal = 0
    End If

    CalculImpot = impotFinal
    End If

    End Function



    Bonne journée,
    Olivier

    RépondreSupprimer