[Résolu] "Factoriser" une formule de comparaison

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.
coincoin
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 06 mai 2015 09:32

[Résolu] "Factoriser" une formule de comparaison

Message par coincoin »

Bonjour,
Pour comparer, une chaine de caractère avec plusieurs propositions possibles, j'utilise actuellement la formule:

Code : Tout sélectionner

=SI(OU(NB.SI(F15;".*"&$J15&".*");NB.SI(F15;".*"&$K15&".*"));"Correct";"Faux")
Comme il peut y avoir jusqu'à 20 termes à comparer, j'aurais voulu "factoriser" ma formule pour ne plus avoir à modifier F15 vingt fois lorsque je réutilise ma formule pour une autre cellule.

J'essaie donc :

Code : Tout sélectionner

= SI(NB.SI(F15;(".*"&$J15&".*")OU(".*"&$K15&".*"));"Correct";"Faux")
Mais manifestement, je ne m'y prends pas comme il faut
Je vous joint un exemple où la formule est utilisé en cellule B1

Si une âme charitable...
En espérant avoir été suffisamment claire
Par avance, merci
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par coincoin le 08 mars 2021 18:51, modifié 2 fois.
libreOffice 4.3.6.2 sous Windows7
Jeff
GourOOu
GourOOu
Messages : 9629
Inscription : 18 sept. 2006 09:40
Localisation : France

Re: "Factoriser" une formule de comparaison de chaine

Message par Jeff »

Bonjour,

Pas de version AOO sous la main, as-tu consulté ce sujet. :

https://forum.openoffice.org/fr/forum/v ... es#p235839

A +
coincoin
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 06 mai 2015 09:32

Re: "Factoriser" une formule de comparaison de chaine

Message par coincoin »

Bonjour, et merci pour cette piste, mais il me semble que SOMMEPROD ne répond pas à mes besoins (ça ne me permet pas de renvoyer le résultats "CORRECT" quand la fonction est vraie
libreOffice 4.3.6.2 sous Windows7
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: "Factoriser" une formule de comparaison de chaine

Message par zeguedon »

Bonjour,

Code : Tout sélectionner

=SIERREUR(SI(TROUVE(A1;CONCAT(E1:K1));"Correct");"Faux")
@+
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
Jeff
GourOOu
GourOOu
Messages : 9629
Inscription : 18 sept. 2006 09:40
Localisation : France

Re: "Factoriser" une formule de comparaison de chaine

Message par Jeff »

Avec SOMMEPROD (j’insiste :mrgreen: ) :

Code : Tout sélectionner

=SI(SOMMEPROD(SI(ESTERREUR(CHERCHE(A1;E1:F1));0;1));"Correct";"Faux")
À valider matriciellement par Ctrl + Maj + Entrer

A +
coincoin
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 06 mai 2015 09:32

Re: "Factoriser" une formule de comparaison de chaine

Message par coincoin »

zeguedon a écrit :Bonjour,

Code : Tout sélectionner

=SIERREUR(SI(TROUVE(A1;CONCAT(E1:K1));"Correct");"Faux")
@+
Bien vu, Malin 8) ... mais apparemment CONCAT est sensible à la casse des caractères :evil:
EDIT: j'ai oublié de dire merci
Dernière modification par coincoin le 05 mars 2021 21:49, modifié 1 fois.
libreOffice 4.3.6.2 sous Windows7
coincoin
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 06 mai 2015 09:32

Re: "Factoriser" une formule de comparaison de chaine

Message par coincoin »

Jeff a écrit :Avec SOMMEPROD (j’insiste :mrgreen: ) :

Code : Tout sélectionner

=SI(SOMMEPROD(SI(ESTERREUR(CHERCHE(A1;E1:F1));0;1));"Correct";"Faux")
À valider matriciellement par Ctrl + Maj + Entrer

A +
Ca fonctionne aussi (même sans validation matricielle), la casse n'est plus un problème, mais cette fois-ci c'est la reconnaissance de la chaine parmi une chaine plus grande que je ne parviens plus a effectuer ( "toto" et "TOTO" sont bien justes, mais "1toto8" "toto de la vega" ou "totocotugno" sortent Faux :evil: )

Merci en tout cas
libreOffice 4.3.6.2 sous Windows7
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: "Factoriser" une formule de comparaison de chaine

Message par zeguedon »

coincoin a écrit :apparemment CONCAT est sensible à la casse des caractères
Non, c'est TROUVE() qui l'est, que tu peux avantageusement dans ce cas remplacer par CHERCHE() insensible à casse elle. :)
@+
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
Jeff
GourOOu
GourOOu
Messages : 9629
Inscription : 18 sept. 2006 09:40
Localisation : France

Re: "Factoriser" une formule de comparaison de chaine

Message par Jeff »

coincoin a écrit :Ca fonctionne aussi (même sans validation matricielle),[...] mais "1toto8" "toto de la vega" ou "totocotugno" sortent Faux
Non reproduis avec AOO, mais il me faut impérativement une validation matricielle :
AOO_forum1.png
A +
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Avatar de l’utilisateur
Michel JANZEF
ManitOOu
ManitOOu
Messages : 3453
Inscription : 12 janv. 2006 10:04

Re: "Factoriser" une formule de comparaison de chaine

Message par Michel JANZEF »

Bonjour,
Pour Jeff :
Sous LibO la formule fonctionne effectivement sans validation matricielle alors qu'elle est nécessaire sous AOo.
AOo 4.1.15 et LibO 7.6.6.3 (x64) - Windows 10 Famille 22H2 (19045.3693) 64 bits
Jeff
GourOOu
GourOOu
Messages : 9629
Inscription : 18 sept. 2006 09:40
Localisation : France

Re: "Factoriser" une formule de comparaison de chaine

Message par Jeff »

Michel JANZEF a écrit :la formule fonctionne effectivement sans validation matricielle
Merci pour ton retour, Michel ; Et les résultats sont corrects ?
Avatar de l’utilisateur
Jean-Louis Cadeillan
GourOOu
GourOOu
Messages : 5753
Inscription : 02 janv. 2009 23:56

Re: "Factoriser" une formule de comparaison de chaine

Message par Jean-Louis Cadeillan »

Bonjour,
Une variante avec SUBSTITUE(), sous AOO ou LibO, avec validation matricielle :

Code : Tout sélectionner

=SI(SOMME(NBCAR(SUBSTITUE(MAJUSCULE(E1:F1);MAJUSCULE(A1);""))-NBCAR(E1:F1))<0;"Correct";"Faux")
Pour rendre SUBSTITUE() insensible à la casse, j'ai utilisé la fonction MAJUSCULE(), j'aurais tout aussi bien pu choisir MINUSCULE()...
Jeff a écrit :Et les résultats sont corrects ?
Non...validation matricielle aussi sous LibO.
Cordialement,
Jean-Louis
LibO 7.6.6.3 (x64 avec Java 1.8.0_411) et AOO 4.1.15 (avec Java x32 1.8.0_381), Windows 7 Édition Intégrale 64 SP1
Avatar de l’utilisateur
Michel JANZEF
ManitOOu
ManitOOu
Messages : 3453
Inscription : 12 janv. 2006 10:04

Re: "Factoriser" une formule de comparaison de chaine

Message par Michel JANZEF »

Jeff a écrit :Et les résultats sont corrects ?
Jean-Louis a écrit :Non...validation matricielle aussi sous LibO
Et pourtant
Presse-papiers-2.jpg
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOo 4.1.15 et LibO 7.6.6.3 (x64) - Windows 10 Famille 22H2 (19045.3693) 64 bits
Avatar de l’utilisateur
Jean-Louis Cadeillan
GourOOu
GourOOu
Messages : 5753
Inscription : 02 janv. 2009 23:56

Re: "Factoriser" une formule de comparaison de chaine

Message par Jean-Louis Cadeillan »

Désolé Michel, j'ai dû faire une fausse manip dans mon test : sous Libo pas de validation matricielle nécessaire.
Sous AOO non plus si on remplace le SI interne par un NON :

Code : Tout sélectionner

=SI(SOMMEPROD(NON(ESTERR(CHERCHE(A1;F1:G1))));"Correct";"Faux")
Cordialement,
Jean-Louis
LibO 7.6.6.3 (x64 avec Java 1.8.0_411) et AOO 4.1.15 (avec Java x32 1.8.0_381), Windows 7 Édition Intégrale 64 SP1
Avatar de l’utilisateur
Michel JANZEF
ManitOOu
ManitOOu
Messages : 3453
Inscription : 12 janv. 2006 10:04

Re: "Factoriser" une formule de comparaison de chaine

Message par Michel JANZEF »

Jean-Louis Cadeillan a écrit :Désolé Michel, j'ai dû faire une fausse manip dans mon test : sous Libo pas de validation matricielle nécessaire.
Sous AOO non plus si on remplace le SI interne par un NON :

Code : Tout sélectionner

=SI(SOMMEPROD(NON(ESTERR(CHERCHE(A1;F1:G1))));"Correct";"Faux")
Cordialement,
Jean-Louis
:wink:
AOo 4.1.15 et LibO 7.6.6.3 (x64) - Windows 10 Famille 22H2 (19045.3693) 64 bits
coincoin
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 06 mai 2015 09:32

Re: "Factoriser" une formule de comparaison de chaine

Message par coincoin »

Michel JANZEF a écrit :
Jeff a écrit :Et les résultats sont corrects ?
Jean-Louis a écrit :Non...validation matricielle aussi sous LibO
Et pourtant
Presse-papiers-2.jpg
Désolé de vous faire perdre votre temps, mais manifestement, j'ai du mal à m’exprimer clairement...

C'est dans la cellule A1 que j'obtiens des valeurs inattendues (totocotugno)
Et je compare ça avec les cellules de E1:N1 (que je remplis moi-même)

J'ai refait un exemple en compilant vos propositions, mais aucune ne semblent convenir ( sous réserve de mon incompétence manifeste ;-) )
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
libreOffice 4.3.6.2 sous Windows7
Avatar de l’utilisateur
Jean-Louis Cadeillan
GourOOu
GourOOu
Messages : 5753
Inscription : 02 janv. 2009 23:56

Re: "Factoriser" une formule de comparaison

Message par Jean-Louis Cadeillan »

Bonsoir,
Toutes les formules données par les uns et les autres répondent à la logique suivante : il suffit qu'il y ait la chaîne de caractères (donnée dans la colonne A, ex : TOTO) dans au moins une partie d'une cellule des colonnes E et F, quelle que soit la casse, pour que la cellule de la colonne B retourne Correct.
Cette phrase
coincoin a écrit :Pour comparer, une chaine de caractère avec plusieurs propositions possibles
laissait supposer qu'on saisissait une proposition en E, une autre en F, etc. et que la formule retournait Correct si l'une au moins contenait la chaîne correcte (celle donnée en colonne A).
Mais visiblement, il y a maldonne.
Pourrais-tu nous expliquer quelles sont les valeurs de référence (saisies en premier), quelles sont les valeurs saisies ensuite (ne connaissant pas les valeurs de référence ?) et quelles sont les règles à appliquer ?
Cordialement,
Jean-Louis
PS : ma formule fonctionne comme les autres, dans la mesure où tu valides par Crl+Maj+Entrée, comme expliqué plus haut.
LibO 7.6.6.3 (x64 avec Java 1.8.0_411) et AOO 4.1.15 (avec Java x32 1.8.0_381), Windows 7 Édition Intégrale 64 SP1
coincoin
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 06 mai 2015 09:32

Re: "Factoriser" une formule de comparaison

Message par coincoin »

Désolé de ne pas avoir était claire, et tout cas, merci pour votre patience.

Je vais peut-être essayer de me faire comprendre en vous expliquant la finalité de chose: je suis prof et je veux automatiser ma correction d'évaluation de leçon, par exemple "Comment s'appelle le personnage principal de l'histoire". Mes élèves peuvent potentiellement répondre dans la cellule A1:
- c'est TOTO
- toto
-Toto
- TauTau
- toto est le personn....
-totoest le personna...
... etc

Je dois donc "prévoir" dans mes cellules E1:Z1 les réponses qui devront être considérées comme juste malgré une faute de frappe, d'orthographe, de casse ...etc

Ai-je réussi à mieux me faire comprendre ?
En tout cas, merci pour votre aide...
libreOffice 4.3.6.2 sous Windows7
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: "Factoriser" une formule de comparaison

Message par zeguedon »

Bonjour,

tu peux reprendre la formule de Jean-Louis (que je salue au passage) en inversant juste la plage de recherche et le critère :

Code : Tout sélectionner

=SI(SOMMEPROD(NON(ESTERR(CHERCHE(E1:Z1;A1))));"Correct";"Faux")
sans VM :)
@+
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
coincoin
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 06 mai 2015 09:32

Re: "Factoriser" une formule de comparaison

Message par coincoin »

C'est fois-ci, je crois qu'on y est (avec même la fonction ESTERR au cas où ;-) ) , merci Zeguedon

Merci encore, et juste une question/confirmation subsidiaire avant de clôturer le sujet: est-il possible de conditionner la police de caractère à la valeur contenu dans une cellule?

Pour le dire plus clairement, je voudrais barrer le contenu d'un cellule quand celui-ci a été comparer comme "Faux"
libreOffice 4.3.6.2 sous Windows7
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: "Factoriser" une formule de comparaison

Message par zeguedon »

Bonjour,
coincoin a écrit :est-il possible de conditionner la police de caractère à la valeur contenu dans une cellule?
Oui :)
coincoin a écrit :question/confirmation subsidiaire avant de clôturer le sujet
qui devra faire l'objet d'un nouveau sujet bien sûr.
@+
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
coincoin
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 06 mai 2015 09:32

Re: "Factoriser" une formule de comparaison

Message par coincoin »

Évidemment, où avais-je la tête ;-)
libreOffice 4.3.6.2 sous Windows7