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

Fitia -  
f894009 Messages postés 17417 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

1 réponse

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
    1. 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
      1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > 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