Macro transposé ligne colonne en gardant première ligne

GREGILILI

XLDnaute Nouveau
Bonjour,

Je cherche à transposer des lignes en colonnes.
Classique vous me direz, mais je veux répéter la 1ère ligne.

J'ai trouvé sur un autre forum la macro ci-dessous qui permet de transformer

Client date1, date 2, Date
Client 1 16/01/2013 17/04/2013 20/04/2013
Client 2 01/01/2013 18/01/2013 28/04/2013

en

Client 1 16/01/2013
Client 1 17/04/2013
Client 1 20/04/2013
Client 2 01/01/2013
Client 2 18/01/2013
Client 2 28/04/2013

mais je voudrais

Client 1 date 1 16/01/2013
Client 1 date 2 17/04/2013
Client 1 date 3 20/04/2013
Client 2 date 1 01/01/2013
Client 2 date 2 18/01/2013
Client 2 date 3 28/04/2013


La macro est ci-dessous.
1000 merci pour votre aide pour customiser cette macro (je ne maitrise pas bien les loop)

Option Explicit
Sub TransposerDates()
Dim n°L As Long
Dim n°C As Integer
Dim ctr As Long

'Première ligne de données du tableau
n°L = 2
'Explorer toutes les lignes du tableau
Do While Cells(n°L, 1).Value > ""
'Chercher la dernière colonne de date sur la ligne
n°C = Cells(n°L, 2).End(xlToRight).Column
'mettre à 0 le comptr de dates déplacées
ctr = 0
'Si il faut déplacer la date...
Do While n°C > 2
'Insérer une ligne
Rows(n°L + 1).Insert
'Copier le nom du client
Cells(n°L + 1, 1).Value = Cells(n°L, 1).Value
'Déplacer la date
Cells(n°L, n°C).Cut Cells(n°L + 1, 2)
'Compter le nombre de déplacements
ctr = ctr + 1
'Colonne précédente
n°C = n°C - 1
Loop
'ligne suivante
n°L = n°L + ctr + 1
Loop

End Sub
 

R@chid

XLDnaute Barbatruc
Re : Macro transposé ligne colonne en gardant première ligne

Bonsoir,
Je voie que l'on peut faire avec formule, si tu veux, mais il faut nous dire est que tous les clients ont le même nombre de dates, ou bien ils ont des nombres de dates différents..

Un extrait anonymisé de ton fichier sera plus parlant.

@ + +
 

GREGILILI

XLDnaute Nouveau
Re : Macro transposé ligne colonne en gardant première ligne

Merci bcp Rachid pour ta réponse.
Pas facile apparemment mon cas :)

Tous les clients n'ont pas forcément le même nombre de date

J'ai mis un exemple plus parlant dans la pièce jointe.

Encore merci pour l'aide apportée.
C'est très sympa.

Grégoire
 

Pièces jointes

  • exemple transposition.xlsx
    15.3 KB · Affichages: 31
  • exemple transposition.xlsx
    15.3 KB · Affichages: 41
  • exemple transposition.xlsx
    15.3 KB · Affichages: 42

Efgé

XLDnaute Barbatruc
Re : Macro transposé ligne colonne en gardant première ligne

Bonjour GRGILILI, Bonjour Rachid :)
Une proposition par macro:
VB:
Private Sub CommandButton1_Click()
Dim I&, J&, Rw&
Dim Rng As Range, Data As Variant, Report As Variant

Const FrstRw = 3 'Première ligne du tablau de départ (3 dans l'exemple)
Const LstCol = 6 'Dernière colonne du tableau de départ (6 (F) dans l'exemple)

With Sheets("Test") 'A adapter
    Set Rng = .Range(.Cells(FrstRw, 1), .Cells(.Cells(Rows.Count, 1).End(3).Row, LstCol))
    Data = Rng
    ReDim Report(1 To (UBound(Data, 1) * LstCol), 1 To 3)
    For I = LBound(Data, 1) + 1 To UBound(Data, 1)
        For J = LBound(Data, 2) + 1 To UBound(Data, 2)
            'If Data(I, J)  "" Then ' Si on ne veux pas des "vides"
                Rw = Rw + 1
                Report(Rw, 1) = Data(I, 1)
                Report(Rw, 2) = Data(1, J)
                Report(Rw, 3) = Data(I, J)
            'End If ' Si on ne veux pas des "vides"
        Next J
    Next I
    Rng.ClearContents
    .Cells(FrstRw, 1).Resize(Rw, 3) = Report
End With
Cordialement
 

Pièces jointes

  • exemple_0transposition(2).xls
    65.5 KB · Affichages: 41

Statistiques des forums

Discussions
312 684
Messages
2 090 923
Membres
104 701
dernier inscrit
NinetteCrevette