Extraction montant dans cellule

Dupond987

XLDnaute Nouveau
Bonjour à tous,

Je n'ai pas réussi à trouver sur le forum, une formule que je pourrais adapter à ma problématique qui est la suivante :

Je souhaiterais extraire un montant dans plusieurs cellules de la colonne A contenant du texte et d'autres chiffres. Voici quelques exemples :

Exemple 1 : 6 - bac hauteur 7,5 cm 5.25 € TTC
Exemple 2 : Dim. 1050x450x663 mm. Livré prêt à monter, 6 bacs offerts (dans la limite des stocks disponibles). 201.25 € TTC
Exemple 3 : 8 - bac hauteur 30 cm10.95 € TTC

Par rapport aux exemples donnés, je souhaiterais donc extraire 5.25 € TTC, 201.25 € TTC et 10.95 € TTC dans une autre colonne.

Mon problème est que les données ne sont pas au format monétaire Excel, les virgules sont remplacées par des points. Les montants ne sont pas tous de la même longueur. Ces données viennent d'un document Word que je dois convertir en tableau au format Excel 2003 et Excel 2007. De plus dans l'exemple 3, le nombre n'est pas séparé par un espace du texte le précédant.

Les constantes sont les suivantes :
- les montants se trouvent toujours à la fin de la cellule quelle qu'en soit sa longueur et son contenu.
- les montants sont toujours suivis du sigle € mais pas forcément suivis de TTC comme dans les exemples donnés.

J'ai des lignes vides dans ma feuille contenant 5035 lignes à traiter.

Merci à vous pour votre aide.

Cordialement.

Dupond987
 

hoerwind

XLDnaute Barbatruc
Re : Extraction montant dans cellule

Bonjour et bienvenu sur le forum,

Les trois exemples ne me semblent pas suffisants pour être représentatifs de tous les cas de figure pouvant se présenter.

Quelques lignes extraites de ton fichier en pièce jointe reprenant tous ces cas permettrait de tester une éventuelle proposition qui pourrait t'être faite.

A titre d'exemple d'après les renseignements donnés : si les " € TTC" sont supprimés, les huit derniers caractères restants ne contiennent-ils qu'une seule chaine numérique ?

A te lire.
 

Tibo

XLDnaute Barbatruc
Re : Extraction montant dans cellule

Bonjour,

Pas réussi en une seule formule.

Un essai avec les formules suivantes :

en A1, ton texte

en B1, une formule matricielle :

Code:
=MAX((CODE(STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(GAUCHE(A1;CHERCHE("€";A1)-1))));1))
>57)*LIGNE(INDIRECT("1:"&NBCAR(GAUCHE(A1;CHERCHE("€";A1)-1)))))+1

Formule matricielle à valider par CTRL + MAJ + ENTREE

en C1 :

Code:
=STXT(GAUCHE(A1;CHERCHE("€";A1)-1);B1;99)*1

La formule est basée sur la détection du rang du caractère €, puis on cherche le dernier caractère précédent le € dont le code ASCII est > 57 (donc qui n'est pas un chiffre).

Je te laisse tester

@+
 

Tibo

XLDnaute Barbatruc
Re : Extraction montant dans cellule

re,

Après lecture de l'intervention de hoerwind, une autre idée, en une seule formule :

texte en A1

en B1 :

Code:
=STXT(SUPPRESPACE(GAUCHE(A1;CHERCHE("€";A1)-1));TROUVE("µ";SUBSTITUE(SUPPRESPACE
(GAUCHE(A1;CHERCHE("€";A1)-1));" ";"µ";NBCAR(SUPPRESPACE(GAUCHE(A1;CHERCHE("€";
A1)-1)))-NBCAR(SUBSTITUE(SUPPRESPACE(GAUCHE(A1;CHERCHE("€";A1)-1));" ";""))));99)*1

nécessite qu'il y ait un espace avant le montant. Edit : ce qui ne semble pas être le cas dans ton 3ème exemple. Donc retour à la solution proposée avant. A moins que ... quelqu'un ne trouve une solution plus simple.

@+
 
Dernière édition:

Dupond987

XLDnaute Nouveau
Re : Extraction montant dans cellule

Merci à hoerwind et Tibo pour vos réponses rapides,

Pour hoerwind,

Les trois exemples sont représentatifs de tous les cas de figure que je pourrais renconter à part un seul. L'autre cas de figure est que le montant se trouve tout seul dans la cellule.

En réponse à ta question : "si les " € TTC" sont supprimés, les huit derniers caractères restants ne contiennent-ils qu'une seule chaine numérique ?"
Non, même si les "€ TTC" sont supprimés les 8 derniers caractères restants ne contiennent pas qu'une seule chaîne numérique. Ceci peu être vérifié avec un des exemples donnés. Dans l'exemple 1 : il reste "cm" qui n'est pas une chaîne numérique. Dans l'exemple 2 : il reste le point. Dans l'exemple 3 : il reste " cm".

Pour Tibo,
j'ai une erreur "#VALEUR!" avec ta première formule matricielle, donc la deuxième ne fontionne pas non plus.
J'ai essayé avec l'autre formule que tu as rajouté dans l'autre message pendant j'écrivais ce message mais j'ai toujours la même erreur.

Je vous joins un fichier pour exemple.

Je vous remercie encore pour vos réponses si rapides.

Cordialement.
 

Pièces jointes

  • XLD.xls
    16.5 KB · Affichages: 69
  • XLD.xls
    16.5 KB · Affichages: 70
  • XLD.xls
    16.5 KB · Affichages: 69

Tibo

XLDnaute Barbatruc
Re : Extraction montant dans cellule

re,

Ton fichier est plutôt particulier. Sans doute provient-il d'un import depuis le net.

Il contient un tas de caractères invisibles de code ASCII 9, ce qui le rend difficile à traiter.

On peut peut-être y arriver, notamment en utilisant la fonction EPURAGE pour nettoyer le texte de ces caractères indésirables.

Mais ça risque d'être plutôt lourd.

Je vais voir si on peut y parvenir par le biais de plusieurs formules intermédiaires, mais sans garantie.

@+
 

Dupond987

XLDnaute Nouveau
Re : Extraction montant dans cellule

Le fichier d'origine est un fichier word 2007 qui est traité par un scrip Powershell pour le modifier (ajout de ; afin de créer des colonnes) et supprimer des lignes inutiles. Il est ensuite enregistrer par ce script en format .txt et importer dans Excel par le menu "Données Externes", "Importer des données". Les données sont importées en Windows ANSI. Je vais essayer de l'importer dans un autre format.

@+
 

mromain

XLDnaute Barbatruc
Re : Extraction montant dans cellule

bonjour Dupond987, hoerwind et Tibo

une autre approche, avec une fonction VBA :
Code:
Public Function TestExtract(cellule As Range) As String
Dim tabStr() As String, i As Integer
If InStr(cellule.Text, "€") = 0 Then Exit Function
Set cellule = cellule.Resize(1, 1)
tabStr = Split(Replace(cellule.Text, Chr(9), " "), " ")
For i = LBound(tabStr) To UBound(tabStr)
    If tabStr(i) = "€" Then
        TestExtract = TestExtract & " " & tabStr(i) & IIf(i < UBound(tabStr), " " & tabStr(i + 1), "")
        Exit Function
    Else
        TestExtract = tabStr(i)
    End If
Next i
End Function
a+
 

Pièces jointes

  • XLD.xls
    40 KB · Affichages: 102
  • XLD.xls
    40 KB · Affichages: 107
  • XLD.xls
    40 KB · Affichages: 103

hoerwind

XLDnaute Barbatruc
Re : Extraction montant dans cellule

Bonjour, salut Tibo,

Une tentative en pièce jointe.

Une partie répétitive de la formule a été nommée (menu Insertion - Nom - Définir).

Le séparateur décimal (. à remplacer par ,) n'a pas été traité, puisque j'ai le point comme séparateur décimal.
Ceci pourrait provoquer un message d'erreur à l'ouverture du fichier.
Si c'est le cas, ce n'est pas fort difficile à modifier dans la formule.
 

Pièces jointes

  • ExtractionMontants.xls
    21.5 KB · Affichages: 78

Dupond987

XLDnaute Nouveau
Re : Extraction montant dans cellule

Super,

mromain ta méthode fonctionne.

Pour hoerwind, dans le fichier que tu m'as envoyé ça fonctionne, par contre quand je copie ta formule dans mon fichier avec mes 5035 lignes j'ai l'erreur #NOM? qui apparaît et je ne sais pas pourquoi.

hoerwind, ne perds pas de temps à résoudre ce problème car la méthode de mromain fonctionne. Mais j'ai une autre requête avec le même fichier.

Je souhaiterais extraire les mots en majuscule qui se trouve en début de cellule et les mettre dans une autre cellule. Par rapport au fichier joint précédemment, je souhaiterais par exemple extraire "BACS TIROIRS DE RANGEMENT GRATNELLS" de la cellule contenant "BACS TIROIRS DE RANGEMENT GRATNELLS. (compatibles avec meubles 52211 et 52213 et".

Je vous remercie encore tous car vos solutions fonctionnent et vous répondez très très rapidement.

@+.
 

hoerwind

XLDnaute Barbatruc
Re : Extraction montant dans cellule

Re,

Si cela ne fonctionne pas dans un autre fichier c'est probablement parce que la formule nommée "extract" n'a pas été copiée.

Concernant la nouvelle question, extraction des mots en majuscules, il me semble qu'une macro sera plus appropriée.
 

mromain

XLDnaute Barbatruc
Re : Extraction montant dans cellule

re bonjour,

voici un essai pour les mots en majuscule :
Code:
Public Function TestExtractMajuscules(cellule As Range) As String
Dim i As Integer
Set cellule = cellule.Resize(1, 1)
For i = 1 To Len(Replace(cellule.Text, Chr(9), " "))
    If Mid(Replace(cellule.Text, Chr(9), " "), 1, i) = UCase(Mid(Replace(cellule.Text, Chr(9), " "), 1, i)) Then
        TestExtractMajuscules = Mid(Replace(cellule.Text, Chr(9), " "), 1, i)
    Else
        Exit Function
    End If
Next i
End Function

a+
 

Dupond987

XLDnaute Nouveau
Re : Extraction montant dans cellule

Super,

mromain encore une fois ça fonctionne.

Je vous remercie tous pour votre aide et aussi pour vos réponses plus que rapide. Je vais pouvoir transformer mon document Word en tableau Excel grâce à votre aide.

Encore mille mercis à tous.

Cordialement.
 

Gael

XLDnaute Barbatruc
Re : Extraction montant dans cellule

Bonjour Dupond987, Hoerwind, mromain et salut Tibo,

Si tu acceptes d'utiliser les fonctions complémentaires disponibles gratuitement sur "Morefun", la formule suivante qui utilise la fonction "REGEX.STXT" semble marcher dans tous les cas de ton exemple:

Code:
=SI(ESTERR(TROUVE(" €";A1));"";SUBSTITUE([COLOR=red]REGEX.STXT[/COLOR](STXT(A1;SI(TROUVE(" €";A1)<=7;1;TROUVE(" €";A1)-7);7);"[0-9\.]{1,}");".";","))

@+

Gael
 

Discussions similaires

Réponses
50
Affichages
5 K

Statistiques des forums

Discussions
312 113
Messages
2 085 430
Membres
102 889
dernier inscrit
monsef JABBOUR