Microsoft 365 Regrouper plusieurs colonnes en une seule pour un tableau en liste

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 !

Sarah.

XLDnaute Nouveau
Bonjour à tous,

J'essaie depuis plusieurs jours de modifier un fichier.
J'ai un tableau qui a plusieurs colonnes par type de bonus.
Je voudrais avoir une colonne qui reprend tous les types de bonus en ligne en reprenant bien entendu les informations des autres colonnes.
Je pense qu'il est plus simple que je vous mette un exemple factice avec le tableau que j'ai et en dessous celui que je voudrais avoir. Sachant que le tableau réel à plus de 12000 lignes.
Merci beaucoup pour votre aide.
 

Pièces jointes

Solution
J'ai mis le tableau source sous forme de tableau structuré puis décroiser avec PowerQuery
Tu peux voir ce qui a été fait en ouvrant PowerQuery :
Données, Obtenir des données, lancer PowerQuery
Tu as les étapes de la requête à droite

Ce fil t'aidera aussi à comprendre http://www.excel-formations.fr/Trucs_astuces/PQ02.php
Merci beaucoup pour ce guide détaillé j'ai pu prendre en main Power Query qui est un outil très interessant
Bonjour @Sarah. et bienvenue sur XLD 🙂,
Bonjour @chris 😉

Idem mais en un peu plus compliqué avec une macro VBA.
  • Le code est dans module1.
  • Cliquez sur le bouton Hop!
Code dans module1:
VB:
Sub test()
Dim t, i&, j&, n&
   t = Range(Range("a3"), Range("a3").End(xlToRight).End(xlDown))
   ReDim r(1 To 1 + (UBound(t, 2) - 3) * (UBound(t) - 1), 1 To 5)
   r(1, 1) = t(1, 1): r(1, 2) = t(1, 2): r(1, 3) = t(1, 3): r(1, 4) = "Type Bonus": r(1, 5) = "Montant"
   n = 1
   For i = 2 To UBound(t)
      For j = 4 To UBound(t, 2)
         n = n + 1
         r(n, 1) = t(i, 1): r(n, 2) = t(i, 2): r(n, 3) = t(i, 3): r(n, 4) = t(1, j): r(n, 5) = t(i, j)
      Next j
   Next i
   Cells(1, UBound(t, 2) + 2).EntireColumn.Resize(, 5).Delete
   Cells(1, UBound(t, 2) + 2).Resize(n, 5) = r
End Sub
 

Pièces jointes

Bonjour

Faisable en quelques clics avec PowerQuery intégré à ta version Excel

Le tableau résultat s'actualise par clic droit quand l'original change
Merci beaucoup pour ta solution. Je ne connaissais pas Power Query, c'est une très belle decouverte.
J'ai essayé de reproduire ce que tu as fais mais j'y parviens. Je vois que tu es passé par un TCD. Tu as modifié le tableau en faisant un TCD?
 
Bonjour @Sarah. et bienvenue sur XLD 🙂,
Bonjour @chris 😉

Idem mais en un peu plus compliqué avec une macro VBA.
  • Le code est dans module1.
  • Cliquez sur le bouton Hop!
Code dans module1:
VB:
Sub test()
Dim t, i&, j&, n&
   t = Range(Range("a3"), Range("a3").End(xlToRight).End(xlDown))
   ReDim r(1 To 1 + (UBound(t, 2) - 3) * (UBound(t) - 1), 1 To 5)
   r(1, 1) = t(1, 1): r(1, 2) = t(1, 2): r(1, 3) = t(1, 3): r(1, 4) = "Type Bonus": r(1, 5) = "Montant"
   n = 1
   For i = 2 To UBound(t)
      For j = 4 To UBound(t, 2)
         n = n + 1
         r(n, 1) = t(i, 1): r(n, 2) = t(i, 2): r(n, 3) = t(i, 3): r(n, 4) = t(1, j): r(n, 5) = t(i, j)
      Next j
   Next i
   Cells(1, UBound(t, 2) + 2).EntireColumn.Resize(, 5).Delete
   Cells(1, UBound(t, 2) + 2).Resize(n, 5) = r
End Sub
Merci beaucoup, je vais également essayer ta méthode 😉
 
Merci beaucoup pour ta solution. Je ne connaissais pas Power Query, c'est une très belle decouverte.
J'ai essayé de reproduire ce que tu as fais mais j'y parviens. Je vois que tu es passé par un TCD. Tu as modifié le tableau en faisant un TCD?
J'ai mis le tableau source sous forme de tableau structuré puis décroiser avec PowerQuery
Tu peux voir ce qui a été fait en ouvrant PowerQuery :
Données, Obtenir des données, lancer PowerQuery
Tu as les étapes de la requête à droite

Ce fil t'aidera aussi à comprendre http://www.excel-formations.fr/Trucs_astuces/PQ02.php
 
J'ai mis le tableau source sous forme de tableau structuré puis décroiser avec PowerQuery
Tu peux voir ce qui a été fait en ouvrant PowerQuery :
Données, Obtenir des données, lancer PowerQuery
Tu as les étapes de la requête à droite

Ce fil t'aidera aussi à comprendre http://www.excel-formations.fr/Trucs_astuces/PQ02.php
Merci beaucoup pour ce guide détaillé j'ai pu prendre en main Power Query qui est un outil très interessant
 
Bonjour @Sarah. et bienvenue sur XLD 🙂,
Bonjour @chris 😉

Idem mais en un peu plus compliqué avec une macro VBA.
  • Le code est dans module1.
  • Cliquez sur le bouton Hop!
Code dans module1:
VB:
Sub test()
Dim t, i&, j&, n&
   t = Range(Range("a3"), Range("a3").End(xlToRight).End(xlDown))
   ReDim r(1 To 1 + (UBound(t, 2) - 3) * (UBound(t) - 1), 1 To 5)
   r(1, 1) = t(1, 1): r(1, 2) = t(1, 2): r(1, 3) = t(1, 3): r(1, 4) = "Type Bonus": r(1, 5) = "Montant"
   n = 1
   For i = 2 To UBound(t)
      For j = 4 To UBound(t, 2)
         n = n + 1
         r(n, 1) = t(i, 1): r(n, 2) = t(i, 2): r(n, 3) = t(i, 3): r(n, 4) = t(1, j): r(n, 5) = t(i, j)
      Next j
   Next i
   Cells(1, UBound(t, 2) + 2).EntireColumn.Resize(, 5).Delete
   Cells(1, UBound(t, 2) + 2).Resize(n, 5) = r
End Sub
Le code est top il marche sans problème, merci beaucoup
 
- 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
10
Affichages
272
Retour