Transposer un tableau en regroupant les colonnes

Hadri071712 Messages postés 2 Statut Membre -  
Hadri071712 Messages postés 2 Statut Membre -


Bonjour,

J'aurais besoin de vos lumières concernant un simple trick en Excel.
J'aimerais faire l’exercice suivant pour une longue liste.
Passer du tableau de gauche à celui de droite.

Merci d'avance,

1 réponse

thev Messages postés 2073 Date d'inscription   Statut Membre Dernière intervention   717
 
Bonjour,

proposition de code avec pour hypothèses :
1- le tableau à transposer est une table Excel s'appelant : Tableau1 et que ses entêtes soient colonne1 et colonne2
2- le tableau transposé commence à la cellule E1 et la table Excel correspondante s'appellera : Tableau2

Sub créa_tableau_transposé()
Dim tab_transpo As Object, tab_col As Object
Dim clé As Variant, donnée As String
Dim i As Integer, nb_colonnes As Integer, nb_lignes As Integer
Dim xl As Excel.Application
Dim cell_départ As Range

'stockage du tableau à transposer dans une collection de type dictionnaire
Set tab_transpo = CreateObject("Scripting.Dictionary")
With ActiveSheet.ListObjects("Tableau1")
For i = 1 To .ListRows.Count
clé = .ListColumns("colonne1").DataBodyRange.Rows(i)
donnée = .ListColumns("colonne2").DataBodyRange.Rows(i)
If Not tab_transpo.Exists(clé) Then
Set tab_col = CreateObject("System.Collections.ArrayList")
tab_col.Add donnée
Set tab_transpo(clé) = tab_col
Else
Set tab_col = tab_transpo(clé)
tab_col.Add donnée
Set tab_transpo(clé) = tab_col
End If
Next i
End With

'création du tableau transposé à partir de la collection de type dictionnaire
Set cell_départ = Range("E1")
Set xl = Excel.Application
nb_colonnes = tab_transpo.Count
cell_départ.Resize(1, nb_colonnes).Value = xl.Transpose(xl.Transpose(tab_transpo.Keys))
i = 0
For Each clé In tab_transpo.Keys
Set tab_col = tab_transpo(clé)
nb_lignes = UBound(tab_col.ToArray) + 1
cell_départ.Offset(1, i).Resize(nb_lignes, 1).Value = xl.Transpose(tab_col.ToArray)
i = i + 1
Next clé

'création de la table Excel à partir du tableau transposé
With ActiveSheet.ListObjects
.Add(xlSrcRange, cell_départ.CurrentRegion, , xlYes).Name = "Tableau2"
End With

End Sub

--
 
0
Hadri071712 Messages postés 2 Statut Membre
 
Un enoooorme merci ça fonctionne du premier coup!!!
0