Changer la structure d'un tableau des lignes et colonnes

  • Initiateur de la discussion Initiateur de la discussion zaknaster
  • 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 !

zaknaster

XLDnaute Nouveau
Bonjour,

Je souhaiterai connaitre le moyen de restructurer les lignes et colonnes de mon tableau. A l'origine il s'agit d'un csv avec une délimitation classique par point virgule.

Prenons cet exemple de tableau très simple :

[table="width: 500"]
[tr]
[td]Maison[/td]
[td]Pièce[/td]
[td]Objet[/td]
[/tr]
[tr]
[td]Addr1[/td]
[td]Séjour[/td]
[td]Canapé[/td]
[/tr]
[tr]
[td]Addr1[/td]
[td]Chambre[/td]
[td]Lit[/td]
[/tr]
[tr]
[td]Addr1[/td]
[td]Cuisine[/td]
[td]Cafetière[/td]
[/tr]
[/table]

J'aimerai pouvoir afficher les résultatssur une ligne. Sachant que qu'il y a toujours un seul objet par pièce qui est dans la base pour un maximum de 5 pièces (donc 5 objets). Donc le tableau est suffisament structuré !

A la fin le résultat que j'aimerai avoir est le suivant :

[table="width: 500"]
[tr]
[td]Maison[/td]
[td]Piece_1[/td]
[td]Objet_1[/td]
[td]Piece_2[/td]
[td]Objet_2[/td]
[td]Piece_3[/td]
[td]Objet_3[/td]
[/tr]
[tr]
[td]Addr1[/td]
[td]Séjour[/td]
[td]Canapé[/td]
[td]Chambre[/td]
[td]Lit[/td]
[td]Cuisine[/td]
[td]Cafetière[/td]
[/tr]
[/table]

En fait il ne doit y avoir qu'une ligne par Maison.
Est-ce que vous avez connaissance d'une méthode pour m'aider la dessus ?

Merci d'avance
 
Re : Changer la structure d'un tableau des lignes et colonnes

Bonjour,

Voir PJ

Code:
Sub Regroupe2()
  Set d = CreateObject("Scripting.Dictionary")
  For Each c In Range("a2", [a65000].End(xlUp))
      d(c.Value) = d(c.Value) & c.Offset(0, 1) & "|" & c.Offset(0, 2) & "|"
  Next c
  [G2].Resize(d.Count) = Application.Transpose(d.keys)
  i = 2
  For Each c In d.keys
    a = Split(d(c), "|")
    Cells(i, "h").Resize(, UBound(a)) = a
    i = i + 1
  Next c
End Sub

JB
 

Pièces jointes

Re : Changer la structure d'un tableau des lignes et colonnes

Bonjour,

Voir PJ

Code:
Sub Regroupe2()
  Set d = CreateObject("Scripting.Dictionary")
  For Each c In Range("a2", [a65000].End(xlUp))
      d(c.Value) = d(c.Value) & c.Offset(0, 1) & "|" & c.Offset(0, 2) & "|"
  Next c
  [G2].Resize(d.Count) = Application.Transpose(d.keys)
  i = 2
  For Each c In d.keys
    a = Split(d(c), "|")
    Cells(i, "h").Resize(, UBound(a)) = a
    i = i + 1
  Next c
End Sub

JB

Bonjour,

En effet ça marche bien.
Qu'en est-il si j'ai plusieurs colonnes de type "Maison" qui se répètent ?

En l'occurence, j'ai au moins 6 colonnes en plus sur le côté qui se répètent (autant de fois que Maison se répète).
Je ne parviens pas a les afficher sur le nouveau tableau généré.

voir PJ pour mieux comprendre mon besoin,

Merci pour ton aide.
 

Pièces jointes

Re : Changer la structure d'un tableau des lignes et colonnes

Bonjour,

Si je comprends bien ce passage :
For Each c In Range("a2", [a65000].End(xlUp))
d(c.Value) = d(c.Value) & c.Offset(0, 1) & "|" & c.Offset(0, 2) & "|"
Next c
[G2].Resize(d.Count) = Application.Transpose(d.keys)

Il permet de copier les données de la colonne A (A2 et +) vers la colonne G (G2 et +), mais sans faire de répétition. J'ai essayé de répéter la boucle pour les autres colonnes que je souhaite copier mais sans succès... Je ne vois pas comment m'y prendre.

Merci
 
- 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

Retour