oguruma
XLDnaute Occasionnel
Suite et fin pour terminer ce billet sur le dégroupage en colonnes de données présentées en lignes qui fait référence au post ci-dessous.
excel-downloads.com
Cette solution est à préférer aux 3 autres proposées. Elle a l'avantage d'une mise à jour plus dynamique en cas d'évolution de la source des données par la simple actualisation du tableau résultant.
Un peu de paramétrage et passage de paramètres à la requête... à voir pour les plus experts. cf. mes post sur le passage de paramètres dans une RQ powerquery
L'actualisation peut aussi se présenter via un bouton qui fera appel à du VBA pour actualiser la requêtes ou faire clic droit/actualiser sur le tableau...
A voir selon les besoins
Transposer en colonnes des blocs de données en lignes - via Macro
Suite de ce post https://excel-downloads.com/threads/transposer-en-colonnes-des-blocs-de-donnees-en-lignes-via-formules-let-lambda.20080381/ Comment y parvenir via une macro en VBA ? Option Explicit Sub DEGROUPER_LIGNES_COLONNES() Dim DataSource As Range Dim lngIndexRow As Long...
Cette solution est à préférer aux 3 autres proposées. Elle a l'avantage d'une mise à jour plus dynamique en cas d'évolution de la source des données par la simple actualisation du tableau résultant.
Un peu de paramétrage et passage de paramètres à la requête... à voir pour les plus experts. cf. mes post sur le passage de paramètres dans une RQ powerquery
L'actualisation peut aussi se présenter via un bouton qui fera appel à du VBA pour actualiser la requêtes ou faire clic droit/actualiser sur le tableau...
A voir selon les besoins
PowerQuery:
let
//======================================================================================================================
// Auteur : OGURUMA
// Dégroupage en colonne d'un bloc de données en ligne
//======================================================================================================================
//======================================================================================================================
// Quelle est la source des données
// changer la valeur de au besoin
// Name="Tableau1" ==> peut-être obtenu par un passage de paramètres
//======================================================================================================================
Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
//======================================================================================================================
// Les modifications de types ne sont peut-être pas nécessaire. A voir selon les besoins
//======================================================================================================================
#"Type modifié" = Table.TransformColumnTypes(Source,{{"Rubriques", type text}, {"Informations", type any}}),
//======================================================================================================================
// Création des colonnes conditionnelles qui constitueront les données du tableau dégroupé
// Ici on crée les colonnes nécessaires qui seront retenues
// A adapter selon les rubriques présentes
// Le tableau initial contient là-ici deux colonnes Rubriques et Informations - à adapter selon la source
//======================================================================================================================
CODE_ARTICLE = Table.AddColumn(#"Type modifié", "CODE_ARTICLE", each if [Rubriques] = "CODE_ARTICLE" then [Informations] else null),
ENTREPOT = Table.AddColumn(CODE_ARTICLE, "ENTREPOT", each if [Rubriques] = "ENTREPOT" then [Informations] else null),
STOCK_MAXI = Table.AddColumn(ENTREPOT, "STOCK_MAXI", each if [Rubriques] = "STOCK_MAXI" then [Informations] else null),
STOCK_MINI = Table.AddColumn(STOCK_MAXI, "STOCK_MINI", each if [Rubriques] = "STOCK_MINI" then [Informations] else null),
STOCK_ACTUEL = Table.AddColumn(STOCK_MINI, "STOCK_ACTUEL", each if [Rubriques] = "STOCK_ACTUEL" then [Informations] else null),
EN_COMMANDE = Table.AddColumn(STOCK_ACTUEL, "EN_COMMANDE", each if [Rubriques] = "EN COMMANDE" then [Informations] else null),
GESTIONNAIRE = Table.AddColumn(EN_COMMANDE, "GESTIONNAIRE", each if [Rubriques] = "GESTIONNAIRE" then [Informations] else null),
//======================================================================================================================
// On aligne les données
//======================================================================================================================
REMPLI_VERS_HAUT = Table.FillUp(GESTIONNAIRE,{"ENTREPOT", "STOCK_MAXI", "STOCK_MINI", "STOCK_ACTUEL", "EN_COMMANDE", "GESTIONNAIRE"}),
//======================================================================================================================
// On se débarrase des valeurs nulles qui occasionne le décalage
//======================================================================================================================
SUPPR_NULL = Table.SelectRows(REMPLI_VERS_HAUT, each ([CODE_ARTICLE] <> null)),
//======================================================================================================================
// Les colonnes de référence qui ont permi la ventilation des données ne servent plus
// Les colonnes à conserver seront à adapter selon la source
// Ici on conserve les colonnes conditionnelles crées
//======================================================================================================================
SUPPR_COL_REFERENCE = Table.SelectColumns(SUPPR_NULL,{"CODE_ARTICLE", "ENTREPOT", "STOCK_MAXI", "STOCK_MINI", "STOCK_ACTUEL", "EN_COMMANDE", "GESTIONNAIRE"})
in
SUPPR_COL_REFERENCE