XL 2019 Power Query - Possibilité de passer un paramétre dans "Fractionner la colonne"

Flx1er

XLDnaute Occasionnel
Bonjour,
Pour fractionner une colonne sur plusieur ligne, il faut obligatoirement saisir manuellement (dans mon cas) un nombre de caractères (par exemple 6 comme indiqué ci-dessous).

= Table.ExpandListColumn(Table.TransformColumns(#"Personnalisée ajoutée", {{"ChaineCar", Splitter.SplitTextByRepeatedLengths(6), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "ChaineCar")

Pour chaque ligne, Il y a-t-il un moyen de passer en paramètre la longueur dans la fonction Splitter.SplitTextByRepeatedLengths

Par exemple, j'ai pour la première ligne les données suivante champs :
LongString =78
Fréquence = 13

Chaque ligne est un multiple de 6

En résumé, je souhaiterais effectuer : Splitter.SplitTextByRepeatedLengths(LongString/Fréquence)
En vous remerciant.
Cordialement,
 
Dernière édition:
Solution
Bonsoir,

Vous avez un exemple tout cuit dans la Requête "DA" du fichier du post 19 d'une de vos précédentes conversations . Etape "DA Liste"
=Table.AddColumn(#"DA Table développé", "DA", each if [DA String] <> null then Splitter.SplitTextByRepeatedLengths([Taille])( [DA String]) else null)
Où Taille est définie dans une autre colonne.

Mais sans doute vous faudra-t-il préciser votre demande. D'où sortira la valeur du paramètre ?
Paramètre pour une ou plusieurs requêtes ?

Bref faites un exemple

Cordialement

Hasco

XLDnaute Barbatruc
Repose en paix
Bonsoir,

Vous avez un exemple tout cuit dans la Requête "DA" du fichier du post 19 d'une de vos précédentes conversations . Etape "DA Liste"
=Table.AddColumn(#"DA Table développé", "DA", each if [DA String] <> null then Splitter.SplitTextByRepeatedLengths([Taille])( [DA String]) else null)
Où Taille est définie dans une autre colonne.

Mais sans doute vous faudra-t-il préciser votre demande. D'où sortira la valeur du paramètre ?
Paramètre pour une ou plusieurs requêtes ?

Bref faites un exemple

Cordialement
 

Flx1er

XLDnaute Occasionnel
Bonjour mromain et Hasco,
Ci-joint un fichier "Fractionner colonne.xlsx" comportant une source de données et le résultat.

En appliquant la solution de Hasco, l'onglet "Resultat" présente la solution à mon problème initial.
En vous remerciant de votre aide.
Cordialement,
 

Pièces jointes

  • Fractionner colonne.xlsx
    18.5 KB · Affichages: 7

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Super !
Au vu de votre exemple, je me suis demandé : que se passe-t-il si une chaîne (AZERTY par exemple) n'était pas de longueur N fois Frequence ?

J'ai trouvé intéressant de traiter le cas.

Alors je vous ai préparé deux exemples en ajoutant un "M" en fin de chaîne "AZERTY" qui devient donc "AZERTYM" qui aura des éléments de taille 2,33333

Le premier sur la base de votre requête 'Tableau 1' à laquelle simplement rajouté la fonction Number.IntegerDivide( [Longueur ChaineCar],[Frequence]) pour avoir un entier même si la chaîne n'est pas N de longueur N*Frequence.
Par contre la liste retournée n'a pas [Frequence] éléments mais [Frequence) +1 élément.
Pour l'exemple la liste à 4 items {"AZ","ER","TY","M"} au lieu de trois.

J'ai construit le deuxième exemple un peu différemment, pour vous montrer comment vous pouvez intégrer une fonction (sous-requête) au moment de l'ajout d'une colonne.
Cet exemple retourne une liste de 3 éléments seulement par l'ajout de la fonction List.FirstN qui renvoie les N premiers élément d'une liste.

Comme tout est question de choix, je vous laisse, si le cas se produit, choisir la solution que vous voulez.

Cordialement
 

Pièces jointes

  • Flx1er-Fractionner colonne.xlsx
    30.2 KB · Affichages: 13

Flx1er

XLDnaute Occasionnel
Bonjour,

Super !
Au vu de votre exemple, je me suis demandé : que se passe-t-il si une chaîne (AZERTY par exemple) n'était pas de longueur N fois Frequence ?

J'ai trouvé intéressant de traiter le cas.

Alors je vous ai préparé deux exemples en ajoutant un "M" en fin de chaîne "AZERTY" qui devient donc "AZERTYM" qui aura des éléments de taille 2,33333

Le premier sur la base de votre requête 'Tableau 1' à laquelle simplement rajouté la fonction Number.IntegerDivide( [Longueur ChaineCar],[Frequence]) pour avoir un entier même si la chaîne n'est pas N de longueur N*Frequence.
Par contre la liste retournée n'a pas [Frequence] éléments mais [Frequence) +1 élément.
Pour l'exemple la liste à 4 items {"AZ","ER","TY","M"} au lieu de trois.

J'ai construit le deuxième exemple un peu différemment, pour vous montrer comment vous pouvez intégrer une fonction (sous-requête) au moment de l'ajout d'une colonne.
Cet exemple retourne une liste de 3 éléments seulement par l'ajout de la fonction List.FirstN qui renvoie les N premiers élément d'une liste.

Comme tout est question de choix, je vous laisse, si le cas se produit, choisir la solution que vous voulez.

Cordialement
Hasco,
Je vous remercie vraiment pour ce complément de solution.
Bien cordialement,
 

Statistiques des forums

Discussions
311 713
Messages
2 081 806
Membres
101 819
dernier inscrit
lukumubarth