XL 2019 Simplification tableau

sum01

XLDnaute Occasionnel
Bonjour à tous,

Dans un soucis de simplification, je cherche à modifier un tableau source sur lequel je n'ai pas la main pour le rendre un peu plus "léger" en terme de lecture.

A gauche, le tableau source mais je souhaiterais l'alléger afin que certaines données à double n'apparaissent pas comme le tableau de droite. Les entrées sont dynamiques c'est-à-dire que dans un mois à l'autre le nombre d'entrées varie. Je n'utilise pas un tableau croisé dynamique car l'apparence de ce type de tableau ne convient pas au standard de reporting, etc... et je ne suis pas très familier pour l'utilisation des formules dans les tableaux croisés dynamiques.

Merci beaucoup pour votre aide
Bon week-end
 

Pièces jointes

  • Mise en forme Tableau.xlsx
    10.3 KB · Affichages: 7
Solution
Bonjour,
Si j'ai bien compris le besoin...
Cependant, il faudra intervenir dans le code pour bien écrire l'en-tête du "Champ F"
Pour ce faire, il faut ouvrir l'éditeur avancé de power query (Alt + F12), cliquer sur "Éditeur avancé", et remplacer "Champ F" par le véritable titre de la colonne dans cette ligne :
PowerQuery:
 {"Total", each List.Sum([Champ F]), type number}}),
Si le titre comprend des caractères spéciaux, il faut l'englober dans des guillemets précédés du #
PowerQuery:
[#"Véritable titre de la colonneF"]

vgendron

XLDnaute Barbatruc
Bonjour

dans ton fichier, je ne vois pas où est la "simplification"...
tu as juste effacé des cellules dont le contenu ne change pas d'une ligne sur l'autre.. mais.. juste pour les colonnes des champs A B et C.. et pourquoi pas sur les champs D E F.??
et au dela de ca.. je ne vois pas ce qu'il y a à simplifier..
 

sum01

XLDnaute Occasionnel
Bonjour

dans ton fichier, je ne vois pas où est la "simplification"...
tu as juste effacé des cellules dont le contenu ne change pas d'une ligne sur l'autre.. mais.. juste pour les colonnes des champs A B et C.. et pourquoi pas sur les champs D E F.??
et au dela de ca.. je ne vois pas ce qu'il y a à simplifier..

Bonjour,

Oui en effet j'ai supprimé les données appartenant au même groupe estimant que ce n'est pas nécessaire de répéter la même chose dans chaque ligne. Je peux ensuite étendre à d'autre colonne naturellement. Les tableaux croisés dynamiques présentent les données de cette manière si me trompe pas. (un peu près). J'aurais naturellement utilisé le TCD pour satisfaire ce besoin mais sa présentation ne convient pas au powerpoint/ reporting. C'est pour ce cela que j'essaie de passer par une formule combinant IF, DECALER, etc... mais pour le moment je ne parviens à aucun résultat probant.
 

Jeannette

XLDnaute Junior
Bonsoir,
Une autre solution power query, qui "efface" les données identiques successives sur les 3 premières colonnes
si on veut élargir à 4, il suffira de changer le 3 par 4 dans le code

PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="t_base"]}[Content],
    GroupBy = Table.Combine(Table.Group(Source, List.FirstN(Table.ColumnNames(Source),3), {{"Tbl", each Table.AddIndexColumn(_,"Idx",1) }})[Tbl]),
    Final = Table.RemoveColumns(Table.ReplaceValue(GroupBy,each [Idx] > 1, each null, (x,y,z)=> if y then z else x, List.FirstN(Table.ColumnNames(GroupBy),3)),"Idx")
in
    Final
 

Pièces jointes

  • Groupby et remplace multi colonnes.xlsx
    19.7 KB · Affichages: 6

sum01

XLDnaute Occasionnel
Bonsoir,
Une autre solution power query, qui "efface" les données identiques successives sur les 3 premières colonnes
si on veut élargir à 4, il suffira de changer le 3 par 4 dans le code

PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="t_base"]}[Content],
    GroupBy = Table.Combine(Table.Group(Source, List.FirstN(Table.ColumnNames(Source),3), {{"Tbl", each Table.AddIndexColumn(_,"Idx",1) }})[Tbl]),
    Final = Table.RemoveColumns(Table.ReplaceValue(GroupBy,each [Idx] > 1, each null, (x,y,z)=> if y then z else x, List.FirstN(Table.ColumnNames(GroupBy),3)),"Idx")
in
    Final
Bonsoir Jeannette,

Merci pour votre réponse qui fonctionne superbement bien ! C'est génial et encore mieux. Et si on essaie d'aller encore un peu plus loin en introduisant un champ calculé, comme dans mon petit fichier. Au lieu des totaux par lignes (champ N), peut-on afficher des sous-totaux par groupe de données (champ O) ?
 

sum01

XLDnaute Occasionnel
Bonsoir Jeannette,

Merci pour votre réponse qui fonctionne superbement bien ! C'est génial et encore mieux. Et si on essaie d'aller encore un peu plus loin en introduisant un champ calculé, comme dans mon petit fichier. Au lieu des totaux par lignes (champ N), peut-on afficher des sous-totaux par groupe de données (champ O) ?
 

Pièces jointes

  • Groupby et remplace multi colonnes (1)_formules.xlsx
    20.6 KB · Affichages: 4

Jeannette

XLDnaute Junior
Bonjour,
Si j'ai bien compris le besoin...
Cependant, il faudra intervenir dans le code pour bien écrire l'en-tête du "Champ F"
Pour ce faire, il faut ouvrir l'éditeur avancé de power query (Alt + F12), cliquer sur "Éditeur avancé", et remplacer "Champ F" par le véritable titre de la colonne dans cette ligne :
PowerQuery:
 {"Total", each List.Sum([Champ F]), type number}}),
Si le titre comprend des caractères spéciaux, il faut l'englober dans des guillemets précédés du #
PowerQuery:
[#"Véritable titre de la colonneF"]
 

Pièces jointes

  • Groupby et remplace multi colonnes_2.xlsx
    20.2 KB · Affichages: 4

alexga78

XLDnaute Occasionnel
Bonjour à tous, bonjour Jeannette,

Autre proposition, plus longue que celle de Jeannette... (c'est récurrent apparemment :) )

PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="t_base"]}[Content],
    cols = Table.ColumnNames(Source),
    GroupBy = Table.Group(Source, List.FirstN(cols,3), {{"Tbl", each
              let x = Table.Sort(_, {cols{4}, Order.Ascending})
              in Table.AddColumn(x, "Total", each
                let y = Record.Field(_, cols{4})
                in List.Sum(Table.Column(Table.SelectRows(Table.SelectColumns(x, {cols{4}, cols{5}}),
                each Record.Field(_, cols{4}) = y), cols{5})))}})[Tbl],
    Result = Table.Combine(List.Transform(GroupBy, each Table.FromColumns(List.Accumulate(Table.ColumnNames(_), {},
             (s,c)=> s & {List.Accumulate(Table.Column(_,c), {},
             (s,c)=> s & {if List.Contains(s,c) then null else c})}),
             cols & {"Total"})))
in
    Result

Bonne journée
 

sum01

XLDnaute Occasionnel
Bonjour,
Si j'ai bien compris le besoin...
Cependant, il faudra intervenir dans le code pour bien écrire l'en-tête du "Champ F"
Pour ce faire, il faut ouvrir l'éditeur avancé de power query (Alt + F12), cliquer sur "Éditeur avancé", et remplacer "Champ F" par le véritable titre de la colonne dans cette ligne :
PowerQuery:
 {"Total", each List.Sum([Champ F]), type number}}),
Si le titre comprend des caractères spéciaux, il faut l'englober dans des guillemets précédés du #
PowerQuery:
[#"Véritable titre de la colonneF"]
Bonjour Jeannette,

Le tableau affiche clairement le résultat attendu. J'ai bien les sous-totaux par catégories. Merci beaucoup pour votre précieuse aide. Je profite également pour remercier Alexga78 pour sa solution complémentaire.
Bon dimande à vous
Meilleures salutations
 

Discussions similaires

Réponses
3
Affichages
242

Statistiques des forums

Discussions
313 902
Messages
2 103 391
Membres
108 631
dernier inscrit
tarek.kanaan