Fonction SPLIT
Résolu
Bonjour,
J'ai n cellules dans une colonne. Les n cellules contiennent de 1 à n lignes.
Je souhaite dissocier ces lignes dans une autre colonne.
La macro fonctionne si je définie une cellule (ex. B1). En revanche pour une plage, j'ai toujours une erreur.
Ci-dessous la macro en question :
Merci de votre aide !
J'ai n cellules dans une colonne. Les n cellules contiennent de 1 à n lignes.
Je souhaite dissocier ces lignes dans une autre colonne.
La macro fonctionne si je définie une cellule (ex. B1). En revanche pour une plage, j'ai toujours une erreur.
Ci-dessous la macro en question :
Sub decoupe2()
Dim s As Variant, i As Byte
s = Split(Range("B" & Rows.Count), Chr(10))
For i = 0 To UBound(s)
Cells(i + 1, 3).Value = s(i)
Next i
End Sub
Merci de votre aide !
4 réponses
-
ModérateurPetite modif ddu code de Thev (au cas ou il y a dans une même cellule 2 passages à la ligne) :
Sub dissocier() Dim xl As Excel.Application Dim cellule As Range Dim nb_lignes As Integer, i As Long Dim s() As String Set xl = Application For Each cellule In Columns("B").SpecialCells(xlCellTypeConstants) s = Split(cellule, Chr(10)) nb_lignes = UBound(s) + 1 i = cellule.Row ' numéro de ligne de la plage Cells(i, "C").Resize(, UBound(s) + 1).Value = xl.Transpose(xl.Transpose(s)) Next cellule End Sub
Et avec les données à la suite en colonne C :Sub MachinTruc() Dim DL As Long, DLB As Long, Lig As Long, s As Variant, i As Byte DL = Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row DLB = 2 ' ==> 1ère ligne de restitution colonne C For Lig = 1 To DL If InStr(Range("B" & Lig), Chr(10)) > 0 Then s = Split(Range("B" & Lig), Chr(10)) For i = 0 To UBound(s) Cells(DLB, 3).Value = s(i) DLB = DLB + 1 Next i Else Cells(DLB, 3).Value = Cells(Lig, 2) DLB = DLB + 1 End If Next Lig End Sub
-
-
-
Modérateur@thevCela dit, mon code met bien les données à la suite, de la colonne C à la colonne C+n
Oui thev.
J'ai bien vu ça...
A++
-