Transformer une simple ligne en ligne multiple

Chers tous,

Je souhaite transformer un fichier excell où sur chaque ligne j'ai :

  • Prénom / Nom / Classe / Zipcode / Cours 1/ Cours 2/.../Cours 19/ Cours 20

Certains élèves ont un cours, d'autres 10, etc...

Je dois transformer ce fichier pour que j'ai pour chaque ligne un seul cours :

  • Paul / Dupont / CM1 / 10010 / Cours xx / Cours yy / Cours zz
    Thierry / Roger / Cm2 / 10011 / Cours qq / Cours aa / Cours zz

devient:

  • Paul / Dupont / CM1 / 10010 / Cours xx
    Paul / Dupont / CM1 / 10010 / Cours yy
    Paul / Dupont / CM1 / 10010 / Cours zz
    Thierry / Roger / Cm2 / 10011 / Cours qq
    Thierry / Roger / Cm2 / 10011 / Cours aa
    Thierry / Roger / Cm2 / 10011 / Cours zz

Comment faire ? En vous remerciant !

Bonjour,

Une proposition avec une macro

A+

39classeur1.xlsm (17.06 Ko)

Merci !

Bonsoir pascalv, frangy, le forum

Avec une variable tableau :

Option Explicit
Sub test()
Dim a, b(), i As Long, j As Long, k As Byte, n As Long
    With Sheets("Feuil1").Range("a1").CurrentRegion
        a = .Value
        ReDim b(1 To Application.CountA(.Cells), 1 To 5)
    End With
    For i = 2 To UBound(a, 1)
        For j = 5 To UBound(a, 2)
            If a(i, j) <> "" Then
                n = n + 1
                For k = 1 To 4
                    b(n, k) = a(i, k)
                Next
                b(n, 5) = a(i, j)
            End If
        Next
    Next
    Application.ScreenUpdating = False
    'Restitution en feuil3
    With Sheets("Feuil2")
        .Cells.Clear
        With .Cells(1).Resize(, 5)
            .Value = [{"Prénom","Nom","Classe","Zipcode","Cours"}]
            .Offset(1).Resize(n).Value = b
            With .CurrentRegion
                .Font.Name = "calibri"
                .Font.Size = 10
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlCenter
                .BorderAround Weight:=xlThin
                .Borders(xlInsideVertical).Weight = xlThin
                With .Rows(1)
                    .Interior.ColorIndex = 42
                    .BorderAround Weight:=xlThin
                End With
                .Columns.ColumnWidth = 12
            End With
        End With
        .Activate
    End With
    Application.ScreenUpdating = True
End Sub

klin89

26pascalv.zip (16.35 Ko)
Rechercher des sujets similaires à "transformer simple ligne multiple"