Extraction de plusieur valeur numérique dans une chaine

Bonjour/ Bonsoir à tous et toutes,

J'ai cherché sur le net et ici et dans ma tête avant de poster ici.

Donc,

Travail : Dans une chaine de caractères contenant du texte et des valeurs numériques extraire les valeurs et les placer dans les bonnes colonnes.

exemple de chaine :

Aliments en préparation:497 Petites Pommes Jaunes, 21 Pommes Jaunes, 5 310 Jaunes d'Etoile, 124 427 913 Petites Pommes, 71 152 532 Pommes, 3 308 427 Cerises d'étoiles, 15 298 434 Pommes d'étoiles, 76 620 475 Tagadas, 1 Tagada d'étoile, 17 736 090 Bananes, 26 974 412 Bananes d'étoiles.

Difficultés :

  • Il n'y a plusieurs valeurs numériques
  • Les nombres sont plus ou moins grand
  • Les produits rencontrés ne sont pas toujours les même
  • Le VBA ne peut absolument pas être utilisé
-les produits seront toujours rencontré dans cet ordre suivant si présent : Petites Pommes Jaunes ; Pommes Jaunes ; Jaunes d'Etoiles ; Petites Pommes ; Pommes Cerises ; Cerises d'étoiles ; Abricots ; Abricots d'étoiles ; Pommes d'étoiles ; Tagadas ; Tagadas d'étoiles ; Bananes ; Bananes d'étoiles

Infos diverses : (attrape couillon)

  • les produits et la quantité est séparé par une virgule sauf en dernier ou un point finit la phrase <-solutionné par tulipe_3
  • si une quantité de 1 alors le produit ne prend pas de "s" (EX: 1 Banane; 10 Bananes) <-solutionné par eriiic
  • Plusieurs cellules ou feuilles peuvent servir pour obtenir le résultat du moment que la valeur est bien au bon endroit ^^
  • tous les noms des produits rencontrés : Petites Pommes Jaunes ; Pommes Jaunes ; Jaunes d'Etoiles ; Petites Pommes ; Pommes Cerises ; Cerises d'étoiles ; Abricots ; Abricots d'étoiles ; Pommes d'étoiles ; Tagadas ; Tagadas d'étoiles ; Bananes ; Bananes d'étoiles

Un fichier en pièce jointe comprenant un exemple souhaité et diverse recette pour tester la solution

Si vous ne trouvez pas, ce n'est pas grave

Merci d'avoir lu

Edit 1

64petto-exemple.zip (3.52 Ko)

Bonjour,

Un début de solution qui utilise une fonction personnalisée (VBA) et une contrainte pour la chaîne de caractères (virgules).

Tu ne voulais pas de VBA (de macros, je pense )

Voir fichier joint.

A te lire.

Cdlt

Option Explicit
Public Function SansTexte(c)
Dim obj As Object
Dim chaine As String
'Supprime texte dans cellule
    Application.Volatile
    Set obj = CreateObject("vbscript.regexp")
    obj.Global = True
    obj.Pattern = "[a-zA-Zé:'\s+]+"
    chaine = c.Value
    chaine = obj.Replace(c, "")
    SansTexte = Split(chaine, ",")
End Function
109essai-regexp.zip (16.91 Ko)

Bonjour,

Effectivement la solution VBA n'est pas possible pour résoudre le problème. C'est pour ca que je l'ai marqué avant que certain ne se lance et perde du temps dans une solution non applicable dans mon cas.

En tout cas merci d'avoir jeté un œil et rechercher une solution.

Personnellement j'ai cherché des solutions avec les formules que j'utilise couramment mais Excel regorgeant de formule inconnue pour ma part j'avais espoir que cette réalisation soit en faite d'une facilité pour certain.

Ma solution consiste à éliminer au fur et à mesure les caractères qui sont devant les chiffres et de rechercher l'emplacement dans la chaine du produit qui est derrière et d'extraire alors la valeur numérique pour ensuite éliminer tout ce beau monde et passer au produit suivant en gérant les éventuelles erreurs.

Mais certain produit étant assez identique dans le nom (genre Cerise, et Cerise d'Etoile), je ne sais pas pourquoi Excel but et place aux mauvais endroit la valeur numérique. Les formules étant imbriqués pour limiter le nombre de colonnes utilisés le dépannage est assez comment dirais je.... chiant!

Lors de ma recherche, avant d'imbriquer les formules, pour le même exemple la distinction se fait.

Sur ceux je ne vais pas vous faire perdre plus de temps là dedans.

Résolu

bonjour

pour ma part;j'etats parvenu a supprimer touts les espaces ainsi que la ponctuation ;mon idée etait d'extraire la partie numerique en amont d'une majuscule (a reperer avec exact ) mais je cale car je ne vais pas plus loin que l'equiv de la 2eme majuscule ;sinon cela devrait etere jouable

pour mettre au point il faut refaire une phrase plus courte avec tout ce qui se rencontre ;ainsi dans l'assistant fonction on voit directement ou il faut taper pour modifier ; si ça marche pour du court ;bingo pour le long

ton exercice est plus que sportif

cordialement

Y a quand même des chercheurs?!!

Oui c'est un gros challenge !!!

Transformer les virgules en point est très intéressants, ca permet de chercher que des points chose présente de sur quand il y a qu'un seul produit à contrario de la virgule.

Y a peu j'ai cherché à remplacer les noms des produits par un caractère spécial (ù,¤,#,|,£,....) histoire de ne pas se retrouver avec des doublons confusionnels et permettant alors de chercher une chose unique. Mais je n'ai pas trouvé une formule qui permet de traiter cela assez rapidement, plusieurs remplacement simultanément. Il faut alors un remplacement par produits ->14 produits->nécessites 14 cellules

Bon je laisse ce topic en résolu ou on le garde ouvert jusqu'à épuisement des possibilités?

Bonjour Tulipe_3,

Peux-tu regarder le fichier que j'ai joint précédemment et me donner ton avis sur la solution proposée.

(pas téléchargé encore au moment ou j'écris ce message )

Toute idée d'amélioration est intéressante

L'utilisation des RegExp pour les opérations sur les chaînes de caractère permet une simplification des formules (avec une grosse difficulté d'écrire le "pattern", mais...)

A te lire

Cdlt

Bonjour à tous,

Ca n'est possible par formule que si tu mets, dans la recette, les Pommes Jaunes avant les Petites Pommes Jaunes.

Dit autrement : une chaine incluse dans une autre doit être devant.

Avec 2 feuilles intermédiaires.

Il fallait faire un compromis entre longueur mini de la chaine 'Aliments en préparation' et le nombre maxi récupérable.

J'ai choisi :

longueur mini de la chaine : 16 car.

nombre maxi récupérable : 999 999 999 999 999

Sinon tu adaptes la formule en Feuil2!B6

en Feuil1 :

B6: =Feuil3!B6

à recopier en bas et à droite

en Feuil2 :

A1: =SUBSTITUE(SUBSTITUE(Feuil1!A1;"s";"");":";",")

à recopier ligne 1 et colonne A

B6: =SUBSTITUE(SI(ESTERREUR(CHERCHE(B$1;$A6));"";STXT($A6;CHERCHE(B$1;$A6)-20;20));" ";"")

à recopier vers le bas et vers la droite

en Feuil3 :

B6: =DROITE(Feuil2!B6;EQUIV(",";STXT(Feuil2!B6;NBCAR(Feuil2!B6)-LIGNE($1:$255);1);0))*1

formule matricielle à valider avec Shift+Ctrl+Entrée

à recopier en bas et à droite

eric

59pettoman.zip (5.79 Ko)

Bonjour,

C'est une solution,

Malheureusement ce n'est pas moi qui décide de l’ordre des ingrédients dans la recette et j'aurais obligatoirement toujours l'ordre suivant :

Petites Pommes Jaunes ; Pommes Jaunes ; Jaunes d'Etoiles ; Petites Pommes ; Pommes Cerises ; Cerises d'étoiles ; Abricots ; Abricots d'étoiles ; Pommes d'étoiles ; Tagadas ; Tagadas d'étoiles ; Bananes ; Bananes d'étoiles

Sinon j'en conviens que c'est "plus facile" et je crois alors que j'aurais plus de cheveux sur le caillou

(j'ai rajouté cette contrainte dans le premier post)

Par contres chose inintéressante tu as enlevé tout les "S" à la fin des produits pour traiter les cas unitaire à l'identique que les cas nombreux mais ceci change aussi certain noms de produit donc attention si on recherche le produit

re jean eric

rassure toi j'avais jeté un oeil interessé ; j'ai experimenté le fait d'utliser l'obj.pattern dans une formule comme critere rien que pour voir

un peu comme 9^9 ou "z*z" mais cela ne donne rien ;meme pas les premices d'un debut apparement positif

j'avais vu une fois ce genre de syntaxe car il en existe plein ; je crois que ce n'est qu'utilisable que dans un code vb ;d'ailleur la simple presence de [ ] dans une formule (hors texte) est letale

bonne contination

cordialement

Re,

Malheureusement ce n'est pas moi qui décide de l’ordre des ingrédients

donc vba, pas le choix

Par contres chose inintéressante tu as enlevé tout les "S" à la fin des produits pour traiter les cas unitaire à l'identique que les cas nombreux mais ceci change aussi certain noms de produit donc attention si on recherche le produit

Non, tous les s, pas seulement ceux de fin. Il ne faut pas rêver non plus.

Si tu as 2 produits cerise et cerie il y aura pb c'est clair.

Une raison de plus pour passer en vba. Mais tu ne peux pas...

eric

Coucou,

Donc suite à vos lectures et votre angle d'attaque ainsi que quelque technique qu'il me manquait, j'ai réussis à obtenir mon souhait

en pièce jointe le fichier joint si votre curiosité vous pousse.

Le VBA n'a pas été utilisé et l'ordre respecté

Merci à vous pour votre participation, ca m'a permis de changer mon fusil d'épaule et d'attaquer cela sous un autre angle

Crdt

Bonsoir,

heuuu, pourquoi pas.

Mais tu te vois modifier ou ajouter un produit ?

Enfin, si tu n'as pas le choix...

eric

Les produits ne bougerons pas, après une modif c'est pas si compliqué, la formule est à étirer ca mange pas de pain mais une chose est sur c'est que cela est bien réalisable sans passer par la VBA ^^

Rechercher des sujets similaires à "extraction valeur numerique chaine"