INDEX & EQUIV Avec Plages nommées

 

INDEX & EQUIV

📌 Exemple la formule d’ancienneté :

Cette formule permet de déterminer le taux d’indemnité ou prime en fonction du nombre d’années d’ancienneté saisi dans la cellule E4.

🔍 Détail étape par étape :

  1. E4 : contient le nombre d’années d’ancienneté du salarié.

  2. 'Base de calcule'!$AJ$3:$AJ$8 : plage contenant les années MINIMUM par palier.

  3. 'Base de calcule'!$AK$3:$AK$8 : plage contenant les années MAXIMUM par palier.

  4. 'Base de calcule'!$AL$3:$AL$8 : plage contenant le taux correspondant à chaque intervalle d’ancienneté.

🧠 Que fait la formule ?

  • Elle vérifie si l’ancienneté (E4) est supérieure à 0.

  • Ensuite, elle cherche le bon intervalle dans lequel se trouve E4 :

Formule
=SIERREUR(SI(E4>0;INDEX('Base de calcule'!$AL$3:$AL$8;EQUIV(1;(E4>='Base de calcule'!$AJ$3:$AJ$8)*(E4<'Base de calcule'!$AK$3:$AK$8);0));"");"")

Cette formule compare l’ancienneté à chaque plage (min ≤ E4 ≤ max), puis retourne la position du bon palier.

Ensuite, elle utilise INDEX(...; ...) pour récupérer le taux correspondant dans la colonne $AL$3:$AL$8.

Finalement, SIERREUR(...) est là pour éviter une erreur si l’ancienneté ne correspond à aucun palier (dans ce cas, elle renvoie vide " ").

📌 Pourquoi la cellule E4 change et les autres restent figées ?

E4 est une cellule relative.

👉 Quand on tire la formule vers le bas, Excel la change automatiquement en E5, E6, etc. pour s’adapter à chaque ligne du tableau.

'Base de calcule'!$AJ$3:$AJ$8, $AK$3:$AK$8 et $AL$3:$AL$8 sont des cellules absolues, grâce au signe $.

👉 Cela signifie qu’elles ne changent jamais, même si on copie ou tire la formule vers une autre cellule. C’est important car ces plages contiennent les données de référence (les intervalles et les taux), qui restent toujours les mêmes pour tous les salariés.

📌 Explication de la formule des indemnités non imposable IR & CNSS :

dans cette formule aussi  je vais utiliser $ pour figer les plage mais après on va utiliser les Plages nommées c'est plus pratique



Formule
=SI(F4="";0;
SI(ET(F4<>"";
            INDEX('Base de calcule'!$AE$2:$AE$11; EQUIV(F4; 'Base de calcule'!$AA$2:$AA$11; 0))="FAUX";
           INDEX('Base de calcule'!$AG$2:$AG$11; EQUIV(F4; 'Base de calcule'!$AA$2:$AA$11; 0))="NULL";
            INDEX('Base de calcule'!$AB$2:$AB$11; EQUIV(F4; 'Base de calcule'!$AA$2:$AA$11; 0))="FAUX";
            INDEX('Base de calcule'!$AD$2:$AD$11; EQUIV(F4; 'Base de calcule'!$AA$2:$AA$11; 0))="NULL"); G4
;0)) +
SI(H4="";0; SI(ET(H4<>""; INDEX('Base de calcule'!$AE$2:$AE$11; EQUIV(H4; 'Base de calcule'!$AA$2:$AA$11; 0))="FAUX"; INDEX('Base de calcule'!$AG$2:$AG$11; EQUIV(H4; 'Base de calcule'!$AA$2:$AA$11; 0))="NULL"; INDEX('Base de calcule'!$AB$2:$AB$11; EQUIV(H4; 'Base de calcule'!$AA$2:$AA$11; 0))="FAUX"; INDEX('Base de calcule'!$AD$2:$AD$11; EQUIV(H4; 'Base de calcule'!$AA$2:$AA$11; 0))="NULL"); I4;0)) +
SI(J4="";0; SI(ET(J4<>""; INDEX('Base de calcule'!$AE$2:$AE$11; EQUIV(J4; 'Base de calcule'!$AA$2:$AA$11; 0))="FAUX"; INDEX('Base de calcule'!$AG$2:$AG$11; EQUIV(J4; 'Base de calcule'!$AA$2:$AA$11; 0))="NULL"; INDEX('Base de calcule'!$AB$2:$AB$11; EQUIV(J4; 'Base de calcule'!$AA$2:$AA$11; 0))="FAUX"; INDEX('Base de calcule'!$AD$2:$AD$11; EQUIV(J4; 'Base de calcule'!$AA$2:$AA$11; 0))="NULL"); K4;0)) +
SI(L4="";0; SI(ET(L4<>""; INDEX('Base de calcule'!$AE$2:$AE$11; EQUIV(L4; 'Base de calcule'!$AA$2:$AA$11; 0))="FAUX"; INDEX('Base de calcule'!$AG$2:$AG$11; EQUIV(L4; 'Base de calcule'!$AA$2:$AA$11; 0))="NULL"; INDEX('Base de calcule'!$AB$2:$AB$11; EQUIV(L4; 'Base de calcule'!$AA$2:$AA$11; 0))="FAUX"; INDEX('Base de calcule'!$AD$2:$AD$11; EQUIV(L4; 'Base de calcule'!$AA$2:$AA$11; 0))="NULL"); M4;0)) +
SI(N4="";0; SI(ET(N4<>""; INDEX('Base de calcule'!$AE$2:$AE$11; EQUIV(N4; 'Base de calcule'!$AA$2:$AA$11; 0))="FAUX"; INDEX('Base de calcule'!$AG$2:$AG$11; EQUIV(N4; 'Base de calcule'!$AA$2:$AA$11; 0))="NULL"; INDEX('Base de calcule'!$AB$2:$AB$11; EQUIV(N4; 'Base de calcule'!$AA$2:$AA$11; 0))="FAUX"; INDEX('Base de calcule'!$AD$2:$AD$11; EQUIV(N4; 'Base de calcule'!$AA$2:$AA$11; 0))="NULL"); O4;0)) +
SI(P4="";0; SI(ET(P4<>""; INDEX('Base de calcule'!$AE$2:$AE$11; EQUIV(P4; 'Base de calcule'!$AA$2:$AA$11; 0))="FAUX"; INDEX('Base de calcule'!$AG$2:$AG$11; EQUIV(P4; 'Base de calcule'!$AA$2:$AA$11; 0))="NULL"; INDEX('Base de calcule'!$AB$2:$AB$11; EQUIV(P4; 'Base de calcule'!$AA$2:$AA$11; 0))="FAUX"; INDEX('Base de calcule'!$AD$2:$AD$11; EQUIV(P4; 'Base de calcule'!$AA$2:$AA$11; 0))="NULL"); Q4;0))
📌 But de cette formule : 
je veux additionner plusieurs indemnités (dans G4, I4, K4, M4, O4, Q4) seulement si elles répondent à certaines conditions, notamment si elles ne sont pas imposables (non imposables, non soumises à cotisation, etc.). 
📋 Structure générale : 

Pour chaque ligne (par exemple F4 et G4) : SI(F4="";0; SI(ET(...conditions...); G4; 0) ) 
  • Si la cellule F4 est vide → on met 0 
  • Sinon, on vérifie plusieurs conditions dans la feuille 'Base de calcule', en fonction du code de l’indemnité (F4). 
  •  Si toutes les conditions sont vraies, on prend la valeur de G4 (le montant de l’indemnité). 
  •  Sinon, on prend 0. 
 je fais ça pour : 
 F4 et G4 
 H4 et I4 
 J4 et K4 
 L4 et M4 
 N4 et O4 
 P4 et Q4 
 Puis j'additionnes tous les montants qui respectent les critères. 
🧠 Les conditions vérifiées dans 'Base de calcule' : 
Pour chaque indemnité, on cherche sa ligne dans la table 'Base de calcule'!$AA$2:$AA$11, et on vérifie : 
Colonne dans 'Base de calcule'             Ce que ça vérifie 
$AE$2:$AE$11                                     Si imposable IR = FAUX 
$AG$2:$AG$11                                    Si soumis à un plafond IR = NULL 
$AB$2:$AB$11                                    Si soumis à CNSS = FAUX 
$AD$2:$AD$11                                   Si soumis à un plafond CNSS = NULL 
Donc, pour qu’une indemnité soit considérée non imposable, il faut : 
  •  qu’elle ne soit pas imposable 
  •  pas soumise à abattement 
  •  pas soumise à CNSS 
  •  et pas soumise à une autre cotisation (ou champ vide)


📌 Explication des la formule Plages nommées

Plages nommées utilisées dans le fichier

Les plages nommées ci-dessous ont été créées à partir de la feuille "Base de calcul", pour faciliter les recherches par fonction EQUIV et INDEX dans les formules de calcul des indemnités :



Nom de la plage
Plage Excel Contenu / Rôle
nom_PRIME_Indemnité 'Base de calcule'!$AA$2:$AA$20 Liste des noms des primes/indemnités
imposable_CNSS 'Base de calcule'!$AB$2:$AB$20 Indique si la prime est soumise à la CNSS (VRAI / FAUX)
imposable_Taux 'Base de calcule'!$AC$2:$AC$20 Taux applicable CNSS si soumis
imposable_CNSS_plafond 'Base de calcule'!$AD$2:$AD$20 Plafond de soumission CNSS le cas échéant
imposable_IR 'Base de calcule'!$AE$2:$AE$20 Indique si la prime est soumise à l’IR (VRAI / FAUX)
imposable_IR_Taux 'Base de calcule'!$AF$2:$AF$20 Taux applicable IR si imposable
imposable_IR_plafond 'Base de calcule'!$AG$2:$AG$20 Plafond d’exonération IR si existant (ex : 20% du salaire brut)
appliquer_abatement_IR 'Base de calcule'!$AH$2:$AH$20 Indique si un abattement pour frais professionnels doit être appliqué

🔧 Comment ces plages ont été créées ?

  1. Aller dans Formules > Gestionnaire de noms.

  2. Cliquer sur Nouveau.

  3. Donner un nom clair (ex : imposable_IR).

  4. Dans Fait référence à :, sélectionner la plage voulue (ex : 'Base de calcule'!$AE$2:$AE$20).

  5. Répéter l’opération pour chaque plage.


✅ Avantage

L’utilisation des plages nommées permet d’avoir :

  • des formules plus lisibles et compréhensibles

  • une meilleure organisation des données

  • une facilité de mise à jour des paramètres en un seul endroit



    📌 Explication de la formule des Indemnité imposable soumis à l'abattement de FRAIS PROFESSIONEL :

    Formule
    =SI(F4="";0;
      SI(ET(F4<>""; INDEX(imposable_IR; EQUIV(F4; nom_PRIME_Indemnité; 0))="FAUX"; INDEX(imposable_IR_plafond; EQUIV(F4; nom_PRIME_Indemnité; 0))="NULL"); 0;
        SI(ET(F4<>""; INDEX(imposable_IR; EQUIV(F4; nom_PRIME_Indemnité; 0))="VRAI"; INDEX(appliquer_abatement_IR; EQUIV(F4; nom_PRIME_Indemnité; 0))="VRAI";
           INDEX(imposable_IR_plafond; EQUIV(F4; nom_PRIME_Indemnité; 0))="NULL"); G4;
          SI(ET(F4<>""; INDEX(imposable_IR; EQUIV(F4; nom_PRIME_Indemnité; 0))="VRAI"; INDEX(appliquer_abatement_IR; EQUIV(F4; nom_PRIME_Indemnité; 0))="FAUX";
           INDEX(imposable_IR_plafond; EQUIV(F4; nom_PRIME_Indemnité; 0))="NULL"); 0;
          SI(ET(F4<>""; INDEX(imposable_IR; EQUIV(F4; nom_PRIME_Indemnité; 0))="FAUX"; INDEX(imposable_IR_plafond; EQUIV(F4; nom_PRIME_Indemnité; 0))>0;
            INDEX(appliquer_abatement_IR; EQUIV(F4; nom_PRIME_Indemnité; 0))="VRAI";G4>$D4*INDEX(imposable_IR_plafond; EQUIV(F4; nom_PRIME_Indemnité; 0)));
            G4-$D4*INDEX(imposable_IR_plafond; EQUIV(F4; nom_PRIME_Indemnité; 0));
            0))))) +

    SI(H4="";0;
      SI(ET(H4<>""; INDEX(imposable_IR; EQUIV(H4; nom_PRIME_Indemnité; 0))="FAUX"; INDEX(imposable_IR_plafond; EQUIV(H4; nom_PRIME_Indemnité; 0))="NULL"); 0;
        SI(ET(H4<>""; INDEX(imposable_IR; EQUIV(H4; nom_PRIME_Indemnité; 0))="VRAI"; INDEX(appliquer_abatement_IR; EQUIV(H4; nom_PRIME_Indemnité; 0))="VRAI";
         INDEX(imposable_IR_plafond; EQUIV(H4; nom_PRIME_Indemnité; 0))="NULL"); I4;
         SI(ET(H4<>""; INDEX(imposable_IR; EQUIV(H4; nom_PRIME_Indemnité; 0))="VRAI"; INDEX(appliquer_abatement_IR; EQUIV(H4; nom_PRIME_Indemnité; 0))="FAUX";
           INDEX(imposable_IR_plafond; EQUIV(H4; nom_PRIME_Indemnité; 0))="NULL"); 0;
          SI(ET(H4<>""; INDEX(imposable_IR; EQUIV(H4; nom_PRIME_Indemnité; 0))="FAUX"; INDEX(imposable_IR_plafond; EQUIV(H4; nom_PRIME_Indemnité; 0))>0; INDEX(appliquer_abatement_IR; EQUIV(H4; nom_PRIME_Indemnité; 0))="VRAI";I4>$D4*INDEX(imposable_IR_plafond; EQUIV(H4; nom_PRIME_Indemnité; 0)));
            I4-$D4*INDEX(imposable_IR_plafond; EQUIV(H4; nom_PRIME_Indemnité; 0));
            0))))) +

    SI(J4="";0;
      SI(ET(J4<>""; INDEX(imposable_IR; EQUIV(J4; nom_PRIME_Indemnité; 0))="FAUX"; INDEX(imposable_IR_plafond; EQUIV(J4; nom_PRIME_Indemnité; 0))="NULL"); 0;
        SI(ET(J4<>""; INDEX(imposable_IR; EQUIV(J4; nom_PRIME_Indemnité; 0))="VRAI"; INDEX(appliquer_abatement_IR; EQUIV(J4; nom_PRIME_Indemnité; 0))="VRAI";
      INDEX(imposable_IR_plafond; EQUIV(J4; nom_PRIME_Indemnité; 0))="NULL"); K4;
    SI(ET(J4<>""; INDEX(imposable_IR; EQUIV(J4; nom_PRIME_Indemnité; 0))="VRAI"; INDEX(appliquer_abatement_IR; EQUIV(J4; nom_PRIME_Indemnité; 0))="FAUX";
           INDEX(imposable_IR_plafond; EQUIV(J4; nom_PRIME_Indemnité; 0))="NULL"); 0;
          SI(ET(J4<>""; INDEX(imposable_IR; EQUIV(J4; nom_PRIME_Indemnité; 0))="FAUX"; INDEX(imposable_IR_plafond; EQUIV(J4; nom_PRIME_Indemnité; 0))>0; INDEX(appliquer_abatement_IR; EQUIV(J4; nom_PRIME_Indemnité; 0))="VRAI"; K4>$D4*INDEX(imposable_IR_plafond; EQUIV(J4; nom_PRIME_Indemnité; 0)));
            K4-$D4*INDEX(imposable_IR_plafond; EQUIV(J4; nom_PRIME_Indemnité; 0));
            0)))) +

    SI(L4="";0;
      SI(ET(L4<>""; INDEX(imposable_IR; EQUIV(L4; nom_PRIME_Indemnité; 0))="FAUX"; INDEX(imposable_IR_plafond; EQUIV(L4; nom_PRIME_Indemnité; 0))="NULL"); 0;
        SI(ET(L4<>""; INDEX(imposable_IR; EQUIV(L4; nom_PRIME_Indemnité; 0))="VRAI";  INDEX(appliquer_abatement_IR; EQUIV(L4; nom_PRIME_Indemnité; 0))="VRAI";
         INDEX(imposable_IR_plafond; EQUIV(L4; nom_PRIME_Indemnité; 0))="NULL"); M4;
         SI(ET(L4<>""; INDEX(imposable_IR; EQUIV(L4; nom_PRIME_Indemnité; 0))="VRAI"; INDEX(appliquer_abatement_IR; EQUIV(L4; nom_PRIME_Indemnité; 0))="FAUX";
           INDEX(imposable_IR_plafond; EQUIV(L4; nom_PRIME_Indemnité; 0))="NULL"); 0;
          SI(ET(L4<>""; INDEX(imposable_IR; EQUIV(L4; nom_PRIME_Indemnité; 0))="FAUX"; INDEX(imposable_IR_plafond; EQUIV(L4; nom_PRIME_Indemnité; 0))>0; INDEX(appliquer_abatement_IR; EQUIV(L4; nom_PRIME_Indemnité; 0))="VRAI"; M4>$D4*INDEX(imposable_IR_plafond; EQUIV(L4; nom_PRIME_Indemnité; 0)));
            M4-$D4*INDEX(imposable_IR_plafond; EQUIV(L4; nom_PRIME_Indemnité; 0));
            0))))) +

    SI(N4="";0;
      SI(ET(N4<>""; INDEX(imposable_IR; EQUIV(N4; nom_PRIME_Indemnité; 0))="FAUX"; INDEX(imposable_IR_plafond; EQUIV(N4; nom_PRIME_Indemnité; 0))="NULL"); 0;
        SI(ET(N4<>""; INDEX(imposable_IR; EQUIV(N4; nom_PRIME_Indemnité; 0))="VRAI";  INDEX(appliquer_abatement_IR; EQUIV(N4; nom_PRIME_Indemnité; 0))="VRAI";
         INDEX(imposable_IR_plafond; EQUIV(N4; nom_PRIME_Indemnité; 0))="NULL"); O4;
    SI(ET(N4<>""; INDEX(imposable_IR; EQUIV(N4; nom_PRIME_Indemnité; 0))="VRAI"; INDEX(appliquer_abatement_IR; EQUIV(N4; nom_PRIME_Indemnité; 0))="FAUX";
           INDEX(imposable_IR_plafond; EQUIV(N4; nom_PRIME_Indemnité; 0))="NULL"); 0;
          SI(ET(N4<>""; INDEX(imposable_IR; EQUIV(N4; nom_PRIME_Indemnité; 0))="FAUX"; INDEX(imposable_IR_plafond; EQUIV(N4; nom_PRIME_Indemnité; 0))>0; INDEX(appliquer_abatement_IR; EQUIV(N4; nom_PRIME_Indemnité; 0))="VRAI"; O4>$D4*INDEX(imposable_IR_plafond; EQUIV(N4; nom_PRIME_Indemnité; 0)));
            O4-$D4*INDEX(imposable_IR_plafond; EQUIV(N4; nom_PRIME_Indemnité; 0));
            0))))) +

    SI(P4="";0;
      SI(ET(P4<>""; INDEX(imposable_IR; EQUIV(P4; nom_PRIME_Indemnité; 0))="FAUX"; INDEX(imposable_IR_plafond; EQUIV(P4; nom_PRIME_Indemnité; 0))="NULL"); 0;
        SI(ET(P4<>""; INDEX(imposable_IR; EQUIV(P4; nom_PRIME_Indemnité; 0))="VRAI";  INDEX(appliquer_abatement_IR; EQUIV(P4; nom_PRIME_Indemnité; 0))="VRAI";
    INDEX(imposable_IR_plafond; EQUIV(P4; nom_PRIME_Indemnité; 0))="NULL"); Q4;
    SI(ET(P4<>""; INDEX(imposable_IR; EQUIV(P4; nom_PRIME_Indemnité; 0))="VRAI"; INDEX(appliquer_abatement_IR; EQUIV(P4; nom_PRIME_Indemnité; 0))="FAUX";
           INDEX(imposable_IR_plafond; EQUIV(P4; nom_PRIME_Indemnité; 0))="NULL"); 0;
          SI(ET(P4<>""; INDEX(imposable_IR; EQUIV(P4; nom_PRIME_Indemnité; 0))="FAUX"; INDEX(imposable_IR_plafond; EQUIV(P4; nom_PRIME_Indemnité; 0))>0; INDEX(appliquer_abatement_IR; EQUIV(P4; nom_PRIME_Indemnité; 0))="VRAI"; Q4>$D4*INDEX(imposable_IR_plafond; EQUIV(P4; nom_PRIME_Indemnité; 0)));
            Q4-$D4*INDEX(imposable_IR_plafond; EQUIV(P4; nom_PRIME_Indemnité; 0));
            0))))))

    📌 But de cette formule :
     
    Voici une explication détaillée de cette formule complexe : elle sert à déterminer la part imposable d'une indemnité, en tenant compte de plusieurs paramètres définis dans une feuille de paramétrage, notamment :
    • Si l’indemnité est imposable ou non (imposable_IR)

    • Si elle est soumise à l’abattement (appliquer_abatement_IR)

    • S’il existe un plafond d’exonération (imposable_IR_plafond)


    🔍 Principe général :

    Pour chaque cellule F4, H4, J4, L4, N4, P4 (les noms des indemnités) et leur montant correspondant G4, I4, K4, M4, O4, Q4, la formule :

    1. Ignore la ligne si la cellule est vide

    2. Teste plusieurs conditions pour décider si la prime est imposable et si un abattement s’applique

    3. Applique le traitement correspondant :

      • Si non imposable et pas de plafond → montant non imposable → 0

      • Si imposable et abattement autorisé et pas de plafond → montant intégralement imposable

      • Si imposable mais abattement non autorisé et pas de plafond → montant non imposable → 0

      • Si non imposable mais avec plafond et montant > plafond → seule la part dépassant le plafond est imposable

      • Sinon → 0


    🧠 Exemple pour F4/G4 :

    excel

    SI(F4="";0; SI(ET(...); 0; SI(ET(...); G4; SI(ET(...); 0; SI(ET(...); G4 - plafond; 0 ) ) ) ) )
    • F4 = nom de l'indemnité

    • G4 = montant

    • $D4 = Salaire brut (ou base pour appliquer le % de plafond)

    Le INDEX(...;EQUIV(F4;...)) va chercher, dans la base de données (nom_PRIME_Indemnité), les valeurs correspondantes à cette indemnité.


    Voici une explication claire et pratique de la combinaison INDEX et EQUIV utilisée dans la formule Excel :

    🧩 1. Fonction EQUIV : rechercher la position

    excel

    EQUIV(F4; nom_PRIME_Indemnité; 0)
    • F4 contient le nom de la prime ou indemnité (ex : "Indemnité de transport")

    • nom_PRIME_Indemnité est une plage verticale qui contient tous les noms des primes (dans une table de paramètres)

    • 0 signifie recherche exacte

    👉 Résultat : position de F4 dans la colonne des noms de primes.

    Exemple : Si F4 = "Indemnité de transport" et qu’elle est en 3e ligne de la liste → EQUIV(...) retourne 3


    📦 2. Fonction INDEX : récupérer la valeur

    excel

    INDEX(imposable_IR; EQUIV(F4; nom_PRIME_Indemnité; 0))
    • imposable_IR est une colonne parallèle contenant "VRAI" ou "FAUX" pour dire si la prime est imposable

    • INDEX(...) va chercher la valeur sur la même ligne que celle trouvée avec EQUIV

    👉 Résultat : "VRAI" ou "FAUX" selon la prime


    🔄 Résumé simple de cette combinaison


    Élément Signification
    EQUIV(F4; liste; 0)                         Trouve la ligne dans la liste
    INDEX(colonne; ligne)                     Va chercher la valeur dans une autre colonne (même ligne)

    Donc quand tu écris :

    excel

    INDEX(imposable_IR; EQUIV(F4; nom_PRIME_Indemnité; 0))

    Tu dis à Excel :

    "Va me chercher dans la colonne imposable_IR, la valeur qui correspond à la prime écrite dans F4."

    Commentaires

    Posts les plus consultés de ce blog

    🛠 Utilisation de CustomUIEditor pour Personnaliser le Ruban Excel

    🗓️ Simulateur de Congés et Calendrier Collaboratif sous Google Sheets

    Explication VBA : Facturation automatique Gestion client