Transposer colonnes d'un tableau en lignes avec VBA

Ben_R

XLDnaute Nouveau
Bonjour,

J'ai un tableau composé d'une trentaine de colonnes reprenant des informations sur des produits.

12 de ces colonnes correspondent au chiffre d'affaire mensuel de ce produit. J'ai besoin que ces mois correspondant à des en-tête de colonnes soit convertis en ligne.

Il faudrait par ailleurs que l'année indiquée dans la colonne A soit reprise dans la nouvelle colonne correspondant aux mois.

Vous trouverez en Pièce-jointe un exemple plus visuel du fichier source et du rendu attendu.
Tout le Chiffre d'affaire doit être détaillé sur la colonne R avec la reprise des informations correspondantes au mois en question.

J’espère avoir été assez clair et merci d'avance pour votre précieuse aide !

Bien cordialement,

Benjamin
 

Pièces jointes

  • Exemple1.xlsx
    19.4 KB · Affichages: 37

vgendron

XLDnaute Barbatruc
Hello
un essai..
VB:
Sub convertir()
Dim tabInit() As Variant
Dim tabFinal() As Variant

With Sheets("Fichier source")
    tabInit = .UsedRange.Value
    nblignes = UBound(tabInit, 1) - 1
    NbColonnes = UBound(tabInit, 2) - 10
End With
ReDim tabFinal(1 To (nblignes * 12) + 1, 1 To NbColonnes)
For j = LBound(tabInit, 2) To NbColonnes - 2
    tabFinal(1, j) = tabInit(1, j)
Next j
For i = LBound(tabInit, 1) + 1 To UBound(tabInit, 1)
    For j = LBound(tabInit, 2) To NbColonnes - 2
        For k = 1 To 12
            tabFinal(i + (k - 1) * nblignes, j) = tabInit(i, j)
        Next k
    Next j
    For k = 1 To 12
        tabFinal(i + (k - 1) * nblignes, NbColonnes - 1) = DateSerial(tabInit(i, 1), k, 1)
        tabFinal(i + (k - 1) * nblignes, NbColonnes) = tabInit(i, NbColonnes - 2 + k)
    Next k
Next i
With Sheets("Rendu")
    .Range("A1").Resize(UBound(tabFinal, 1), UBound(tabFinal, 2)) = tabFinal
    .Range("Q1") = "Mois"
    .Range("Q:Q").NumberFormat = "mmm/yyyy"
    .Range("R1") = "CA"
End With
End Sub

Hello @pierrejean
plus rapide que moi :-D
 

Ben_R

XLDnaute Nouveau
Bonjour PierreJean & Vgendron,

Merci à vous 2 pour les solutions proposées. Il manquait l'année à retourner dans le code de PierreJean.
Mais Vgendron a trouvé la solution. J'en ai quand même profité pour récupérer une partie du code de PierreJean qui effaçait les colonnes qui n'étaient plus nécessaires.

Merci encore à vous 2 pour votre aide !!

Bien cordialement,

Benjamin
 

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 337
Membres
102 865
dernier inscrit
FreyaSalander