XL 2019 Eclater les catégories d'un tableau

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

Nico2978

XLDnaute Nouveau
Bonjour à tous,
je souhaiterais savoir si il est possible de transformer via une fonction excel ou via vba un tableau comme celui ci:
1712566913452.png


En une liste comme celle la:
1712566991258.png


Et si oui, comment faut-il s'y prendre s'il vous plaît?

Je vous remercie! Et au vu de l'heure bon appétit
 
Solution
Bon pour traiter les doublons il suffit d'ajouter un tri :
VB:
Sub Modifier()
Dim P As Range, i&
Set P = [A1].CurrentRegion
Application.ScreenUpdating = False
P.Rows(P.Rows.Count + 1).Resize(Rows.Count - P.Rows.Count - P.Row + 1).Delete xlUp 'RAZ
P.Copy P(P.Rows.Count + 2, 1)
Set P = P(P.Rows.Count + 2, 1).Resize(P.Rows.Count, P.Columns.Count)
P.Sort P.Columns(1), xlAscending, Header:=xlYes 'tri
For i = P.Rows.Count To 2 Step -1
    If P.Cells(i, 1) <> P.Cells(i - 1, 1) Then
        P.Rows(i).Insert xlDown
        P.Rows(1).Copy P.Rows(i)
        P.Cells(i, 1) = P.Cells(i + 1, 1)
        P.Cells(i + 1, 1) = ""
    Else
        P.Cells(i, 1) = ""
    End If
Next
P.Rows(1).Delete xlUp
End Sub
Bonjour à tous,
une tentative par Power Query - à actualiser Données => Actualiser.

Bonne journée.
Bonjour Axel! Merci pour cette nouvelle approche qui en soit fait le travail et regroupe bien selon le critère voulu. Mais au niveau de la mise en forme du tableau powerquery , je ne trouve pas bcp d'option, notament pour éviter les répétitions "catégorie" et réinsérer les entêtes de colonnes.

Merci en tout cas, car pour une partie de mon projet, cette fonctionnalité d'excel pourrait s'avérer bien utile, j'ai des données de prod avec des catégories et sous catégories.

Bon après midi
 
Bonjour Nico2978, JHA, alexga78,

Il y a aussi le VBA, c'est assez simple :
VB:
Sub Modifier()
Dim P As Range, i&
Set P = [A1].CurrentRegion
Application.ScreenUpdating = False
P.Rows(P.Rows.Count + 1).Resize(Rows.Count - P.Rows.Count - P.Row + 1).Delete xlUp 'RAZ
P.Copy P(P.Rows.Count + 2, 1)
Set P = P(P.Rows.Count + 2, 1).Resize(P.Rows.Count, P.Columns.Count)
For i = P.Rows.Count To 2 Step -1
    P.Rows(i).Insert xlDown
    P.Rows(1).Copy P.Rows(i)
    P.Cells(i, 1) = P.Cells(i + 1, 1)
    P.Cells(i + 1, 1) = ""
Next
P.Rows(1).Delete xlUp
End Sub
A+
 

Pièces jointes

Merci Axel, c'est excellent! Et avec une petite MFC ça rend exactement comme je l'attendais (voir fichier joint)

Il subsiste 2 problèmes:
  • Le tableau source n'est pas dynamique, si je supprime des entrées et que je recharge, j'ai un message d'erreur
  • La requête modifie la MEF au niveau de la largeur de colonne. Il y a t'il un moyen de figer celle ci ? Peut être que query propose des options pour ça, je n'en ai pas vu

Je te remercie!
 

Pièces jointes

Dernière édition:
Bonjour Nico2978, JHA, alexga78,

Il y a aussi le VBA, c'est assez simple :
Bonjour Job35 merci à toi pour ce programme, à chaud après test, je dirais que ça ne convient pas tout à fait mais presque (voir photo ci dessous)
1712582706941.png


Ce que tu proposes m'a l'air assez versatile, j'imagine que je peux modifier en rajoutant des conditions pour la catégorie en colonne 1 ne se répète pas et idem pour les entêtes/catégorie.

Je vais regarder en tout cas merci bcp! Je reviens vite
 
Re,
pour la largueur des colonnes il "suffit" de jouer sur le nom des colonnes de la dernière étape de la requête, lignes vides du tableau source supprimées également.
cependant je ne suis pas certain que le mise en forme sera conservée si nouvelles catégories, chaque ligne étant une entrée.
le mieux est de passer par le VBA, donc je passe.
 

Pièces jointes

Bon pour traiter les doublons il suffit d'ajouter un tri :
VB:
Sub Modifier()
Dim P As Range, i&
Set P = [A1].CurrentRegion
Application.ScreenUpdating = False
P.Rows(P.Rows.Count + 1).Resize(Rows.Count - P.Rows.Count - P.Row + 1).Delete xlUp 'RAZ
P.Copy P(P.Rows.Count + 2, 1)
Set P = P(P.Rows.Count + 2, 1).Resize(P.Rows.Count, P.Columns.Count)
P.Sort P.Columns(1), xlAscending, Header:=xlYes 'tri
For i = P.Rows.Count To 2 Step -1
    If P.Cells(i, 1) <> P.Cells(i - 1, 1) Then
        P.Rows(i).Insert xlDown
        P.Rows(1).Copy P.Rows(i)
        P.Cells(i, 1) = P.Cells(i + 1, 1)
        P.Cells(i + 1, 1) = ""
    Else
        P.Cells(i, 1) = ""
    End If
Next
P.Rows(1).Delete xlUp
End Sub
 

Pièces jointes

- 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
12
Affichages
108
Réponses
4
Affichages
150
Réponses
1
Affichages
62
Réponses
13
Affichages
436
Retour