Passer d’une liste en colonne à un tableau.

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 4 mois.
4 sujets de 1 à 4 (sur un total de 4)
  • Auteur
    Articles
  • #136714
    jsimon75002
    Participant

    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 virement

    67572
    22/01/2024
    22/01/2024
    66.5€
    66.5€
    Transmis

    Détails
    67357
    18/01/2024
    18/01/2024
    2182.95€
    2182.95€
    Transmis
    VIR374
    22/01/2024
    Détails

    Les 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.
    #136723
    Xavier Allart
    Participant

    Bonjour

    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 virement

    Power 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és

    Code :
    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.
    #136744
    jsimon75002
    Participant

    Bonjour Xavier,

    Super 🙌 merci beaucoup, je vais garder et décortiquer ton fichier.

    C’est parfait pour mon usage.

    Excellente soirée.

    #136745
    Daniel
    Participant

    Bonjour 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
    Daniel

    Attachments:
    You must be logged in to view attached files.
4 sujets de 1 à 4 (sur un total de 4)
  • Vous devez être connecté pour répondre à ce sujet.