Microsoft 365 Transposer une cellule sur 2 en colonnes

  • Initiateur de la discussion Initiateur de la discussion fxbrg
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

Autre Solution qui marche sur toute version d'Excel :

1696389133530.png


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:
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

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,
 
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

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
 
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
Merci beaucoup, je vais tester ça 🙂
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
XL 2013 Aide VBA
Réponses
4
Affichages
1 K
Retour