Extraire chaines de caractères entre deux caractères différents

Bonjour à tous,

J'aimerai automatiser l'extraction des pourcentages de composition de produits. Toutes les compositions sont construites de la façon suivante dans une même cellule :

Polyamide=80%|Elasthanne=15%|Coton=5%

J'ai besoin d'extraire pour chaque matière le pourcentage associé, qui est toujours entre un « = » et un «| », mais pour des matières différentes. Par exemple pour le Polyamide j'ai besoin d'extraire "80%", pour l'élasthanne "15%" et logiquement pour le coton "5%".

Je cherche une formule excel (et non VBA) si possible, qui permette d’extraire chaque pourcentage quel qu’il soit (il varie d’un produit à l’autre entre 1 et 99).

Merci d’avance pour votre aide,

Bonjour

Faisable par PowerQuery intégré à Excel.

Sinon par formule cela dépend du nombre de composants et du nombre de lignes : cela peut ramer en cas de volume

Joint un exemple REPRESENTATIF

Bonjour,

Le nombre de composant varie entre 2 et 4.

Cela concernera +/- une 100 aine de réf. Voici un exemple d'échantillon en pj.

Merci,

21classeur1.xlsx (10.74 Ko)

Bonjour

2 solutions ci-joint

  • soit 2 formules (une pour le 1er composant et une pour tous les autres)
  • soit PowerQuery intégré à Excel
24decomposer.xlsx (31.21 Ko)

Edit : tu parle % mais sauf à créer une matrice des composants et la remplir il faut bien citer le composant

La forme de la restitution fait défaut dans ta demande

Bonjour X.L, Bonjour Chris

Pour enrichir, autre possibilité

Sub test()
Dim mat As Object

    Range("A1").CurrentRegion.Offset(0, 1).ClearContents
    prod = Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row).Value

    Set mat = CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(prod)
        Tbl = Split(prod(i, 1) & "|", "|")
        For j = 0 To UBound(Tbl) - 1
            mat(Split(Split(Tbl(j), "~")(1), ("="))(0)) = ""
        Next
    Next
    Tbl = mat.keys
    QuickSort Tbl
    mat.RemoveAll
    For i = LBound(Tbl) To UBound(Tbl)
        mat(Tbl(i)) = i
    Next i

    col = 2
    For Each cle In mat.keys
        Cells(1, col) = cle '& mat(cle)
        col = col + 1
    Next

    For i = 1 To UBound(prod)
        Tbl = Split(prod(i, 1) & "|", "|")
        For j = 0 To UBound(Tbl) - 1
            col = mat(Split(Split(Tbl(j), "~")(1), ("="))(0))
            Cells(i + 1, col + 2) = Split(Split(Tbl(j), "=")(1), ("%"))(0) & " %"
        Next
    Next

End Sub
16classeur1.xlsm (21.19 Ko)

Bonjour à tous les deux,

Merci pour votre aide !

Chris, j'ai modifié tes formules pour n'avoir que le pourcentage, tout fonctionne très bien.

Et merci pour la macro Steelson, qui fonctionne également.

X.L

Rechercher des sujets similaires à "extraire chaines caracteres entre deux differents"