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.
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
[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]
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]
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
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 ?.
Aucun, et tous ...
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 ...
Aucun, puisque ta question de base n'était pas assez précise !
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
(...) 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. (...)
[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]
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