Tableau de conversion

Bonjour,

Je cherche à faire un tableau de conversion qui me permettrai de convertir rapidement une recette exprimée en diverses unités pour avoir tout en gramme.
Mon soucis est que certaines façons d’écrire les recettes ne renvoient aucun résultat.
Ex :

  • “Cuisse de poulet” ne renvoi rien parce que dans la table j’ai “poulet, cuisse”
  • “Fraises” ne renvoi rien parce que j’ai “Fraise”
  • “Tarte aux pommes de Normandie” ne renvoi rien parce que j’ai “Tarte aux pommes”
  • etc…

J’avais pensé à faire une formule intermédiaire pour qu’il me cherche que les données importantes s’il ne trouve rien directement. En gros, s’il ne trouve pas “cuisse de poulet”, il cherche toutes les “cuisse” et tous les “poulet”. Ou mettre au singulier etc… Mais je n’ai aucune idée comment faire et je ne maitrise pas VBA

Avez vous des suggestions?

Voici le fichier en question :
Test conversion amélioré.ods (127.5 KB)

une première proposition :
remplace la »formule d’horreur« de Couisine colonne H par

=JOINDRE.TEXTE(" ";1;B9:G9)

C’est hors sujet et pas tout à fait juste (il y a à certains endroits des parenthèses ou des virgules) mais je prends quand même.

Concernant le sujet, une suggestion?

pour la recherche ultérieure sur cette colonne, les virgules et les parenthèses parsemées au hasard ne sont pas pertinentes !

Non!

Pour moi elles le sont… la pertinence est suggestive dans ce cas.

C’était donc globalement inutile de commenter non? Pourquoi juste venir dire que quelque chose ne plait pas sans proposer de solution?

Pas complètement inutile, du moins je pouvais conclure de ne pas investir plus de temps et d’énergie ici…

:face_with_raised_eyebrow:
:+1: :wave:

Bonjour,

c’est le même besoin que sur Calc : rechercheV non exact non ?

Plus ou moins.
Comme je ne peux apparemment pas éditer le premier message pour mettre le tableau, préciser la demande, qu’il y avait pas mal de spams et pas de réponse concluantes, il fallait bien que je fasse quelque chose.

REGEX(B2,"[Cuisse]?[poulet]?";;"g")

Cette regex retournera TRUE à condition que la cellule de recherche contienne, peu importe sa position dans la cellule, soit Cuisse, soit poulet, soit les deux. Ainsi, si on applique cette regex à une cellule contenant poulet, cuisse, alors elle sera incluse dans les résultats.

REGEX(B2,"[Fraise?]?";;"g")

Cette regex, retournera, comme ci-dessus, TRUE si elle est appliquée à une cellule contenant le mot Fraise, ou le mot Fraises, ou le mot Fraisee. Le ? en regex signifie 0 ou 1. Dans ce cas-ci, 0 ou 1 caractère à la fin de Fraise, et le terme nouvellement crée, 0 ou 1 fois.

REGEX(B2,"[Tarte aux pomme]*";;"g")

Cette regex retournera TRUE si elle est appliquée à une cellule contenant la séquence de mot suivante “Tarte aux pommes” suivie de n’importe quelle autre séquence, 0 ou plusieurs fois, de mots. Ainsi, elle retournera TRUE aux séquences suivantes :
“Tarte aux pomme”
“Tarte aux pommes”
“Tarte aux pommes de route”
“Tarte aux pommes caramélisées”
“Tarte aux pommes 9as8d7fa8s9dfaW$#WR AD3@@”
“pas encore une Tarte aux pomme”

mais elle retournera FALSE aux séquences suivantes :
“Tarte au pommes”
“Tarte au pomme”

Pour que les 2 séquences ci-dessus soient incluses, alors il faut avoir comme regex ce qui suit :
REGEX(B2, "[Tarte au? pomme]*";;"g"

Je comprends la formule, cependant si je dois à chaque fois modifier la formule en fonction de ce que je cherche ça ne me fera pas gagner tellement de temps.
Est ce qu’on peut faire une ligne intermédiaire qui sépare toute seule les mots puis un regex?
On pourrait même faire une ligne qui sépare les mots, une ligne qui met tout au singulier puis un regex avec ? pour avoir le singulier et le pluriel ?

@chris.the.webber Tes formules ne font pas ce que tu crois, ce que tu veux est:

=REGEX(B2,".*(Tarte aux? pomme).*";;"g")

:face_with_thermometer:

@fpy que veux-tu me dire?

image

Pas de différence(s) ici :

Untitled-Copie

Les [square] parenthèses ont une signification différente de ce que tu crois !

`=REGEX($A2;"[aeoulprstx]"; ;g ) =REGEX($A2;"[[tarte]?[aux]?[poulets]?]"; ;g ) =REGEX($A2;"[aeoulprstx]+"; ;g )
Januar a a a
Februar e e e
März r r r
April p p pr
Mai a a a
Juni u u u
Juli u u ul
August u u u
September e e epte
Oktober t t to
November o o o
Montag o o o
Dienstag e e e
Mittwoch t t tt
Donnerstag o o o
Freitag r r re
Samstag a a a
Sonntag o o o

see description for square-groups

Ce lien explique ce qu’est une REGEX, comment elle fonctionne dans LO
https://help.libreoffice.org/latest/en-US/text/scalc/01/func_regex.html?&DbPAR=CALC&System=WIN

Tandis que ce lien explique la syntaxe d’une REGEX (par exemple, le + signifie 1 ou plus d’une fois, le ? signifie 0 ou 1 fois, le * pour 0 ou plus d’une fois, …)
https://help.libreoffice.org/latest/en-US/text/shared/01/02100001.html?&DbPAR=CALC&System=WIN

1 Like

[quote=“Mr-Boutindou, post:12, topic:112848, full:true”]
Est ce qu’on peut faire une ligne intermédiaire qui sépare toute seule les mots puis un regex?[/quote]
Probablement que oui, mais je ne sais pas faire une REGEX qui sépare tous les mots contenus dans chacune des cellules d’une même colonne, qui utilisera ensuite chacun de ces mots pour créer une autre REGEX qui sera appliquée sur les mêmes données. De plus, selon mes connaissances, REGEX cessera le travail de recherche aussitôt qu’il aura obtenu une valeur TRUE, ou qu’il aura parcouru toute les données a parcourir. Ainsi, la REGEX
REGEX(B2,"[Cuisse]?[poulet]?";;“g”)
retournera TRUE à Cuisse et ne cherchera pas poulet dans la ligne de recherche suivante, même s’il s’y trouve :
Cuisse de poulet brûlée au gingembre.

C’est déjà fait avec l’opérateur ?, mais ce n’est pas affiché.

ok, mais je ne peux pas laisser ta formule à demeure et mettre à chaque fois un autre élément. Je suis obligé de changer la formule à chaque fois. ça je ne veux pas.
Si en A1 on a “tarte aux poulets”
il faudrait diviser la cellule en B pour avoir B1 “tarte” B2 “aux” B3 “poulets”
Et ensuite faire REGEX(A1,"[B1]?[B2]?"[B3]?";;“g”) —> (j’ai pas vérifié la syntaxe)

C’est infaisable?