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 :

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

  1. Modérateur
    Petite 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

    0
    1. modif de mon code OK.
      Cela dit, mon code met bien les données à la suite, de la colonne C à la colonne C+n
      0
    2. Vous êtes au top !
      Merci les gars
      0
    3. 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++
      0