Extraction de 3 nombres d'un format texte séparés par "*"

Patrick Meuse 55

XLDnaute Nouveau
Bonjour,

Utilisateur régulier d'Excel je suis parfois exposé à des situations pour lesquelles, je galère un peu à trouver la solution. ou la bonne formule.
Je viens de trouver par hasard votre site et aimerais améliorer ma pratique.

mon problème actuel est le suivant:
une colonne (V) d'une table excel, issu d'une conversion d'un fichier au format .xml sous format Excel comprend la structure suivante de texte: x*y*z correspondant aux dimensions d'un objet. Le contenu de la colonne1 est du texte
Je voudrais utiliser ce texte pour calculer le volume (soit multiplier x par y puis par z). s'agissant d'un volume les nombres entiers peuvent être a 1,2 ou 3 chiffres (maximum).
- j'ai essayé d'utiliser les fonctions "Gauche" et "Droite", mais suis bloqué lorsque une des valeurs n'est pas à 2 chiffres...

Quelle est la meilleur approche pour aborder ce problème? et pour calculer le produit de 3 nombres contenu dans du texte d'une cellule ?

Voir la pièce jointe 1030055
Bien cordialement
Patrick
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour

[Pour infos]
Ton fichier n'est pas correctement joint à ton message.

Ci-dessous un petit exemple (en attendant ton fichier)
A tester sur une feuille vide
VB:
Function calculer(r As Range) As Variant
calculer = Evaluate(r.Value)
End Function
Sub Macro_test()
[A1:A3] = Application.Transpose(Array("1+2+3", "2*3*4", "2^3"))
[B1:B3].FormulaR1C1 = "=calculer(RC[-1])"
End Sub
EDITION: Bonsoir Victor21 ;)
 
Dernière édition:

Victor21

XLDnaute Barbatruc
Supporter XLD
Bonjour Patrick.

Le texte sous la forme x*y*z en A1, essayez :
VB:
=STXT(A1;1;TROUVE("*";A1)-1)*STXT(A1;TROUVE("*";A1)+1;TROUVE("*";A1;TROUVE("*";A1)+1)-TROUVE("*";A1)-1)*STXT(A1;TROUVE("*";A1;TROUVE("*";A1)+1)+1;3)
 

Patrick Meuse 55

XLDnaute Nouveau
Bonjour

[Pour infos]
Ton fichier n'est pas correctement joint à ton message.

Ci-dessous un petit exemple (en attendant ton fichier)
A tester sur une feuille vide
VB:
Function calculer(r As Range) As Variant
calculer = Evaluate(r.Value)
End Function
Sub Macro_test()
[A1:A3] = Application.Transpose(Array("1+2+3", "2*3*4", "2^3"))
[B1:B3].FormulaR1C1 = "=calculer(RC[-1])"
End Sub
EDITION: Bonsoir Victor21 ;)
--------------------------
Bonjour Staple 1600
Merci pour ta réponse, je ne suis pas très familier dans la manière d'inclure "une macro dans une feuille Excel" et suis entrain de lire les articles pour le faire moi même. Je reviens vers toi à l'issue.
Merci encore et je te joins mon fichier dans lequel j'ai copié la solution proposée par Victor 21.
Bien cordialement
Patrick Meuse 55
 

Fichiers joints

Patrick Meuse 55

XLDnaute Nouveau
Bonjour Patrick.

Le texte sous la forme x*y*z en A1, essayez :
VB:
=STXT(A1;1;TROUVE("*";A1)-1)*STXT(A1;TROUVE("*";A1)+1;TROUVE("*";A1;TROUVE("*";A1)+1)-TROUVE("*";A1)-1)*STXT(A1;TROUVE("*";A1;TROUVE("*";A1)+1)+1;3)
Bonjour Victor21,
Merci pour ta réponse. Je viens de copier ta formule et çà marche! J'ai besoin d'un peu de temps pour comprendre comment tu as fais.
Par ailleurs dans la cellule texte on peut trouver deux formats de texte:
- format de type x*y*z : s'il y a 3 valeurs: la forme est cubique, donc le volume se fait en multipliant les valeurs X*Y*Z (ta formule marche)
- ou format de type D*H: s'il n'y a que 2 valeurs il s'agit d'une forme cylindrique dans laquelle la première valeur est le diamètre et la seconde la hauteur, donc le calcul du volume se fait par la formule: V= PI * (D/2)² * H

j'aurai besoin de tester a quel format la cellule fait référence pour appliquer l'une ou l'autre formule de calcul d'un volume Cubique ou Cylindrique et peut etre en comptant le nombre de "*" pour sélectionner la bonne formule !. je joins par ailleurs le tableau Excel de test.

Merci encore à vous
Bien Cordialement
Patrick Meuse 55
 

Fichiers joints

JHA

XLDnaute Barbatruc
Bonjour à tous,

Peut être en "B2"
VB:
=SIERREUR(SI(ESTNUM(SI(A2<>"";TROUVE("*";STXT(A2;TROUVE("*";A2)+1;99));""));STXT(A2;1;TROUVE("*";A2)-1)*STXT(A2;TROUVE("*";A2)+1;TROUVE("*";A2;TROUVE("*";A2)+1)-TROUVE("*";A2)-1)*STXT(A2;TROUVE("*";A2;TROUVE("*";A2)+1)+1;3);((STXT(A2;1;TROUVE("*";A2)-1)/2)^2)*STXT(A2;TROUVE("*";A2)+1;99)*PI());"")
Copier vers le bas

JHA
 

Fichiers joints

Patrick Meuse 55

XLDnaute Nouveau
Bonjour à tous,

Peut être en "B2"
VB:
=SIERREUR(SI(ESTNUM(SI(A2<>"";TROUVE("*";STXT(A2;TROUVE("*";A2)+1;99));""));STXT(A2;1;TROUVE("*";A2)-1)*STXT(A2;TROUVE("*";A2)+1;TROUVE("*";A2;TROUVE("*";A2)+1)-TROUVE("*";A2)-1)*STXT(A2;TROUVE("*";A2;TROUVE("*";A2)+1)+1;3);((STXT(A2;1;TROUVE("*";A2)-1)/2)^2)*STXT(A2;TROUVE("*";A2)+1;99)*PI());"")
Copier vers le bas

JHA
Bonsoir JHA,
Merci ça marche !, mais honnêtement je viens de passer un peu de temps pour essayer comprendre.., et suis loin du compte! Mais bon je vais essayer de décortiquer la formule.
Merci encore
Bien à toi
Patrick Meuse 55
 

Patrick Meuse 55

XLDnaute Nouveau
Bonjour le Forum,
Bonjour Patrick Meuse 55, Staple1600 :) , Victor21:), JHA:),

Principalement pour saluer mes camarade de jeu et accessoirement pour le fun une proposition qui passe par une macro XL4

Cordialement
Bonsoir Jocelyn et encore merci à vous Stape 1600, Victor21, JHA.

Bien reçu Jocelyn le fichier modifié avec colonne test par macro XL4, ca marche aussi.
Cependant, pourrais tu clarifier la notion de macro XL4 je ne vois pas de macro de ce type dans le fichier.
Bien cordialement
Patrick Meuse 55
 

Staple1600

XLDnaute Barbatruc
Bonsoir

[Patrick Meuse 55]
Je me permets de répondre vu que Jocelyn dort du sommeil du juste (enfin je suppose ;))
Pour lever le mystère, faire CTRL+F3 et là voir ce qui s'affiche à l'écran.

EDITION:
Je viens de voir qu'il y avait déjà un indice dans le fichier de Jocelyn
(dans la cellule C17 de la feuille 1 ;))
Tu ne l'avais pas vu?
 

Patrick Meuse 55

XLDnaute Nouveau
Bonjour Staple 1600

Merci, ok vu comment faire pour visualiser le gestionnaire de nom et ce que comprend "eval"
Dans la formule ci dessous, je pense avoir tout compris, sauf pourquoi ce "paramètre" ou gestionnaire de nom "eval' que j'ai mis en gras dans la formule ci dessous. J'essaye de comprendre sa raison d’être.
Je crois donc comprendre que la macro s'applique a la plage definie par "eval", soit la colonne A1 jusqu'à la ligne 21.
=SIERREUR(SI(NBCAR(A2)-NBCAR(SUBSTITUE(A2;"*";""))<2;PI()*((STXT(A2;1;TROUVE("*";A2)-1)/2)^2)*STXT(A2;TROUVE("*";A2)+1;99);eval);"")

Désolé pour ma question basique de béotien! mais j'aime bien comprendre...
Bien cordialement,

Patrick Meuse 55
 

Patrick Meuse 55

XLDnaute Nouveau
Bonsoir Staple1600, Victor21, JA and Jocelyn
Désolé pour le temps de réponse, mais il me faut un peu de temps pour comprendre...
Avec vos explications la fonction "évaluer"me semble maintenant plus claire.
J'ai encore besoin d'un peu de temps, mais votre aide m'a été très précieuse pour avancer sur la résolution de mon problème initial, pour découvrir des domaines d'excel totalement inconnus à ce jour et encore merci pour votre engagement!
Je n'hésiterai pas à revenir vers vous en cas de besoin.
Bien cordialement
Patrick Meuse 55.
 
Haut Bas