Extraire une combinaison de texte+chiffre dans une base de données

RenFongTen

XLDnaute Nouveau
Bonjour à tous,

Je suis nouvelle ici,

En ce moment je dois travailler sur une base de donnée très mal remplie qui me file un mal de crâne.

Je dois m'occuper d'un catalogue de supermarché , et la description des produits se fait souvent sur une ligne, ce qui ne m'arrange pas pour la mise en page. (Et comme il y a trop de produits, remettre tout en forme prendrait trop de temps)

les lignes sont du genre

DANAO PECHE 50 CL
CHAMPIGNON DE PARIS
FROMAGE PITON DES NEIGES
DANETTE FLAN VANILLE 12 X 100 G
LAIT CREME BRULEE 100G

Ce qui m'intéresserait c'est de faire deux colonnes : une à gauche avec le texte , une a droite avec le poids. Sachant que pour le poids il faudrait filtrer la cellule nombre +"g" ou nombre +"cl" ou nombre "X" nombre "g" quand il y a un lot de produits

Pensez vous que ce serait faisable vu que j'ai cru comprendre qu'on pouvait extraire du texte dans une cellule?

Merci pour votre retour!
 

RenFongTen

XLDnaute Nouveau
Bonjour,

Je viens de tester sur mon fichier de BDD , il n'y a que la première colonne qui fonctionne. A quoi servent les fonctions NBCAR en F96 et G96 sur le fichier que vous m'avez envoyé?

Alors normalement je suis en attente d'une liste Excel par mon client, mais je pense que je vais commencer à la remplir moi-même pour m'avancer. Quand j'aurais fini il faut que je modifies le nombre de ligne dans la fonction CHERCHE de la colonne qui cherche le poids , c'est ça?

Je vous donne la copie
 

Pièces jointes

  • CSV JBO FIER NOUT PEI macro en dev.xlsm
    332.3 KB · Affichages: 77

CISCO

XLDnaute Barbatruc
Bonjour

Il faut définir le mot début (Cf. dans le gestionnaire de noms). Dans ma dernière pièce jointe, ce nom donne la position du premier chiffre dans "l'appellation" contenue dans la colonne B. Comme dans ton dernier fichier, cette "appellation" se trouve dans la colonne C, il faut remplacer dans cette définition les $B par des $C.

@ plus
 

RenFongTen

XLDnaute Nouveau
Je suis désolée je n'ai pas compris.

Si par exemple je fais une liste que je nomme avec le gestionnaire de noms _marques

Sur la première ligne de la colonne E je tapes ceci ?
=SUPPRESPACE(SIERREUR(STXT(SUBSTITUE(SUPPRESPACE(C2);SUPPRESPACE(D2);"");1;MIN(SIERREUR(CHERCHE(_marques)-1&"G";SUBSTITUE(SUPPRESPACE(C2);SUPPRESPACE(D2);""));9^9))+1);SUBSTITUE(C2;D2;"")))

Il y a un message d'erreur disant que je n'ai pas d'arguments suffisants pour cette fonction.
 

RenFongTen

XLDnaute Nouveau
Je tapes ça?

=SUPPRESPACE(SIERREUR(STXT(SUBSTITUE(SUPPRESPACE(C2);SUPPRESPACE(D2);"");1;MIN(SIERREUR(CHERCHE(_marques;C2)-1&"G";SUBSTITUE(SUPPRESPACE(C2);SUPPRESPACE(D2);""));9^9))+1);SUBSTITUE(C2;D2;"")))

Ce qui m'intrigues c'est que dans la barre de formule il me demande de taper du texte dans la fonction CHERCHE. Il faut que je tapes le nom de toutes mes marques?

Je suis désolée si ma question parait bête mais je n'ai jamais fait de formules aussi complexes!
 

CISCO

XLDnaute Barbatruc
Bonjour

Tu peux écrire :
* un nombre, par ex CHERCHE(8;C2),
* un texte, du style CHERCHE("Paul";C2),
* une référence de cellule contenant un nombre ou du texte, ex, CHERCHE(E3;C2)
* ou un nom appelant une cellule contenant un nombre ou du texte.

Dans le cas présent, il me semble que le nom que tu veux utiliser ne représente pas une cellule, mais une plage. C'est là aussi faisable, mais il faut faire avec une formule matricielle et il faut travailler avec une formule encore un peu plus compliquée. J'essaye de te faire un exemple pour t'expliquer davantage cela.

@ plus
 

CISCO

XLDnaute Barbatruc
Bonjour

Un exemple en pièce jointe. Les formules dans les colonnes B et C utilisent un CHERCHE(" ";...) pour trouver le fruit ou le légume, puis la marque. C'est simple, mais cela ne fonctionne pas bien à chaque fois.
La formule matricielle de la colonne D (à valider avce les 3 touches Ctrl+maj+entrer) cherche les noms de marques déjà citées dans les lignes précédentes dans l’appellation en cours. Si elle un trouve un, elle l'affiche, sinon, elle procède de la même manière qu'en colonne C. Les résultats sont meilleurs, mais là non plus pas parfaits, par ex si des marques ont des noms similaires.

@ plus
 

Pièces jointes

  • exemple.xlsx
    11.6 KB · Affichages: 17

CISCO

XLDnaute Barbatruc
Bonjour

Cf. en pièce jointe.

Le "tri" est fait en fonction des nombres, des X, et des mots POT et G. Ce n'est pas une solution assez polyvalente pour prendre en charge tous les cas possibles.

termes donne l’appellation sans cette marque.
termesbis donne termes après remplacement des chiffres, des " X" et "x" suivi d'un chiffre par un ou deux µ.

La formule dans la colonne E "repère" les marques et les écrit.
La formule dans la colonne B repère la position des mots "POT", "G" ou "µ" dans termebis et affiche le produit en fonction de la position de ces mots.
La formule de la colonne C remplace dans l'appellation la marque et le produit par "", donc, normalement, il ne reste plus que la quantité.

@ plus
 

Pièces jointes

  • exemplebis.xlsx
    22.7 KB · Affichages: 19

RenFongTen

XLDnaute Nouveau
Hello,

J'ai tardé à répondre mais je vous confirme que ça marche enfin.

En fait mon employeur m'a filé un p***** de MacBook, et impossible de retrouver ou était le gestionnaire de noms. (Même la rubrique aide de Office ne m'a pas aiguillé)

Il fallait donc aller dans Insérer> Nom> Définir un nom

Après maintes essai à essayer de recopier proprement les formules avec un touchpad. J'y suis enfin arrivé.

Merci franchement pour votre patience, j'y serai jamais arrivé sans vous. Ma base de données est carrément plus clean. Je vais continuer à faire quelques macros , beaucoup plus simples, pour l'améliorer.
 

RenFongTen

XLDnaute Nouveau
Hello

Il y a peut encore juste un truc sur lequel vous pouvez m'aider.

J'aimerais mettre une fonction nom propre pour le texte d'une colonne qui a cette formule
=SUPPRESPACE(SIERREUR(SI(CHERCHE("µ";termesbis)=1;STXT(termes;MIN(SIERREUR(CHERCHE("POT";termes)+4;9^9);SIERREUR(CHERCHE("G";termes)+2;9^9));9^9);STXT(termes;1;CHERCHE("µ";termesbis)-1));SUBSTITUE(termes;F2;"")))

Ou est-ce que je pourrais l'insérer?

Merci à vous
 

CISCO

XLDnaute Barbatruc
Bonjour

Comme est organisée la formule actuelle, il faut en mettre plusieurs. Cela donne, sur la ligne 2
Code:
SUPPRESPACE(SIERREUR(SI(CHERCHE("µ";termesbis)=1;NOMPROPRE(STXT(termes;MIN(SIERREUR(CHERCHE("POT";termes)+4;9^9);SIERREUR(CHERCHE("G";termes)+2;9^9));9^9));NOMPROPRE(STXT(termes;1;CHERCHE("µ";termesbis)-1)));NOMPROPRE(SUBSTITUE(termes;E2;""))))

@ plus
 

Discussions similaires

Statistiques des forums

Discussions
312 111
Messages
2 085 392
Membres
102 882
dernier inscrit
Sultan94