Test logique d'une fonction si à partir de la condition d'une cellule
Bonjour à toutes et tous,
J'ai beau chercher partout, impossible de trouver une réponse positive, j'ai donc l'impression que cela est impossible. En dernier espoir, je vous sollicite.
Je m'explique : j'aimerais créer un fichier général sans passer par des MACROS (si possible) où on utilise des conditions si(). Cependant, ce fichier allant servir pour différentes situation, j'aimerais avoir une trame commune et pouvoir l'utiliser sans avoir à modifier la formule de la colonne J. Cette dernière serait pilotée par toutes les autres colonnes.
C'est à dire que j'ai des conditions d'atteinte ou non d'une note : <= / < / = / >= / >. Celles-ci sont renseignées en colonne D et F avec la valeur de la condition en E et G. Tout ceci est comparé à la note attribuée en H. La colonne résultat J vérifie donc que les conditions soient respectées et attribue la note "coeff" en I
Cependant mon fichier comporte des dizaines et dizaines de lignes et d'un site à un autre, les conditions et valeurs changeront. Pour éviter de devoir créer autant de fichier que de sites, j'aimerais l'automatiser de sortes à ce que la formule SI() lise la conditions des colonnes D et F, ce qui nous amènerait à quelques choses dans l'idée comme ce que j'essaie en vain :
=SI( [@Note] [@[ condition1]] [@Atteint] ; [@Coeff] ; SI( [@Note] [@condition2] [@[Non atteint]] ; 0 ; 0 ))
au lieu de ça actuellement en version "manuel" =SI( [@Note] >= [@Atteint] ; [@Coeff] ; SI( [@Note] < [@[Non atteint]] ; 0 ; 0 ))
| Thème | SLA | Fréquence | condition1 | Atteint | condition2 | Non atteint | Note | Coeff | Résultat |
|---|---|---|---|---|---|---|---|---|---|
| A | B | C | D | E | F | G | H | I | J |
| QUALITE | Réalisation des autocontrôles | Mensuelle | >= | 2 | < | 2 | 4 | 7,0% | 7,0% |
| QUALITE | Réalisation des contrôles croisés | Mensuelle | >= | 1 | < | 1 | 0 | 10,0% | 0,0% |
| SECURITE | Absence d'Accident du travail | Quotidienne | = | 0 | >= | 1 | 0 | 4,0% | 4,0% |
Bien évidemment, si je vous sollicite, c'est que ma formule ne fonctionne pas, et il semble que dans un SI(), le test logique doit obligatoirement être écrit et ne peut être référé à une cellule comme je le souhaite.
Auriez vous quelques idées svp ?
Merci beaucoup à tous par avance !
bonjour,
via une formule, il faut tester l'opérateur de comparaison et effectuer la comparaison en conséquence, sinon passer via VBA.
dans l'exemple donné, la deuxième condition n'est pas nécessaire, car elle sera fausse si la première est vraie et réciproquement.
avec fonction vba (eval = application.evaluate)
bonjour h2so4,
Merci beaucoup pour cette réponse qui fonctionne et surtout votre réactivité. Il est vrai que dans l'exemple mes 2 conditions ne sont pas nécessaires.
Cependant, j'oubliais de préciser et on ne le voit pas dans mon exemple mais il se peut que les 2 conditions soit utiles de sortes à ce que la note soit : atteinte / partiellement atteinte (ex 50%) : non atteinte.
L'exemple ci-après résume le besoin. Nous avons la totalité de la note si remplacement sous 24H // 50% de la note si entre 24H et 48H // et 0 si strictement supp à 48H. Donc j'ai bien besoin des 2 conditions. Mon exemple précédent n'était pas représentatif, veuillez m'excuser.
Et la je vous avoue que même en essayant de retravailler les formules, je me perds dans les "si"
| Thème | SLA | Fréquence | condition1 | Atteint | condition2 | Non atteint | Note | Coeff | Résultat |
|---|---|---|---|---|---|---|---|---|---|
RH | Maitrise des remplacements (absence non comblée) | Quotidienne | <= | 24H | > | 48H | 36H | 4,0% | 2,0% |
Je rajouterai que j'utilise des décimales car je tente depuis tout à l'heure, j'ai trouvé quelque chose qui fonctionne mais uniquement :
- avec les entiers
- avec les décimaux avec des "." et non des virgules comme en Français
Si je mets un "%" comme par exemple supérieur à "95%" la formule eval ne fonctionne plus et me renvoie un "#VALEUR! ..
La formule que j'avais trouvé
=SI(eval([@Note]&[@[ t2]]&[@[Non atteint]]);0;SI(eval([@Note]&[@t1]&[@Atteint]);[@Coeff];0,5*[@Coeff]))
bonjour,
une adaptation du code pour gérer les virgules décimales.
les pourcentages fonctionnent pourtant chez moi.
Bonjour,
un grand merci pour votre réponse et votre aide !! J'ai enfin ma solution et mon fichier 100% fonctionnel.