[Résolu] Condition avec référence à cellules avec + ou -

Discussions à propos du tableur Calc.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est uniquement dédiée au tableur Calc. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
SmPNRM
NOOuvel adepte
NOOuvel adepte
Messages : 13
Inscription : 15 sept. 2020 12:05

[Résolu] Condition avec référence à cellules avec + ou -

Message par SmPNRM »

Bonjour à tous,

J'ai fait un petit script sous Excel pour obtenir selon la valeur d'un paramètre une qualification de son état (avec une échelle par paramètre), comme suit :

Code : Tout sélectionner

=SI(U2="O2 dissous"
;SI(R2>=8;"Tres bon"
;SI(ET(R2>=8;R2<6);"Bon"
;SI(ET(R2>=6;R2<4);"Moyen"
;SI(ET(R2>=4;R2<3);"Mediocre"
;"Mauvais"))))
;SI(U2="SATUR.O2"
;SI(R2>=90;"Tres bon"
;SI(ET(R2>=70;R2<90);"Bon"
;SI(ET(R2>=50;R2<70);"Moyen"
;SI(ET(R2>=30;R2<50);"Mediocre"
;"Mauvais"))))
;SI(U2="DBO5"
;SI(R2<=3;"Tres bon"
;SI(ET(R2>3;R2<=6);"Bon"
;SI(ET(R2>6;R2<=10);"Moyen"
;SI(ET(R2>10;R2<=25);"Mediocre"
;"Mauvais"))))
;SI(U2="C Orga"
;SI(R2<=5;"Tres bon"
;SI(ET(R2>5;R2<=7);"Bon"
;SI(ET(R2>7;R2<=10);"Moyen"
;SI(ET(R2>10;R2<=15);"Mediocre"
;"Mauvais"))))
;SI(U2="Temp. Eau"
;SI(R2<=20;"Tres bon"
;SI(ET(R2>20;R2<=21,5);"Bon"
;SI(ET(R2>21,5;R2<=25);"Moyen"
;SI(ET(R2>25;R2<=28);"Mediocre"
;"Mauvais"))))
;SI(U2="Orthophosp"
;SI(R2<=0,1;"Tres bon"
;SI(ET(R2>0,1;R2<=0,5);"Bon"
;SI(ET(R2>0,5;R2<=1);"Moyen"
;SI(ET(R2>1;R2<=2);"Mediocre"
;"Mauvais"))))
;SI(U2="P total"
;SI(R2<=0,05;"Tres bon"
;SI(ET(R2>0,05;R2<=0,2);"Bon"
;SI(ET(R2>0,2;R2<=0,5);"Moyen"
;SI(ET(R2>0,5;R2<=1);"Mediocre"
;"Mauvais"))))
;SI(U2="NH4+"
;SI(R2<=0,1;"Tres bon"
;SI(ET(R2>0,1 ;R2<=0,5;"Bon"
;SI(ET(R2>0,5;R2<=2);"Moyen"
;SI(ET(R2>2;R2<=5);"Mediocre"
;"Mauvais"))))
;SI(U2="pH"
;SI(ET(R2>=6,5;R2<=8,2);"Tres bon"
;SI(OU(ET(R2>=6;R2<6,5);ET(R2>8,2;R2<=9));"Bon"
;SI(OU(ET(R2>=5,5;R2<6);ET(R2>9;R2<=9,5));"Moyen"
;SI(OU(ET(R2>=4,5;R2<5,5);ET(R2>9,5;R2<=10));"Mediocre"
;"Mauvais"))))))))))))
Or si le script ci-dessus fonctionne parfaitement, il ne fonctionne plus dès que je rajoute les lignes suivantes (j'obtiens une Err:501 pour la première ligne et une Err:508 pour les suivantes).

Code : Tout sélectionner

=SI(U2="NH4+"
;SI(R2<=0,1;"Tres bon"
;SI(ET(R2>0,1 ;R2<=0,5;"Bon"
;SI(ET(R2>0,5;R2<=2);"Moyen"
;SI(ET(R2>2;R2<=5);"Mediocre"
;"Mauvais"))))
;SI(U2="NO2-"
;SI(R2<=0,1;"Tres bon"
;SI(ET(R2>0,1 ;R2<=0,3;"Bon"
;SI(ET(R2>0,3;R2<=0,5);"Moyen"
;SI(ET(R2>0,5;R2<=1);"Mediocre"
;"Mauvais"))))
;SI(U2="NO3-"
;SI(R2<=10;"Tres bon"
;SI(ET(R2>10 ;R2<=50;"Bon"
;"Moyen")))))))
J'ai pu remarquer que le problème venait de conditions lorsque je fait référence à un résultat attendu contenant + ou - (NH4+, NO2-, NO3-).
J'ai testé de mettre les cellules de la colonne U en format Texte, puis de convertir la colonne en format Texte via "Texte en colonnes", mais le résultat est le même.
Ne tenant pas à modifier ma base de données, auriez-vous une idée afin de faire fonctionner le script, en faisant référence à ces cellules dont le contenu est NH4+, NO2- et NO3- ?
En vous remerciant d'avance de vos propositions !

A bientôt,
Dernière modification par SmPNRM le 19 oct. 2020 14:29, modifié 1 fois.
LibreOffice 6.4 sur Windows 10
Avatar de l’utilisateur
DLE
SuppOOrter
SuppOOrter
Messages : 1477
Inscription : 30 déc. 2007 18:56
Localisation : Lille

Re: [Calc] Condition avec référence à cellules contenant + o

Message par DLE »

Bonjour,
Il manque des ")" dans les "ET"
SI(ET(R2>0,1 ;R2<=0,5);"Bon"
.
.
SI(ET(R2>0,1 ;R2<=0,3);"Bon"
.
.
SI(ET(R2>10 ;R2<=50);"Bon"

En fin de ligne il reste six ")"
Cdlt.
MacOS Sonoma 14.4.1 (iMac-Intel) : AOO 4.1.15 , LibreOffice 7.6.5.2, Adoptium-temurinJDK_1.8.0_402 -
Windows 10 64 bits :
AOO 4.1.15, Libreoffice 7.1.8.1 - FireFox, Thunderbird, ORB 1.2.1
SmPNRM
NOOuvel adepte
NOOuvel adepte
Messages : 13
Inscription : 15 sept. 2020 12:05

Re: [Calc] Condition avec référence à cellules contenant + o

Message par SmPNRM »

J'ai fait un petit script sous Excel
N'importe quoi...
Je suis désolé pour cette phrase automatique, je travaille bien sous LibreOffice et il s'agit d'une formule.

Ce n'était donc pas une question de + ou de - mais de parenthèses (merci DLE !)

Voici la formule complète qui fonctionne :

Code : Tout sélectionner

=SI(U2="O2 dissous"
;SI(R2>=8;"Tres bon"
;SI(ET(R2>=8;R2<6);"Bon"
;SI(ET(R2>=6;R2<4);"Moyen"
;SI(ET(R2>=4;R2<3);"Mediocre"
;"Mauvais"))))
;SI(U2="SATUR.O2"
;SI(R2>=90;"Tres bon"
;SI(ET(R2>=70;R2<90);"Bon"
;SI(ET(R2>=50;R2<70);"Moyen"
;SI(ET(R2>=30;R2<50);"Mediocre"
;"Mauvais"))))
;SI(U2="DBO5"
;SI(R2<=3;"Tres bon"
;SI(ET(R2>3;R2<=6);"Bon"
;SI(ET(R2>6;R2<=10);"Moyen"
;SI(ET(R2>10;R2<=25);"Mediocre"
;"Mauvais"))))
;SI(U2="C Orga"
;SI(R2<=5;"Tres bon"
;SI(ET(R2>5;R2<=7);"Bon"
;SI(ET(R2>7;R2<=10);"Moyen"
;SI(ET(R2>10;R2<=15);"Mediocre"
;"Mauvais"))))
;SI(U2="Temp. eau"
;SI(R2<=20;"Tres bon"
;SI(ET(R2>20;R2<=21,5);"Bon"
;SI(ET(R2>21,5;R2<=25);"Moyen"
;SI(ET(R2>25;R2<=28);"Mediocre"
;"Mauvais"))))
;SI(U2="Orthophosp"
;SI(R2<=0,1;"Tres bon"
;SI(ET(R2>0,1;R2<=0,5);"Bon"
;SI(ET(R2>0,5;R2<=1);"Moyen"
;SI(ET(R2>1;R2<=2);"Mediocre"
;"Mauvais"))))
;SI(U2="P total"
;SI(R2<=0,05;"Tres bon"
;SI(ET(R2>0,05;R2<=0,2);"Bon"
;SI(ET(R2>0,2;R2<=0,5);"Moyen"
;SI(ET(R2>0,5;R2<=1);"Mediocre"
;"Mauvais"))))
;SI(U2="NH4+"
;SI(R2<=0,1;"Tres bon"
;SI(ET(R2>0,1;R2<=0,5);"Bon"
;SI(ET(R2>0,5;R2<=2);"Moyen"
;SI(ET(R2>2;R2<=5);"Mediocre"
;"Mauvais"))))
;SI(U2="NO2-"
;SI(R2<=0,1;"Tres bon"
;SI(ET(R2>0,1;R2<=0,3);"Bon"
;SI(ET(R2>0,3;R2<=0,5);"Moyen"
;SI(ET(R2>0,5;R2<=1);"Mediocre"
;"Mauvais"))))
;SI(U2="NO3-"
;SI(R2<=10;"Tres bon"
;SI(ET(R2>10;R2<=50);"Bon"
;"Moyen"))
;SI(U2="pH"
;SI(ET(R2>=6,5;R2<=8,2);"Tres bon"
;SI(OU(ET(R2>=6;R2<6,5);ET(R2>8,2;R2<=9));"Bon"
;SI(OU(ET(R2>=5,5;R2<6);ET(R2>9;R2<=9,5));"Moyen"
;SI(OU(ET(R2>=4,5;R2<5,5);ET(R2>9,5;R2<=10));"Mediocre"
;"Mauvais"))))
)))))))))))
Merci beaucoup et à bientôt !
LibreOffice 6.4 sur Windows 10
Jeff
GourOOu
GourOOu
Messages : 9629
Inscription : 18 sept. 2006 09:40
Localisation : France

Re: [Résolu] Condition avec référence à cellules avec + ou -

Message par Jeff »

Bonjour,
SmPNRM a écrit :Voici la formule complète qui fonctionne
Chapeau bas, car c’est totalement imbuvable :mrgreen:

Y’aurait plusieurs variantes, à base de RECHERCHEV ou de CHOISIR, mais dans l’éventualité de rester dans une imbrication de fonction SI, tu n’as besoin que de 4 fonctions SI :

Code : Tout sélectionner

=SI(premier_test;"Très bon";SI(second_test;"Bon";SI(troisième_test;"Moyen";SI(quatrième_test;"Médiocre";"Mauvais"))))
De ce que j’ai compris de ta formule, le premier test comprends les éléments suivants :

ET(U2="O2 dissous";R2>=8)
ou ET(U2="SATUR.O2";R2>=90)
ou ET(U2="DBO5";R2<=3)
ou ET(U2="C Orga";R2<=5)
ou ET(U2="Temp. eau";R2<=20)
ou ET(U2="Orthophosp";R2<=0,1)
ou ET(U2="P total";R2<=0,05)
ou ET(U2="NH4+";R2<=0,1)
ou ET(U2="NO2-";R2<=0,1)
ou ET(U2="NO3-";R2<=10)
ou ET(U2="pH";R2>=6,5;R2<=8,2)

ce qui donne pour ce premier test :

Code : Tout sélectionner

=OU(ET(U2="O2 dissous";R2>=8);ET(U2="SATUR.O2";R2>=90);ET(U2="DBO5";R2<=3);ET(U2="C Orga";R2<=5);ET(U2="Temp. eau";R2<=20);ET(U2="Orthophosp";R2<=0,1);ET(U2="P total";R2<=0,05);ET(U2="NH4+";R2<=0,1);ET(U2="NO2-";R2<=0,1);ET(U2="NO3-";R2<=10);ET(U2="pH";R2>=6,5;R2<=8,2)) 
À intégrer donc sous la forme :

Code : Tout sélectionner

=SI(OU(ET(U2="O2 dissous";R2>=8);ET(U2="SATUR.O2";R2>=90);ET(U2="DBO5";R2<=3);ET(U2="C Orga";R2<=5);ET(U2="Temp. eau";R2<=20);ET(U2="Orthophosp";R2<=0,1);ET(U2="P total";R2<=0,05);ET(U2="NH4+";R2<=0,1);ET(U2="NO2-";R2<=0,1);ET(U2="NO3-";R2<=10);ET(U2="pH";R2>=6,5;R2<=8,2));"Très bon";SI(second_test;"Bon";SI(troisième_test;"Moyen";SI(quatrième_test;"Médiocre";"Mauvais"))))
Je te laisse faire les tests n°2 à 4 :wink:

A +