Rapport de message :*
 

Re: calcul d'etat d'engagement (fiche de paie)

Titre du sujet : Re: calcul d'etat d'engagement (fiche de paie)
par JeanMarie le 13/06/2010 13:49:19


Bonjour Levaso, Didier, le forum

Déjà l'état d'urgence n'a pas cours sur ce forum.J'aurais pû balancé ma proposition sans aucun commentaire.

J'étais comme Didier, je me suis demander pour tu avais besoin du VBA dans ton projet.Ton dernier post à éclairer ma lanterne.

La limite de l'imbrication des SI dans une formule n'est pas une cause à l'utilisation du VBA.
Il existe plusieurs solutions pour supprimer cette limitation :
      - Cumuler des SI
      - Utiliser plusieurs cellules
      - Recourrir à l'utilisation d'un tableau intermédiaire

Le cumuler des SI :
Le principe dans la formule est d'utiliser deux comparateurs par la fonction ET

Citation :
Aide d'excel sur la fonction -> Renvoie VRAI si tous les arguments sont VRAI ; renvoie FAUX si au moins l'un des arguments est FAUX


La structure de la formule devient :
=SI(ET(...>0;...<50000);...;0)+SI(ET(...>50000;...<60000);...;0)+etc
Dans ton cas, l'adaptation de se principe, ferait dépasser la limite dans la longueur de la formule, il faut la simplifier.

En examinant la formule, tu as des parties qui se répètent aussi bien dans le comparateur et dans le calcul de la valeur à retourner.
Il s'agit de cette partie Citation :
H22-H16-H15-((H22-H16-H15)*20%)-((H25+H26+H32+H33+H34)*12)
si tu la places dans une cellule, et la reprend dans la formule globale tu diminues le nombre de caractères, pas sa complexité.
En l'imaginant dans la cellule AA1.
La formule globale s'apparentera à 
=SI(ET(AA1>0;AA1<50000);...;0)+SI(ET(AA1=>50000;AA1<60000);...;0)+etc
Tu peux continuer l'analyse sur la partie du calcul de la valeur
(((AA1-30000)*10%)-((H4+1)*360))/12
(((AA1-50000)*20%)+2000-((H4+1)*360))/12
(((AA1-60000)*30%)+4000-((H4+1)*360))/12
(((AA1-80000)*34%+10000)-((H4+1)*360))/12
Entre ces quatre formules, on peut constater qu'il y a une même structure dans le calcul. La encore il y a des parties identiques et des parties variables.
[Quote](((AA1-Abattement)*Pourcentage)+Abattement-((H4+1)*360))/12[/quote]
Cette seule partie dans une formule permettrait à calculer la valeur, mais on doit y donner trois données variables.
En utilisant la solution d'un tableau intermédiaire, on simplifie la formule, et on améliore l'évolution dans les années futures, 

Dans le fichier joint, 
La formule de la colonne U, détermine quelle est la ligne à prendre en compte
=SI((AA$1>=V1)*(AA$1);LIGNE();0)
LIGNE() retourne le numéro de la ligne de la cellule qui la contient.Si tu as suivi mes explications tu dois comprendre les comparateurs.

Pour les formules de la colonne AA à base de fonction INDEX retournent les trois paramètres concernés par la valeur de la cellule AA1.
=INDEX(W:W;MAX(U:U);0)
=INDEX(X:X;MAX(U:U);0)
=INDEX(Y:Y;MAX(U:U);0)
INDEX retourne la valeur qui se trouve dans la colonne W ou X ou Y au n° de la ligne de la tranche

Bonne journée

@+Jean-Marie