Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Décomposition de chaine

8 réponses
Avatar
PST
Bonjour

Je cherche =E0 d=E9composer ce type de chaine qui se trouve dans la colon=
ne=20
A sur environ 500 lignes.
J'ai essay=E9 avec donn=E9es convertir puis avec split mais je me retrouv=
e=20
toujours avec des erreurs.

Pas faute d'avoir essay=E9

merci

Dans la colonne A
La presse du dimanche (En semaine 7) Montant_HT: 2 Montant_TTC: 12, soit =

14 de diff=E9rence.

R=E9sultat recherch=E9 dans des colonnes s=E9par=E9es:

La presse du dimanche (
En semaine 7
Montant_HT
2
Montant_TTC
12
soit
14
de diff=E9rence.

8 réponses

Avatar
Silve Hervé
Bonjour,

pour "La presse du dimanche"
=GAUCHE(A1;TROUVE("(";A1)-2)
pour "En semaine " et le numéro (7 dans l'exemple)
=STXT(A1;TROUVE("(";A1)+1;TROUVE(")";A1)-TROUVE("(";A1)-1)
pour "Montant_HT"
=STXT(A1;TROUVE("Montant_HT";A1);NBCAR("Montant_HT"))
pour la valeur du montant HT (2 dans l'exemple)
=STXT(A1;TROUVE(":";A1)+2;TROUVE("Montant_TTC";A1)-(TROUVE(":";A1)+3))
pour "Montant_TTC"
=STXT(A1;TROUVE("Montant_TTC";A1);NBCAR("Montant_TTC"))
pour la valeur du montant TTC (14 dans l'exemple)
=STXT(A1;TROUVE(":";A1;TROUVE(":";A1)+1)+2;TROUVE("soit";A1)-TROUVE(":";A1;TROUVE(":";A1)+1)-4)
pour "soit"
=STXT(A1;TROUVE("soit";A1);NBCAR("soit"))
pour la différence
=STXT(A1;TROUVE("soit";A1)+NBCAR("soit")+1;TROUVE("de";A1)-(TROUVE("soit";A1)+NBCAR("soit")+2))
pour "de différence."
=DROITE(A1;NBCAR(A1)+1-TROUVE("de";A1))

Je pense que ceci n'a d'intérêt que pour les valeur numériques et pour le n°
de la semaine, le reste pouvant être inscrit en "dur" dans le colonnes, à
toi de voir. Il est possible de simplifier mais je n'ai pas plus
approfondie.

Hervé.


"PST" a écrit dans le message de
news:4b513b0e$0$971$
Bonjour

Je cherche à décomposer ce type de chaine qui se trouve dans la colonne
A sur environ 500 lignes.
J'ai essayé avec données convertir puis avec split mais je me retrouve
toujours avec des erreurs.

Pas faute d'avoir essayé

merci

Dans la colonne A
La presse du dimanche (En semaine 7) Montant_HT: 2 Montant_TTC: 12, soit
14 de différence.

Résultat recherché dans des colonnes séparées:

La presse du dimanche (
En semaine 7
Montant_HT
2
Montant_TTC
12
soit
14
de différence.
Avatar
Daniel.C
Bonjour.
La macro suivante commence à écrire en ligne A12et en colonne A.
Je pense que tu souhaites plutôt une écriture en ligne. C'est
facilement rectifié.

Sub test()
ctr = 11
tabl = Split([A1], "(")
ctr = ctr + 1
Cells(ctr, 1) = tabl(0) & "("
lg = Len(tabl(0)) + 1
tabl = Split([A1], ")")
ctr = ctr + 1
Cells(ctr, 1) = Right(tabl(0), Len(tabl(0)) - lg)
lg = lg + Len(Cells(ctr, 1))
tabl = Split([A1], ":")
ctr = ctr + 1
Cells(ctr, 1) = Right(tabl(0), Len(tabl(0)) - lg - 1)
lg = Len(tabl(0)) + 2
ctr = ctr + 1
lg1 = InStr(1, [A1], "Montant_TTC") - 1
Cells(ctr, 1) = Mid(tabl(1), 2, lg1 - lg)
ctr = ctr + 1
Cells(ctr, 1) = "Montant_TTC"
tabl = Split([A1], ":")
lg1 = InStr(2, tabl(2), ",") - 2
ctr = ctr + 1
Cells(ctr, 1) = Mid(tabl(2), 2, lg1)
ctr = ctr + 1
Cells(ctr, 1) = "soit"
ctr = ctr + 1
lg = InStr(1, [A1], "soit ") + 5
lg1 = InStr(1, [A1], "de différence")
Cells(ctr, 1) = Mid([A1], lg, lg1 - lg)
ctr = ctr + 1
Cells(ctr, 1) = "de différence."
End Sub

Daniel

Merci

J'ai oublié de préciser une solution vba, si je ne trouve pas, je passerai
par les formules

merci

Le 16/01/2010 11:44, Silve Hervé a écrit :
Bonjour,

pour "La presse du dimanche"
=GAUCHE(A1;TROUVE("(";A1)-2)
pour "En semaine " et le numéro (7 dans l'exemple)
=STXT(A1;TROUVE("(";A1)+1;TROUVE(")";A1)-TROUVE("(";A1)-1)
pour "Montant_HT"
=STXT(A1;TROUVE("Montant_HT";A1);NBCAR("Montant_HT"))
pour la valeur du montant HT (2 dans l'exemple)
=STXT(A1;TROUVE(":";A1)+2;TROUVE("Montant_TTC";A1)-(TROUVE(":";A1)+3))
pour "Montant_TTC"
=STXT(A1;TROUVE("Montant_TTC";A1);NBCAR("Montant_TTC"))
pour la valeur du montant TTC (14 dans l'exemple)
=STXT(A1;TROUVE(":";A1;TROUVE(":";A1)+1)+2;TROUVE("soit";A1)-TROUVE(":";A1;TROUVE(":";A1)+1)-4)

pour "soit"
=STXT(A1;TROUVE("soit";A1);NBCAR("soit"))
pour la différence
=STXT(A1;TROUVE("soit";A1)+NBCAR("soit")+1;TROUVE("de";A1)-(TROUVE("soit";A1)+NBCAR("soit")+2))

pour "de différence."
=DROITE(A1;NBCAR(A1)+1-TROUVE("de";A1))

Je pense que ceci n'a d'intérêt que pour les valeur numériques et pour
le n° de la semaine, le reste pouvant être inscrit en "dur" dans le
colonnes, à toi de voir. Il est possible de simplifier mais je n'ai pas
plus approfondie.

Hervé.


"PST" a écrit dans le message de
news:4b513b0e$0$971$
Bonjour

Je cherche à décomposer ce type de chaine qui se trouve dans la colonne
A sur environ 500 lignes.
J'ai essayé avec données convertir puis avec split mais je me retrouve
toujours avec des erreurs.

Pas faute d'avoir essayé

merci

Dans la colonne A
La presse du dimanche (En semaine 7) Montant_HT: 2 Montant_TTC: 12, soit
14 de différence.

Résultat recherché dans des colonnes séparées:

La presse du dimanche (
En semaine 7
Montant_HT
2
Montant_TTC
12
soit
14
de différence.




Avatar
Silve Hervé
En VBA :

Sub Decouper()

Dim Texte As String
Dim A As String
Dim B As String
Dim C As String
Dim D As String
Dim E As String
Dim F As String
Dim G As String
Dim H As String
Dim I As String

Texte = "La presse du dimanche (En semaine 7) Montant_HT: 2 Montant_TTC: 12,
soit 14 de différence."

A = Left(Texte, InStr(Texte, "(") - 2)
B = Mid(Texte, InStr(Texte, "(") + 1, InStr(Texte, ")") - InStr(Texte,
"(") - 1)
C = Mid(Texte, InStr(Texte, "Montant_HT"), Len("Montant_HT"))
D = Mid(Texte, InStr(Texte, ":") + 2, InStr(Texte, "Montant_TTC") -
(InStr(Texte, ":") + 3))
E = Mid(Texte, InStr(Texte, "Montant_TTC"), Len("Montant_TTC"))
F = Mid(Texte, InStr(InStr(Texte, ":") + 1, Texte, ":") + 2, InStr(Texte,
"soit") - InStr(InStr(Texte, ":") + 1, Texte, ":") - 4)
G = Mid(Texte, InStr(Texte, "soit"), Len("soit"))
H = Mid(Texte, InStr(Texte, "soit") + Len("soit") + 1, InStr(Texte, "de") -
(InStr(Texte, "soit") + Len("soit") + 2))
I = Right(Texte, Len(Texte) + 1 - InStr(Texte, "de"))

Debug.Print A
Debug.Print B
Debug.Print C
Debug.Print D
Debug.Print E
Debug.Print F
Debug.Print G
Debug.Print H
Debug.Print I

End Sub


Hervé.


"PST" a écrit dans le message de
news:4b519ac6$0$17516$
Merci

J'ai oublié de préciser une solution vba, si je ne trouve pas, je
passerai par les formules

merci

Le 16/01/2010 11:44, Silve Hervé a écrit :
Bonjour,

pour "La presse du dimanche"
=GAUCHE(A1;TROUVE("(";A1)-2)
pour "En semaine " et le numéro (7 dans l'exemple)
=STXT(A1;TROUVE("(";A1)+1;TROUVE(")";A1)-TROUVE("(";A1)-1)
pour "Montant_HT"
=STXT(A1;TROUVE("Montant_HT";A1);NBCAR("Montant_HT"))
pour la valeur du montant HT (2 dans l'exemple)
=STXT(A1;TROUVE(":";A1)+2;TROUVE("Montant_TTC";A1)-(TROUVE(":";A1)+3))
pour "Montant_TTC"
=STXT(A1;TROUVE("Montant_TTC";A1);NBCAR("Montant_TTC"))
pour la valeur du montant TTC (14 dans l'exemple)
=STXT(A1;TROUVE(":";A1;TROUVE(":";A1)+1)+2;TROUVE("soit";A1)-TROUVE(":";A1;TROUVE(":";A1)+1)-4)

pour "soit"
=STXT(A1;TROUVE("soit";A1);NBCAR("soit"))
pour la différence
=STXT(A1;TROUVE("soit";A1)+NBCAR("soit")+1;TROUVE("de";A1)-(TROUVE("soit";A1)+NBCAR("soit")+2))

pour "de différence."
=DROITE(A1;NBCAR(A1)+1-TROUVE("de";A1))

Je pense que ceci n'a d'intérêt que pour les valeur numériques et pour
le n° de la semaine, le reste pouvant être inscrit en "dur" dans le
colonnes, à toi de voir. Il est possible de simplifier mais je n'ai pas
plus approfondie.

Hervé.


"PST" a écrit dans le message de
news:4b513b0e$0$971$
Bonjour

Je cherche à décomposer ce type de chaine qui se trouve dans la colonne
A sur environ 500 lignes.
J'ai essayé avec données convertir puis avec split mais je me retrouve
toujours avec des erreurs.

Pas faute d'avoir essayé

merci

Dans la colonne A
La presse du dimanche (En semaine 7) Montant_HT: 2 Montant_TTC: 12, soit
14 de différence.

Résultat recherché dans des colonnes séparées:

La presse du dimanche (
En semaine 7
Montant_HT
2
Montant_TTC
12
soit
14
de différence.



Avatar
Modeste
Bonsour® PST avec ferveur ;o))) vous nous disiez :

Dans la colonne A
La presse du dimanche (En semaine 7) Montant_HT: 2 Montant_TTC: 12,
soit 14 de différence.



Silve Hervé à répondu :
Je pense que ceci n'a d'intérêt que pour les valeur numériques et pour le n°
de la semaine, le reste pouvant être inscrit en "dur" dans le colonnes,



;o)))
sous réserve que tous les enregistrements soient du même type
ET
qu'il y ait toujours 4 groupes de chiffres(sans décimale)
alors
il suffira ensuite de répartir via la fonction SPLIT

Function numseuls(target) As String
dim x as string, y as string
x = ""
For i = 1 To Len(target)
y = Mid(target, i, 1)
x = x & IIf(IsNumeric(y), y, " ")
Next
numseuls = Application.Trim(x)
End Function
Avatar
Modeste
Bonsour® PST avec ferveur ;o))) vous nous disiez :

Une autre approche

résolu

intéressant la fonction




;o)))

Function Decoupe(target As String, position As Integer)
Dim i As Integer, x As String, y As String, numseuls As String
numseuls = "" : x=""
'-----------
For i = 1 To Len(target)
y = Mid(target, i, 1)
x = x & IIf(IsNumeric(y), y, " ")
Next
numseuls = Application.Trim(x)
'--------------
Decoupe = Split(numseuls, " ")(position)
End Function

utilisation :
Þcoupe(A1;0)
Þcoupe(A1;1)
Þcoupe(A1;2)
Þcoupe(A1;3)
Avatar
PST
Merci

J'ai oublié de préciser une solution vba, si je ne trouve pas, je
passerai par les formules

merci

Le 16/01/2010 11:44, Silve Hervé a écrit :
Bonjour,

pour "La presse du dimanche"
=GAUCHE(A1;TROUVE("(";A1)-2)
pour "En semaine " et le numéro (7 dans l'exemple)
=STXT(A1;TROUVE("(";A1)+1;TROUVE(")";A1)-TROUVE("(";A1)-1)
pour "Montant_HT"
=STXT(A1;TROUVE("Montant_HT";A1);NBCAR("Montant_HT"))
pour la valeur du montant HT (2 dans l'exemple)
=STXT(A1;TROUVE(":";A1)+2;TROUVE("Montant_TTC";A1)-(TROUVE(":";A1)+3) )
pour "Montant_TTC"
=STXT(A1;TROUVE("Montant_TTC";A1);NBCAR("Montant_TTC"))
pour la valeur du montant TTC (14 dans l'exemple)
=STXT(A1;TROUVE(":";A1;TROUVE(":";A1)+1)+2;TROUVE("soit";A1)-TROUVE(" :";A1;TROUVE(":";A1)+1)-4)

pour "soit"
=STXT(A1;TROUVE("soit";A1);NBCAR("soit"))
pour la différence
=STXT(A1;TROUVE("soit";A1)+NBCAR("soit")+1;TROUVE("de";A1)-(TROUVE("s oit";A1)+NBCAR("soit")+2))

pour "de différence."
=DROITE(A1;NBCAR(A1)+1-TROUVE("de";A1))

Je pense que ceci n'a d'intérêt que pour les valeur numériques et pour
le n° de la semaine, le reste pouvant être inscrit en "dur" dans le
colonnes, à toi de voir. Il est possible de simplifier mais je n'ai p as
plus approfondie.

Hervé.


"PST" a écrit dans le message de
news:4b513b0e$0$971$
Bonjour

Je cherche à décomposer ce type de chaine qui se trouve dans la col onne
A sur environ 500 lignes.
J'ai essayé avec données convertir puis avec split mais je me retro uve
toujours avec des erreurs.

Pas faute d'avoir essayé

merci

Dans la colonne A
La presse du dimanche (En semaine 7) Montant_HT: 2 Montant_TTC: 12, soi t
14 de différence.

Résultat recherché dans des colonnes séparées:

La presse du dimanche (
En semaine 7
Montant_HT
2
Montant_TTC
12
soit
14
de différence.



Avatar
PST
Le 16/01/2010 12:24, Silve Hervé a écrit :
En VBA :

Sub Decouper()

Dim Texte As String
Dim A As String
Dim B As String
Dim C As String
Dim D As String
Dim E As String
Dim F As String
Dim G As String
Dim H As String
Dim I As String

Texte = "La presse du dimanche (En semaine 7) Montant_HT: 2 Montant_T TC:
12, soit 14 de différence."

A = Left(Texte, InStr(Texte, "(") - 2)
B = Mid(Texte, InStr(Texte, "(") + 1, InStr(Texte, ")") - InStr(Texte ,
"(") - 1)
C = Mid(Texte, InStr(Texte, "Montant_HT"), Len("Montant_HT"))
D = Mid(Texte, InStr(Texte, ":") + 2, InStr(Texte, "Montant_TTC") -
(InStr(Texte, ":") + 3))
E = Mid(Texte, InStr(Texte, "Montant_TTC"), Len("Montant_TTC"))
F = Mid(Texte, InStr(InStr(Texte, ":") + 1, Texte, ":") + 2,
InStr(Texte, "soit") - InStr(InStr(Texte, ":") + 1, Texte, ":") - 4)
G = Mid(Texte, InStr(Texte, "soit"), Len("soit"))
H = Mid(Texte, InStr(Texte, "soit") + Len("soit") + 1, InStr(Texte,
"de") - (InStr(Texte, "soit") + Len("soit") + 2))
I = Right(Texte, Len(Texte) + 1 - InStr(Texte, "de"))

Debug.Print A
Debug.Print B
Debug.Print C
Debug.Print D
Debug.Print E
Debug.Print F
Debug.Print G
Debug.Print H
Debug.Print I

End Sub


Hervé.


"PST" a écrit dans le message de
news:4b519ac6$0$17516$
Merci

J'ai oublié de préciser une solution vba, si je ne trouve pas, je
passerai par les formules

merci

Le 16/01/2010 11:44, Silve Hervé a écrit :
Bonjour,

pour "La presse du dimanche"
=GAUCHE(A1;TROUVE("(";A1)-2)
pour "En semaine " et le numéro (7 dans l'exemple)
=STXT(A1;TROUVE("(";A1)+1;TROUVE(")";A1)-TROUVE("(";A1)-1)
pour "Montant_HT"
=STXT(A1;TROUVE("Montant_HT";A1);NBCAR("Montant_HT"))
pour la valeur du montant HT (2 dans l'exemple)
=STXT(A1;TROUVE(":";A1)+2;TROUVE("Montant_TTC";A1)-(TROUVE(":";A1)+3 ))
pour "Montant_TTC"
=STXT(A1;TROUVE("Montant_TTC";A1);NBCAR("Montant_TTC"))
pour la valeur du montant TTC (14 dans l'exemple)
=STXT(A1;TROUVE(":";A1;TROUVE(":";A1)+1)+2;TROUVE("soit";A1)-TROUVE( ":";A1;TROUVE(":";A1)+1)-4)


pour "soit"
=STXT(A1;TROUVE("soit";A1);NBCAR("soit"))
pour la différence
=STXT(A1;TROUVE("soit";A1)+NBCAR("soit")+1;TROUVE("de";A1)-(TROUVE(" soit";A1)+NBCAR("soit")+2))


pour "de différence."
=DROITE(A1;NBCAR(A1)+1-TROUVE("de";A1))

Je pense que ceci n'a d'intérêt que pour les valeur numériques e t pour
le n° de la semaine, le reste pouvant être inscrit en "dur" dans l e
colonnes, à toi de voir. Il est possible de simplifier mais je n'ai pas
plus approfondie.

Hervé.


"PST" a écrit dans le message de
news:4b513b0e$0$971$
Bonjour





la version de DanielC me donne une erreur
oui il faut afficher dans les colonnes adjacentes

la version de Silve Hervé me donne ce que veux, il faut que je l'in
compore dans une boucle de la ligne 6, à la dernière cellule de la co lonne.





Je cherche à décomposer ce type de chaine qui se trouve dans la co lonne
A sur environ 500 lignes.
J'ai essayé avec données convertir puis avec split mais je me retr ouve
toujours avec des erreurs.

Pas faute d'avoir essayé

merci

Dans la colonne A
La presse du dimanche (En semaine 7) Montant_HT: 2 Montant_TTC: 12, so it
14 de différence.

Résultat recherché dans des colonnes séparées:

La presse du dimanche (
En semaine 7
Montant_HT
2
Montant_TTC
12
soit
14
de différence.







Avatar
PST
Une autre approche

résolu

intéressant la fonction

merci



Jean-Marcel

Sub Eclatement()

' Changer range("A1") et compteur ligne 1 pour debut macro
' les deux cgiffre doit être pareilles

valeur = Range("A1")
For CompteurDeLigne = 1 To Range("A65536").End(xlUp).Row
valeur = Cells(CompteurDeLigne, 1)
valeur = Replace(valeur, "(", "*")
valeur = Replace(valeur, ")", "*")
valeur = Replace(valeur, ":", "*")
valeur = Replace(valeur, ",", "*")
Tablo = Split(valeur, "*")
For K = 0 To UBound(Tablo)
If K >= 4 Then
Var = 1
Else
Var = 0
End If
Cells(CompteurDeLigne, K + 2 + Var) = Tablo(K)
Next
valeur = Cells(CompteurDeLigne, 5)
Cells(CompteurDeLigne, 5) = Split(valeur, " ")(1)
Cells(CompteurDeLigne, 6) = Split(valeur, " ")(2)
valeur = Cells(CompteurDeLigne, 8)
Cells(CompteurDeLigne, 8) = Split(valeur, " ")(1)
Cells(CompteurDeLigne, 9) = Split(valeur, " ")(2)
Cells(CompteurDeLigne, 10) = Split(valeur, " ")(3) & " " &
Split(valeur, " ")(4)
Next



Le 16/01/2010 13:13, Modeste a écrit :
Bonsour® PST avec ferveur ;o))) vous nous disiez :

Dans la colonne A
La presse du dimanche (En semaine 7) Montant_HT: 2 Montant_TTC: 12,
soit 14 de différence.



Silve Hervé à répondu :
Je pense que ceci n'a d'intérêt que pour les valeur numériques e t pour le n°
de la semaine, le reste pouvant être inscrit en "dur" dans le colonn es,



;o)))
sous réserve que tous les enregistrements soient du même type
ET
qu'il y ait toujours 4 groupes de chiffres(sans décimale)
alors
il suffira ensuite de répartir via la fonction SPLIT

Function numseuls(target) As String
dim x as string, y as string
x = ""
For i = 1 To Len(target)
y = Mid(target, i, 1)
x = x& IIf(IsNumeric(y), y, " ")
Next
numseuls = Application.Trim(x)
End Function