fonction split

supercrapaud

XLDnaute Occasionnel
Bonjour à tout le monde.

Après avoir cherché sur le forum sans avoir trouvé (je n'ai pas ouvert tous les sujets non plus ^^) je reviens vous concernant la fonction SPLIT. Je cherche juste à connaître le code me permettant de faire l'opération suivante :
Dans une cellule j'ai comme données 123;456;789. Je veux juste pouvoir éclater ces données dans 3 cellules A1, A2 et A3 mais j'y arrive pas. Pouvez-vous m'aider SVP. D'avance merci à vous.
 

JNP

XLDnaute Barbatruc
Re : fonction split

Bonjour SuperCrapaud :),
Il y a un menu Données -> Convertir qui permet de le faire sans programmation.
Mais si tu veux passer par VBA, en admettant que ta série soit en B1
Code:
Range("A1") = Split(Range("B1"), ";")(0)
Range("A2") = Split(Range("B1"), ";")(1)
Range("A3") = Split(Range("B1"), ";")(3)
mais attention, s'il n'y a que 2 valeurs, ça plantera :p...
Plus logiquement, j'utiliserais
Code:
Tableau = Split(Range("B1"))
For I = LBound(Tableau) To UBound(Tableau)
Range("A" & I) = Tableau(I)
Next I
Mais s'il y a plus de valeurs, ça ne s'arrêtera pas en A3 :D...
Bonne soirée :cool:
 

ROGER2327

XLDnaute Barbatruc
Re : fonction split

Bonsoir à tous
Code:
[COLOR="DarkSlateGray"][B]Sub toto()
Dim oCel As Range
   For Each oCel In Selection.Cells
      oCel.Offset(0, 1).Resize(1, 3).Value = Split(oCel.Value & ";;", ";")
   Next
End Sub[/B][/COLOR]
Sélectionnez une ou plusieurs cellules de données.
Exécutez toto.
Les données seront "éclatées" dans les trois colonnes à droite de chacune d'entre elles.

En supprimant .Offset(0, 1) ou en le remplaçant par .Offset(0, 0), les données seront "éclatées" dans la colonne où elles sont prises et dans les deux colonnes à droite.

On a quelque chose de semblable pour "éclater" les données sur trois lignes :
Code:
[COLOR="DarkSlateGray"][B]Sub tata()
Dim oCel As Range
   For Each oCel In Selection.Cells
      oCel.Offset(1, 0).Resize(3, 1).Value = WorksheetFunction.Transpose(Split(oCel.Value & ";;", ";"))
   Next
End Sub[/B][/COLOR]
ROGER2327
#3849


Jeudi 19 Gidouille 137 (Saint Sein, tautologue, SQ)
15 Messidor An CCXVIII
2010-W26-6T21:46:20Z
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : fonction split

Suite...
S'il s'agit d'"éclater" la seule cellule B1 dans la plage A1:A3 :
Code:
[COLOR="DarkSlateGray"][B]Sub titi()
   With [B1]: .Offset(0, -1).Resize(3, 1).Value = WorksheetFunction.Transpose(Split(.Value & ";;", ";")): End With
End Sub[/B][/COLOR]
ROGER2327
#3850


Jeudi 19 Gidouille 137 (Saint Sein, tautologue, SQ)
15 Messidor An CCXVIII
2010-W26-6T22:43:53Z
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : fonction split

Re...
Bonjour à tous,

peut être une autre solution ainsi :

Code:
Range("A1:A3").Value = Application.Transpose(Split(Range("B1").Value, ";"))

bonne journée
@+
  1. Plante si B1 est vide.
  2. Renvoie trois fois a si B1 contient a.
  3. Renvoie a, b et #N/A si B1 contient a;b.
ROGER2327
#3851


Vendredi 20 Gidouille 137 (Saint Périnée, zélateur, SQ)
16 Messidor An CCXVIII
2010-W26-7T08:59:54Z
 
G

Guest

Guest
Re : fonction split

Bonjour supercrapaud,

Jnp,Pierrot,Roger,

Comme y'a pas grand chose à se mettre sous la dent et avant de racrocher je m'y mets aussi:

Code:
Sub SplitCells()
     Dim t1, t2
    Dim i As Integer
    t1 = Selection.Cells
    On Error Resume Next
    For Each c In Selection
        t = Split(c, ";")
        c.Offset(, 1).Resize(LBound(t) + 1, UBound(t) + 1).Value = t
        Err.Clear
    Next c

End Sub

A+
 
Dernière modification par un modérateur:

supercrapaud

XLDnaute Occasionnel
Re : fonction split

Bonjour à vous tous !

Je vous remercie pour toutes ces réponses qui semblent déchaîner les passions ! Moi je voulais juste pouvoir éclater ma cellule B1 dans la colonne A. J'ai pris comme exemple A1, A2, et A3 mais cela pourrait être une autre adresse. Comme ma cellule B1 peux avoir un nombre de données différent, je voulais juste pouvoir l'éclater en colonne à partir de A1 et les autres qui suivent.

Alors ma question est la suivante : Quel est le meilleur (et le plus court) code à utiliser ?:D.

En vous remerciant tous par avance.
 

JNP

XLDnaute Barbatruc
Re : fonction split

Re :),
Alors ma question est la suivante : Quel est le meilleur (et le plus court) code à utiliser ?:D.
Aucun, et tous :p...
Toutes les solutions sont bonnes, même celle de Pierrot que je salue, en même temps que les autres (à part la partie de la mienne corrigée par FG ;)), et correspondent à ta question de départ.
La plus courte, ben, si tu t'attaques à VBA par ce côté là, je te souhaites bien du plaisir :eek:...
Aucun, puisque ta question de base n'était pas assez précise :D !
Comme je suis joueur (comme Ges), une solution en fonction personnalisée (valable jusque 20 valeurs)
Code:
Function Eclate(Chaine As String)
Application.Volatile
Dim I As Integer, Tableau(20), Temp
If Chaine <> "" Then
Temp = Split(Chaine, ";")
For I = LBound(Temp) To UBound(Temp)
Tableau(I) = Temp(I)
Next I
For I = UBound(Temp) + 1 To 20
Tableau(I) = ""
Next I
Eclate = Tableau
Else
Eclate = ""
End If
End Function
à valider avec Ctrl+Maj+Enter, car matricielle.
Voir fichier joint.
Bonne soirée :cool:
 

Pièces jointes

  • Eclatement.xls
    47.5 KB · Affichages: 109
  • Eclatement.xls
    47.5 KB · Affichages: 104
  • Eclatement.xls
    47.5 KB · Affichages: 111

ROGER2327

XLDnaute Barbatruc
Re : fonction split

Bonsoir à tous

Re...
Bonjour à vous tous !

(...) Moi je voulais juste pouvoir éclater ma cellule B1 dans la colonne A. J'ai pris comme exemple A1, A2, et A3 mais cela pourrait être une autre adresse. Comme ma cellule B1 peux avoir un nombre de données différent, je voulais juste pouvoir l'éclater en colonne à partir de A1 et les autres qui suivent. (...)
Le problème change, la réponse change...
Code:
[COLOR="DarkSlateGray"][B]Sub tati()
Dim tmp
   With [B1]
      tmp = Split(.Value & ";", ";")
      .Offset(0, -1).Resize(UBound(tmp), 1).Value = WorksheetFunction.Transpose(tmp)
   End With
End Sub[/B][/COLOR]
ROGER2327
#3854


Vendredi 20 Gidouille 137 (Saint Périnée, zélateur, SQ)
16 Messidor An CCXVIII
2010-W26-7T20:57:19Z
 

jebibo

XLDnaute Occasionnel
Re : fonction split

Bonjour
Si il y a un caractère entre chaque serie 123;456;678 soit ; ou autre va dans donner convertir coche délimité et ensuite à autre insere ; suivant et le tout sera sur trois colones.
Espérant que cela poura t'aider
 

Discussions similaires

Statistiques des forums

Discussions
312 814
Messages
2 092 335
Membres
105 369
dernier inscrit
Caradec frederic