Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Transposer une cellule sur 2 en colonnes

fxbrg

XLDnaute Nouveau
Bonjour à tous,
Désolé si le titre n'est pas clair, mais le besoin est très simple

Préalable je ne peux pas utiliser de macro (dommage parce qu'en vba c'est simple et ça marche nickel), corporate oblige...

J'importe via Power Query les données d'une courbe depuis un fichier csv. Ces données sont formatées en "ordonnée1, abscisse1, ordonnée2, abscisse2, ordonnée3, abscisse3" etc. Elles ont de longueur variable, grosso modo entre 30 et 1000 points en tout. J'ai besoin de pouvoir recréer les courbes originelles, et pour ça j'ai besoin d'un bête tableau à deux colonnes. Suite à conversion, je me retrouve avec une ligne de cellules.

Par l'exemple, je voudrais passer de ça


28​
154​
23​
156​
33​
161​
24​
163​
26​
166​

à ça (et que ce soit dynamique) pour pouvoir construire mon graph ensuite :


28​
154​
23​
156​
33​
161​
24​
163​
26​
166​

Un grand merci d'avance,

Amicalement,
JF
 

R@chid

XLDnaute Barbatruc
Bonjour @ tous,
Salut cher CISCO

Si tes données sont placées dans les cellules de A1 à X1, alors :
VB:
=ORGA.LIGNES(A1:X1;2)

Merci de joindre un fichier Excel au lieu d'une capture d'écran.

Cordialement
 

RyuAutodidacte

XLDnaute Impliqué
Supporter XLD
Bonjour,

Autre Solution qui marche sur toute version d'Excel :



Résultat en colonne A et B :
Col A

Code:
=TRANSPOSE(INDEX($A$1:$J$1;1;{1.3.5.7.9}))
Col B
Code:
=TRANSPOSE(INDEX($A$1:$J$1;1;{2.4.6.8.10}))

OU

Résultat en colonne D et E
(Formules à étirer vers le bas) :
Col D

Code:
=TRANSPOSE(INDEX($A$1:$J$1;1;LIGNE(A1)+LIGNES($A$1:A1)-1))
Col E
Code:
=TRANSPOSE(INDEX($A$1:$J$1;1;LIGNE(A2)+LIGNES($A$1:A1)-1))

OU

Formule avec DECALER
(Formules à étirer vers le bas) :
Code:
=DECALER($A$1;0;LIGNE(A1)+LIGNES($A$1:A1)-2)
' et
=DECALER($A$1;0;LIGNE(A1)+LIGNES($A$1:A1)-1)
 
Dernière édition:

Cousinhub

XLDnaute Barbatruc
Bonjour,
Quitte à récupérer via PQ, pourquoi ne pas traiter par PQ?
Ce code te permet de mettre ta ligne sous forme de tableau à 2 colonnes
PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
    Transp = Table.Transpose(Source),
    Transform = Table.FromRows(List.Split(Transp[Column1],2), {"Ordonnée", "Abscisse"})
in
    Transform

Un petit fichier exemple pour illustrer
Bonne journée
 

Pièces jointes

  • PQ_Transpose ligne en 2 colonnes.xlsx
    17.3 KB · Affichages: 1

fxbrg

XLDnaute Nouveau
Wow, merci à tous! J'aime bien l'idée de Cousinhub, mais la situation est un peu plus compliquée parce que de fait, le champ "Curve data" ressemble à ça dans mon import :
(0,500,500):5355,0,5623,7,5695,10,5633,12,5598,12,5716,14,5925,19
J'ai d'abord une parenthèse avec 3 paramètres, et je fais une première conversion (sur le : pour récupérer ma chaine séparée par des virgules. Je vais essayer de faire ça dans PQ, mais c'est pas exclu que je revienne vous solliciter
Merci encore,
 

fxbrg

XLDnaute Nouveau
Re-,
Ton fichier d'origine est un csv? (Annule cette question, la réponse est dans le 1er fil.... oupss)
Si c'est le cas, tu peux mettre un fichier exemple?
Bonjour,
Pour le plaisir de comprendre, voici un petit fichier exemple. le champ Curve Data est le dernier. Merci d'avance!

ps : apparemment on ne peut pas joindre de csv, j'ai fait une version .xls, mais à la base c'est un csv (qui provient d'une base de donnée SQLite)
 

Pièces jointes

  • TestPQ.xls
    22.5 KB · Affichages: 3

Cousinhub

XLDnaute Barbatruc
Re-,
En mettant le bon chemin et le bon nom du fichier csv, ça pourrait donner ceci :
PowerQuery:
let
    Source = Csv.Document(File.Contents("C:\Users\cousi\Documents\Excel\exemples\PQ\Essai fxbrg.csv"),[Delimiter=",", Columns=61, Encoding=1252, QuoteStyle=QuoteStyle.None]),
    PromoHead = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
    SupprCol = Table.SelectColumns(PromoHead,{"CurveData"}),
    Extrait = Table.TransformColumns(SupprCol, {{"CurveData", each Text.AfterDelimiter(_, ":"), type text}}),
    Fract = Table.ExpandListColumn(Table.TransformColumns(Extrait, {{"CurveData", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "CurveData"),
    Transform = Table.FromRows(List.Split(Fract[CurveData],2), {"Ordonnée", "Abscisse"})
in
    Transform
 

fxbrg

XLDnaute Nouveau
Merci beaucoup, je vais tester ça
 

Discussions similaires

Réponses
4
Affichages
948
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…