Déplacement colonne par numéro

Accueil – Le CFO masqué Forums Power Query Déplacement colonne par numéro

5 sujets de 1 à 5 (sur un total de 5)
  • Auteur
    Articles
  • #64020
    philippe.muniesa
    Participant

    Bonsoir,

    Je n’ai pas trouvé dans la doc MS.
    Y a t’il un moyen de demander à PowerQuery de déplacer la colonne 5 en colonne 2, les autres colonnes ne changeant pas de place.

    Merci

    PH Muniesa

    #64026
    Kim Leblanc
    Participant

    Bonjour,

    Si je comprends bien votre question, vous ne voulez pas que tous les noms de colonnes soit listés dans la fonction Table.ReorderColumns?

    Vous pourriez utiliser un List.ReorderColumns et y spécifier l’ordre de vos 2 premières colonnes soit la column1 et la column5, ensuite vous ajouté la fonction List.RemoveItems avec Table.ColumnNames en premier paramètre (pour prendre toutes les colonnes existantes dans l’étape précédente) puis dans les paramètres suivants inscrire les colonnes déjà listées dans le Table.ReorderColumns (pour listé toutes les autres colonnes).

    = Table.ReorderColumns(#”étapeprécédente”,{“Column1”, “Column5″} & List.RemoveItems(Table.ColumnNames(#”étapeprécédente”),{“Column1”, “Column5”}))

    Si ce n’est pas ce que vous souhaitez faire, pouvez-vous nous donner un exemple concret?

    AU plaisir,

    Kim

    #64083
    philippe.muniesa
    Participant

    Merci,

    Je vais essayer votre solution, mais j’imaginais une solution où l’on ne fait pas référence aux noms des colonnes, mais à leur rang dans la liste des colonnes

    Tout simplement en indiquant Table.DeplaceColumns(5,1) ou quelque chose de similaire.(malheureusement cette instruction ne semble pas exister).

    Ce qui m ennuie avec table.Reorder, c’est qu’il faut lister tous les noms des colonnes présentes dans la table.

    Cordialement

    Philippe Muniesa

    #64115
    Stéphane Lorin
    Participant

    Bonjour Philippe

    Vous pouvez obtenir le nom de votre colonne 1 par la formule Table.ColumnNames(#”étapeprécédente”){0}
    et de votre colonne 5 par Table.ColumnNames(#”étapeprécédente”){4}
    En effet, Table.ColumnNames renvoie une liste et la première valeur de cette liste est obtenue par le {0} et la cinquième par {4}
    Vous remplacez donc “Column1” et “Column5” de la formule de Kim par les formules ci-dessus.

    En partant de l’étape “Source” cela donne :
    = Table.ReorderColumns(Source,{Table.ColumnNames(Source){4},Table.ColumnNames(Source){0}} & List.RemoveItems(Table.ColumnNames(Source), {Table.ColumnNames(Source){4}, Table.ColumnNames(Source){0}}))

    Autre possibilité, vous rétrogradez les en-têtes en première ligne (Table.DemoteHeaders), les colonnes d’appellent maintenant Column1 … vous appliquez la formule de Kim et vous n’avez plus qu’à remonter la première ligne en en-tête (Table.PromoteHeaders).

    Stéphane

    #64240
    philippe.muniesa
    Participant

    Stéphane,

    Merci pour Ces techniques qui permettent de s’affranchir des noms de colonne, et des casses tête que ça pose quand le nombre de colonnes ou leur nom est modifié dans une procédure.

    Cordialement

    Philippe Muniesa

5 sujets de 1 à 5 (sur un total de 5)
  • Vous devez être connecté pour répondre à ce sujet.