Eclater contenu d'une cellule séparée par des virgules en ligne

Fitia -  
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Voilà, avec de l'aide sur le forum, j'ai pu arriver à avoir ce code pour éclater le contenu de ma cellule H sur plusieurs lignes avec les données des colonnes dupliquées à chaque ligne. Toutefois, j'ai un dernier petit souci, quand ma colonne H est vide, la ligne contenant celle-ci n'est pas reprise dans ma feuille de destination. Quelqu'un pourrait-il m'aider à améliorer ce code???

Merci bien

Sub EclaterHsenligne()
Dim C As Range, Tabl, Plage As Range, Ligne As Long
With Sheets("Worklogs")
Set Plage = .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp))
End With
With Sheets("My data")
For Each C In Plage
Tabl = Split(C.Offset(, 11), ";")
.[A:C].NumberFormat = "@"
For i = 0 To UBound(Tabl)
Ligne = Ligne + 1
.Range(.Cells(Ligne, 1), .Cells(Ligne, 11)).Value = C.Resize(, 11).Value
.Cells(Ligne, 12) = Tabl(i)
.Range(.Cells(Ligne, 13), .Cells(Ligne, 44)).Value = C.Offset(0, 12).Resize(, 32).Value
Next i
Next C
.[H:H].EntireColumn.AutoFit
End With
'
End Sub
A voir également:

1 réponse

f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 714
 
Bonjour,

Sub EclaterHsenligne()
Dim C As Range, Tabl, Plage As Range, Ligne As Long
    With Sheets("Worklogs")
        Set Plage = .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp))
    End With
    With Sheets("My data")
        For Each C In Plage
            If C.Offset(, 11) <> Empty Then 'cellule pas vide
                Tabl = Split(C.Offset(, 11), ";")
                .[A:C].NumberFormat = "@"
                For i = 0 To UBound(Tabl)
                    Ligne = Ligne + 1
                    .Range(.Cells(Ligne, 1), .Cells(Ligne, 11)).Value = C.Resize(, 11).Value
                    .Cells(Ligne, 12) = Tabl(i)
                    .Range(.Cells(Ligne, 13), .Cells(Ligne, 44)).Value = C.Offset(0, 12).Resize(, 32).Value
                Next i
            Else
                Ligne = Ligne + 1
            End If
        Next C
        .[H:H].EntireColumn.AutoFit
    End With
'
End Sub
0
Fitia
 
Bonjour f894009,

Merci de ta réponse mais j'ai fais un test avec ton code mais ça n'a rien changé du tout, les lignes dont la colonnes à éclater sont vide ne sont pas reprises dans la feuille de destination 'My Data'
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 714 > Fitia
 
Bonjour,

Je viens de comprendre ce qui ne va pas,je regarde la chose

ceci devrait aller:

Sub EclaterHsenligne()
Dim C As Range, Tabl, Plage As Range, Ligne As Long
    With Sheets("Worklogs")
        Set Plage = .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp))
    End With
    With Sheets("My data")
        For Each C In Plage
            If C.Offset(, 11) <> Empty Then 'cellule pas vide
                Tabl = Split(C.Offset(, 11), ";")
                .[A:C].NumberFormat = "@"
                For i = 0 To UBound(Tabl)
                    Ligne = Ligne + 1
                    .Range(.Cells(Ligne, 1), .Cells(Ligne, 11)).Value = C.Resize(, 11).Value
                    .Cells(Ligne, 12) = Tabl(i)
                    .Range(.Cells(Ligne, 13), .Cells(Ligne, 44)).Value = C.Offset(0, 12).Resize(, 32).Value
                Next i
            Else
                Ligne = Ligne + 1
                .Range(.Cells(Ligne, 1), .Cells(Ligne, 11)).Value = C.Resize(, 11).Value
                .Cells(Ligne, 12) = C.Offset(, 11)
                .Range(.Cells(Ligne, 13), .Cells(Ligne, 44)).Value = C.Offset(0, 12).Resize(, 32).Value
            End If
        Next C
        .[H:H].EntireColumn.AutoFit
    End With
'
End Sub
0