OVH Cloud OVH Cloud

Utilisation de Split

7 réponses
Avatar
Pounet95
Bonsoir,
Dans une liste de chaines de caractères, je voudrais pour chaque item en
extraire une partie.
Ces chaines de caractères contiennent au minima 1 tiret et au maxima 4.
Comment connaitre le rang du tiret le plus à droite dans la chaine ( le
dernier donc ) afin
d'extraire les parties situées de part et d'autre.
Il y a quelques temps, il me semble avoir vu que Split pourrait faire
l'affaire mais je ne comprends pas
bien la syntaxe et surtout comment je m'en sers ensuite.
Exemple : TOUT-EN-UN-SEUL-MORCEAU devient TOUT-EN-UN-SEUL et MORCEAU
Merci de vos réponses

XL2000, XP Pro
--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/

7 réponses

Avatar
GVentre
Re,

en VBA, tu peux utiliser,:

Position = InStrRev(Range("A1"), "-")
Pour TOUT-EN-UN-SEUL-MORCEAU, tu trouveras Position = 16

Cordialement,

GVentre




Bonsoir,
Dans une liste de chaines de caractères, je voudrais pour chaque item
en extraire une partie.
Ces chaines de caractères contiennent au minima 1 tiret et au maxima 4.
Comment connaitre le rang du tiret le plus à droite dans la chaine (
le dernier donc ) afin
d'extraire les parties situées de part et d'autre.
Il y a quelques temps, il me semble avoir vu que Split pourrait faire
l'affaire mais je ne comprends pas
bien la syntaxe et surtout comment je m'en sers ensuite.
Exemple : TOUT-EN-UN-SEUL-MORCEAU devient TOUT-EN-UN-SEUL et MORCEAU
Merci de vos réponses

XL2000, XP Pro


Avatar
Daniel
Bonjour.
essaie :
Coupe = Split(Var, "-")
For Each Item In Coupe
MsgBox Coupe(i)
i = i + 1
Next
Daniel
"Pounet95" a écrit dans le message de news:
%23frCBfX$
Bonsoir,
Dans une liste de chaines de caractères, je voudrais pour chaque item en
extraire une partie.
Ces chaines de caractères contiennent au minima 1 tiret et au maxima 4.
Comment connaitre le rang du tiret le plus à droite dans la chaine ( le
dernier donc ) afin
d'extraire les parties situées de part et d'autre.
Il y a quelques temps, il me semble avoir vu que Split pourrait faire
l'affaire mais je ne comprends pas
bien la syntaxe et surtout comment je m'en sers ensuite.
Exemple : TOUT-EN-UN-SEUL-MORCEAU devient TOUT-EN-UN-SEUL et MORCEAU
Merci de vos réponses

XL2000, XP Pro
--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/



Avatar
Pounet95
Re,
Merci ça roule !
A la prochaine fois.

--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/

"Pounet95" a écrit dans le message de news:
%23frCBfX$
Bonsoir,
Dans une liste de chaines de caractères, je voudrais pour chaque item en
extraire une partie.
Ces chaines de caractères contiennent au minima 1 tiret et au maxima 4.
Comment connaitre le rang du tiret le plus à droite dans la chaine ( le
dernier donc ) afin
d'extraire les parties situées de part et d'autre.
Il y a quelques temps, il me semble avoir vu que Split pourrait faire
l'affaire mais je ne comprends pas
bien la syntaxe et surtout comment je m'en sers ensuite.
Exemple : TOUT-EN-UN-SEUL-MORCEAU devient TOUT-EN-UN-SEUL et MORCEAU
Merci de vos réponses

XL2000, XP Pro
--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/



Avatar
anomymousA
bonsoir,

une autre méthode que celles déjà indiquées.
en imaginant que ton texte soit dans cells(4,3) mais c'est evidemment
changeable.

On Error Resume Next
For i = UBound(Split(StrReverse(Cells(4, 3).Value), "-")) To 1 Step -1
If i = UBound(Split(StrReverse(Cells(4, 3).Value), "-")) Then
texte = StrReverse(Split(StrReverse(Cells(4, 3).Value), "-")(i))
Else
texte = texte & "-" & StrReverse(Split(StrReverse(Cells(4,
3).Value), "-")(i))
End If
Next

MsgBox texte

A+


Bonsoir,
Dans une liste de chaines de caractères, je voudrais pour chaque item en
extraire une partie.
Ces chaines de caractères contiennent au minima 1 tiret et au maxima 4.
Comment connaitre le rang du tiret le plus à droite dans la chaine ( le
dernier donc ) afin
d'extraire les parties situées de part et d'autre.
Il y a quelques temps, il me semble avoir vu que Split pourrait faire
l'affaire mais je ne comprends pas
bien la syntaxe et surtout comment je m'en sers ensuite.
Exemple : TOUT-EN-UN-SEUL-MORCEAU devient TOUT-EN-UN-SEUL et MORCEAU
Merci de vos réponses

XL2000, XP Pro
--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/




Avatar
Pounet95
Bonsoir,
Merci à toi aussi.
Au passage je note le UBound qui ( je n'ai pas cherché) doit avoir son
pendant avec LBound je suppose
Bonne soirée

--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/

"anomymousA" a écrit dans le message
de news:
bonsoir,

une autre méthode que celles déjà indiquées.
en imaginant que ton texte soit dans cells(4,3) mais c'est evidemment
changeable.

On Error Resume Next
For i = UBound(Split(StrReverse(Cells(4, 3).Value), "-")) To 1 Step -1
If i = UBound(Split(StrReverse(Cells(4, 3).Value), "-")) Then
texte = StrReverse(Split(StrReverse(Cells(4, 3).Value), "-")(i))
Else
texte = texte & "-" & StrReverse(Split(StrReverse(Cells(4,
3).Value), "-")(i))
End If
Next

MsgBox texte

A+


Bonsoir,
Dans une liste de chaines de caractères, je voudrais pour chaque item en
extraire une partie.
Ces chaines de caractères contiennent au minima 1 tiret et au maxima 4.
Comment connaitre le rang du tiret le plus à droite dans la chaine ( le
dernier donc ) afin
d'extraire les parties situées de part et d'autre.
Il y a quelques temps, il me semble avoir vu que Split pourrait faire
l'affaire mais je ne comprends pas
bien la syntaxe et surtout comment je m'en sers ensuite.
Exemple : TOUT-EN-UN-SEUL-MORCEAU devient TOUT-EN-UN-SEUL et MORCEAU
Merci de vos réponses

XL2000, XP Pro
--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/






Avatar
AV
Exemple : TOUT-EN-UN-SEUL-MORCEAU devient TOUT-EN-UN-SEUL et MORCEAU


=SUBSTITUE(SUBSTITUE(A1;"-";"^^";NBCAR(A1)-NBCAR(SUBSTITUE(A1;"-";"")));"^^";"
et ")

AV

Avatar
anomymousA
re,

en effet, son petit frère est Lbound (comme low bound ou lowest , va savoir
: limite basse in french in the text à opposer à Ubound comme Up bound). Dans
l'exemple transmis, il n'est pas besoin d'utiliser LBound du split car Lbound
contient evidemment le dernier morceau de texte que tu cherches à recuperer
et pour l'obtenir, il suffit d'invoquer le split(tableau)(0) .

Split en anglais peut avoir comme siginification partager, dechirer, rompre.
En conséquence dans le cas de figure qui nous interesse, Split pour VBA n'est
jamais qu'une manière de créer un tableau monodimensionnel de base 0 (c.à.d
le 1er indice a comme valeur 0) dont les élements sont créés par le partage
de quelque chose selon un critère de discrimination, en l'occurence ici le
caractère "-".
Pour la comparaison du critère de discrimination, il existe de soptions qui
sont bien expliquées dans l'aide de VBA.

A+


Bonsoir,
Merci à toi aussi.
Au passage je note le UBound qui ( je n'ai pas cherché) doit avoir son
pendant avec LBound je suppose
Bonne soirée

--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/

"anomymousA" a écrit dans le message
de news:
bonsoir,

une autre méthode que celles déjà indiquées.
en imaginant que ton texte soit dans cells(4,3) mais c'est evidemment
changeable.

On Error Resume Next
For i = UBound(Split(StrReverse(Cells(4, 3).Value), "-")) To 1 Step -1
If i = UBound(Split(StrReverse(Cells(4, 3).Value), "-")) Then
texte = StrReverse(Split(StrReverse(Cells(4, 3).Value), "-")(i))
Else
texte = texte & "-" & StrReverse(Split(StrReverse(Cells(4,
3).Value), "-")(i))
End If
Next

MsgBox texte

A+


Bonsoir,
Dans une liste de chaines de caractères, je voudrais pour chaque item en
extraire une partie.
Ces chaines de caractères contiennent au minima 1 tiret et au maxima 4.
Comment connaitre le rang du tiret le plus à droite dans la chaine ( le
dernier donc ) afin
d'extraire les parties situées de part et d'autre.
Il y a quelques temps, il me semble avoir vu que Split pourrait faire
l'affaire mais je ne comprends pas
bien la syntaxe et surtout comment je m'en sers ensuite.
Exemple : TOUT-EN-UN-SEUL-MORCEAU devient TOUT-EN-UN-SEUL et MORCEAU
Merci de vos réponses

XL2000, XP Pro
--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/