Accueil – Le CFO masqué › Forums › Power Query › Passer d’une liste en colonne à un tableau.
- Ce sujet contient 3 réponses, 3 participants et a été mis à jour pour la dernière fois par Daniel, le il y a 11 mois et 3 semaines.
-
AuteurMessages
-
22 janvier 2024 à 19 h 21 min #136714jsimon75002Participant
Bonjour,
J’ai des données dans un fichier Excel, dont malheureusement l’ensemble des données sont dans la même colonne.
Je souhaite donc créer un tableau qui va me permettre de lister mes dossiers et de mettre en ligne les informations de celui-ci pour chaque dossier.
Voici un extrait de ma colonne :
Réfèrence
Date d’émission
Date de dépôt
Montant HT
Montant TTC
Etat
N* de virement
Date de virement67572
22/01/2024
22/01/2024
66.5€
66.5€
TransmisDétails
67357
18/01/2024
18/01/2024
2182.95€
2182.95€
Transmis
VIR374
22/01/2024
DétailsLes premières informations correspondent au en-tête de colonnes, puis j’ai mes dossiers qui se suivent les uns les autres, le dossier suivant commence après la ligne “Détails”, c’est mon point de rupture d’un dossier à l’autre.
L’un de vous à t’il une idée de comment passer d’une colonne a un tableau a plusieurs lignes et plusieurs colonnes ?
L’idée étant de finir avec un tableau qui ressemble à : Capture d’écran _Liste_dossiers.png
Attachments:
You must be logged in to view attached files.23 janvier 2024 à 8 h 51 min #136723Xavier AllartParticipantBonjour
Si les données sont toujours sur 8 lignes et que le mot “Détails” est lui aussi toujours sur la 9éme ligne, voici une solution :
Excel :
Créer la table suivante avec le nom “Ref”
Ligne Texte
1 Réfèrence
2 Date d’émission
3 Date de dépôt
4 Montant HT
5 Montant TTC
6 Etat
7 N* de virement
8 Date de virementPower Query :
Importer votre tableau, “Tableau1” et “Ref” dans Power Query
Pour la requête “Tableau1” :
Je n’ai qu’une colonne nommée “Colonne1”
// Création d’un identifiant unique pour chaque dossier
Ajouter une colonne d’index commençant à 1
Ajouter une colonne conditionnelle “iD” qui affiche le N° d’index si le reste de la division de celui par 9 vaut 0, sinon affiché 0
Sélection cette nouvelle colonne “iD” :
Transformer > Remplir ves le bas
Filtrer sur non null
Supprimer la colonne “Index”
// Création d’un index pour chaque type de ligne (Réference = 1, Date d’émission = 2, …)
Transformer : Regrouper par :
De base
iD
Nombre Compter les lignes
Dans la barre de formule, remplacer “each Table.RowCount(_), Int64.Type}})” par each Table.AddIndexColumn(_,”Index”,0,1), type table}})
Développer la colonne “Nombre”, ne pas cocher “iD”
// Remplacement du N° index par son nom
Fusionner avec la requete “Ref” sur
“Tableau1″.”Index” <=> “Ref”.”Ligne”
Type de jointure : Externe gauche
Développer la colonne “Ref”, Décocher le nom de la colonne …
// Pivoter la liste en colonne
Sélectionner la colonne “Texte”
Filtrer sur non null
Transformer > Pivoter la colonne,
Choisir comme colonne de valeur “Colonne1”
Options Avancées : Ne pas agréger
// Mise en forme
Supprimer les colonnes “iD” et “Ligne”
Pour les colonnes “Montant HT” et “Montant TTC” remplacer le point par une virgule
Appliquer les formats adaptésCode :
let
Source = Excel.CurrentWorkbook(){[Name=”Tableau1″]}[Content],
#”Index ajouté” = Table.AddIndexColumn(Source, “Index”, 1, 1, Int64.Type),
#”Colonne conditionnelle ajoutée” = Table.AddColumn(#”Index ajouté”, “iD”, each if Number.Mod([Index],9) = 0 then [Index] else null),
#”Rempli vers le bas” = Table.FillDown(#”Colonne conditionnelle ajoutée”,{“iD”}),
#”Lignes filtrées” = Table.SelectRows(#”Rempli vers le bas”, each ([iD] <> null)),
#”Colonnes supprimées” = Table.RemoveColumns(#”Lignes filtrées”,{“Index”}),
#”Lignes groupées” = Table.Group(#”Colonnes supprimées”, {“iD”}, {{“Nombre”, each Table.AddIndexColumn(_,”Index”,0,1), type table}}),
#”Nombre développé” = Table.ExpandTableColumn(#”Lignes groupées”, “Nombre”, {“Colonne1”, “Index”}, {“Colonne1”, “Index”}),
#”Requêtes fusionnées1″ = Table.NestedJoin(#”Nombre développé”, {“Index”}, Ref, {“Ligne”}, “Ref”, JoinKind.LeftOuter),
#”Ref développé” = Table.ExpandTableColumn(#”Requêtes fusionnées1″, “Ref”, {“Ligne”, “Texte”}, {“Ligne”, “Texte”}),
#”Lignes filtrées2″ = Table.SelectRows(#”Ref développé”, each ([Texte] <> null)),
#”Colonnes supprimées1″ = Table.RemoveColumns(#”Lignes filtrées2″,{“Index”, “Ligne”}),
#”Colonne dynamique1″ = Table.Pivot(#”Colonnes supprimées1″, List.Distinct(#”Colonnes supprimées1″[Texte]), “Texte”, “Colonne1″),
#”Colonnes supprimées2″ = Table.RemoveColumns(#”Colonne dynamique1”,{“iD”}),
#”Valeur remplacée” = Table.ReplaceValue(#”Colonnes supprimées2″,”.”,”,”,Replacer.ReplaceText,{“Montant HT”, “Montant TTC”}),
#”Type modifié1″ = Table.TransformColumnTypes(#”Valeur remplacée”,{{“Date de virement”, type date}, {“N* de virement”, type text}, {“Etat”, type text}, {“Montant TTC”, Currency.Type}, {“Montant HT”, Currency.Type}, {“Date de dépôt”, type date}, {“Date d’émission”, type date}, {“Réfèrence”, type text}})
in
#”Type modifié1″Amicalement
Attachments:
You must be logged in to view attached files.23 janvier 2024 à 12 h 20 min #136744jsimon75002ParticipantBonjour Xavier,
Super 🙌 merci beaucoup, je vais garder et décortiquer ton fichier.
C’est parfait pour mon usage.
Excellente soirée.
23 janvier 2024 à 12 h 25 min #136745DanielParticipantBonjour jsimon75002, Xavier, Le Forum,
Voici ma contribution
1ère requête
let
Source = Excel.CurrentWorkbook(){[Name=”tabData”]}[Content],
AjoutColIndex = Table.AddIndexColumn(Source, “Index”, 1, 1, Int64.Type),
Conserver8PremieresLignes = Table.FirstN(AjoutColIndex,8),
ModificationTypeDonnees = Table.TransformColumnTypes(Conserver8PremieresLignes,{{“Index”, type text}, {“Colonne1”, type text}}),
PermutationColonnes = Table.ReorderColumns(ModificationTypeDonnees,{“Index”, “Colonne1″}),
TranspositionTable = Table.Transpose(PermutationColonnes),
CreationDesListes = Table.ToColumns(TranspositionTable)
in
CreationDesListes
2ème requête
let
Source = Excel.CurrentWorkbook(){[Name=”tabData”]}[Content],
#”Type modifié” = Table.TransformColumnTypes(Source,{{“Colonne1″, type any}}),
#”Premières lignes supprimées” = Table.Skip(#”Type modifié”,8),
AjoutColIndex = Table.AddIndexColumn(#”Premières lignes supprimées”, “Index”, 1, 1, Int64.Type),
AjoutColLigneDétails = Table.AddColumn(AjoutColIndex, “LigneDétail”, each if [Colonne1] = “Détails” then 1 else if [Index] = 1 then 1 else null),
PaquetIdentifiant = Table.AddColumn(AjoutColLigneDétails, “IdentifiantPaquetLignes”, each if [Index]=1 then 1 else List.Sum(List.FirstN(AjoutColLigneDétails[LigneDétail],[Index]))),
FiltreLignesNullOuDétails = Table.SelectRows(PaquetIdentifiant, each ([Colonne1] <> null and [Colonne1] <> “Détails”)),
#”Lignes groupées” = Table.Group(FiltreLignesNullOuDétails, {“IdentifiantPaquetLignes”}, {{“All”, each _, type table [Colonne1=any, Index=number, LigneDétail=any, IdentifiantPaquetLignes=number]}}),
#”Personnalisée ajoutée” = Table.AddColumn(#”Lignes groupées”, “ColIdentifiant”, each Table.AddIndexColumn([All],”ColIdentifiant”,1)),
#”ColIdentifiant développé” = Table.ExpandTableColumn(#”Personnalisée ajoutée”, “ColIdentifiant”, {“Colonne1”, “ColIdentifiant”}, {“Colonne1”, “ColIdentifiant.1″}),
#”Colonnes supprimées” = Table.RemoveColumns(#”ColIdentifiant développé”,{“All”}),
#”Colonne dynamique” = Table.Pivot(Table.TransformColumnTypes(#”Colonnes supprimées”, {{“ColIdentifiant.1”, type text}}, “fr-FR”), List.Distinct(Table.TransformColumnTypes(#”Colonnes supprimées”, {{“ColIdentifiant.1”, type text}}, “fr-FR”)[ColIdentifiant.1]), “ColIdentifiant.1”, “Colonne1″),
#”Colonnes renommées” = Table.RenameColumns(#”Colonne dynamique”,tabEntetesColonnes),
#”Valeur remplacée” = Table.ReplaceValue(#”Colonnes renommées”,”€”,””,Replacer.ReplaceText,{“Montant HT”, “Montant TTC”}),
#”Valeur remplacée1″ = Table.ReplaceValue(#”Valeur remplacée”,”.”,”,”,Replacer.ReplaceText,{“Montant HT”, “Montant TTC”}),
#”Type modifié1″ = Table.TransformColumnTypes(#”Valeur remplacée1″,{{“Date d’émission”, type date}, {“Date de dépôt”, type date}, {“Etat”, type text}, {“Réfèrence”, Int64.Type}, {“Date de virement”, type date}, {“N* de virement”, type text}, {“Montant HT”, type number}, {“Montant TTC”, type number}}),
#”Colonnes supprimées1″ = Table.RemoveColumns(#”Type modifié1″,{“IdentifiantPaquetLignes”})
in
#”Colonnes supprimées1″Voir fichier ci-joint
Cordialement
DanielAttachments:
You must be logged in to view attached files. -
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.