Transposer colonnes d'un tableau en lignes avec VBA

  • Initiateur de la discussion Initiateur de la discussion Ben_R
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
1 K
Retour