Décomposition de chaine

Le
PST
Bonjour

Je cherche à décomposer ce type de chaine qui se trouve dans la colon=
ne
A sur environ 500 lignes.
J'ai essayé avec données convertir puis avec split mais je me retrouv=
e
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.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Silve Hervé
Le #20985241
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" 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.
Daniel.C
Le #20985231
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" 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.




Silve Hervé
Le #20985351
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" 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" 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.



Modeste
Le #20985751
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
Modeste
Le #20986061
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)
PST
Le #20985221
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" 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.



PST
Le #20985741
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" 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" 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.







PST
Le #20985961
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


Publicité
Poster une réponse
Anonyme