XL 2019 Power Query - Passages paramètres d'importation pour fichier TXT

Flx1er

XLDnaute Occasionnel
Bonjour,
Lors d'une importation d'un fichier texte sans séparateur, je voudrais savoir s'il y a moyen dans une fonction ou une requête de passer des arguments permettant la structuration des données de ce fichier.
Sur l'onglet "Format" du fichier excel joint, se trouve le formatage des informations et les paramètres à passer (Col Max, Fin et Nom) au niveau :
  • Source = Csv.Document(File.Contents("C:\Users\Util\Documents\PQ\2022\M06\Fich.txt"),Col Max,Fin,ExtraValues.Ignore,1252),
  • #"Colonnes renommées" = Table.RenameColumns(#"Type modifié",Nom)

VB:
let
    Source = Csv.Document(File.Contents("C:\Users\Util\Documents\PQ\2022\M06\Fich.txt"),[COLOR=rgb(61, 142, 185)]32[/COLOR],{[COLOR=rgb(0, 168, 133)]0,9,11,31,38,39,47,51,59,63,70,71,79,83,91,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112[/COLOR]},ExtraValues.Ignore,1252),
    #"Type modifié" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", type text}, {"Column3", type text}, {"Column4", Int64.Type}, {"Column5", type text}, {"Column6", Int64.Type}, {"Column7", Int64.Type}, {"Column8", Int64.Type}, {"Column9", Int64.Type}, {"Column10", Int64.Type}, {"Column11", Int64.Type}, {"Column12", Int64.Type}, {"Column13", Int64.Type}, {"Column14", Int64.Type}, {"Column15", type text}, {"Column16", Int64.Type}, {"Column17", Int64.Type}, {"Column18", Int64.Type}, {"Column19", Int64.Type}, {"Column20", Int64.Type}, {"Column21", Int64.Type}, {"Column22", Int64.Type}, {"Column23", Int64.Type}, {"Column24", Int64.Type}, {"Column25", Int64.Type}, {"Column26", Int64.Type}, {"Column27", Int64.Type}, {"Column28", Int64.Type}, {"Column29", Int64.Type}, {"Column30", Int64.Type}, {"Column31", Int64.Type}, {"Column32", Int64.Type}, {"Column33", type text}}),
    #"Colonnes renommées" = Table.RenameColumns(#"Type modifié",{[COLOR=rgb(251, 160, 38)]{"Column1","ID"},{"Column2","Type presta"},{"Column3","IEP"},{"Column4","Mesure"},{"Column5","TIC"},{"Column6","Date début m"},{"Column7","Heure début m"},{"Column8","Date fin m"},{"Column9","Heure fin m"},{"Column10","Numéro p"},{"Column11","type p"},{"Column12","Date début p"},{"Column13","Heure début p"},{"Column14","Date fin p"},{"Column15","Heure fin p"},{"Column16","Motif : V"},{"Column17","Motif : S ou TS"},{"Column18","Motif : A hors s"},{"Column19","Motif : E"},{"Column20","Motif : A"},{"Column21","PC S"},{"Column22","PC É"},{"Column23","PC T"},{"Column24","PC Éd"},{"Column25","PC Tn"},{"Column26","PC Td"},{"Column27","PC Tr"},{"Column28","PC A"},{"Column29","Tsp"},{"Column30","PST I"},{"Column31","PST c"},{"Column32","Pc"}[/COLOR]})
in
    #"Colonnes renommées"

En vous remerciant
Cordialement
 

Pièces jointes

  • Format fich.zip
    45.3 KB · Affichages: 7

Hasco

XLDnaute Barbatruc
Repose en paix
Bonsoir,

C'est un beau foutoir votre fichier :)
J'ai supposé dans le fichier joint que vous vouliez éclater les lignes de votre fichier texte en colonne à partir des positions.

Si c'est ça, il n'est pas la peine de chercher midi à 14 heures.
Dans le fichier, deux noms "Positions_Colonnes" (E11:E42) et "Noms_Colonnes" (A11:A42)
Et pour la requête :
VB:
// Lignes
let
    Source = Table.FromList(Lines.FromBinary(File.Contents("-----------\Fich.txt")),null,{"Lignes"}),
    Positions = Excel.CurrentWorkbook(){[Name="Positions_Colonnes"]}[Content][Column1],
    Noms_Colonnes = Excel.CurrentWorkbook(){[Name="Noms_Colonnes"]}[Content][Column1],
    #"Fractionner la colonne par position" = Table.SplitColumn(Source, "Lignes", Splitter.SplitTextByPositions(Positions),Noms_Colonnes)
in
    #"Fractionner la colonne par position"

Changez le "-----------" par le chemin vers votre fichier.

La prochaine fois, essayez de nous donner quelque chose de moins fouillis :)

[Edition de samedi 10:21]
Dans le fichier joint j'ai traité le problème du nombre de colonnes à retourner (Col_Max)
On peut également traiter le problème des types de colonnes, soit dans l'avant dernière étape soit au moment de l'éclatement des lignes en colonnes.
[/Edition]

Cordialement
 

Pièces jointes

  • format fich.xlsx
    39 KB · Affichages: 11
Dernière édition:

Flx1er

XLDnaute Occasionnel
Bonjour Hasco,
Vraiment désolé pour le fichier bordélique.
Merci pour vos solutions.
Dans votre requête, j'ai ajouté l'étape "Insert valeur Positions", afin d'insérer dans la liste la valeur 0, de ce fait, le champ ID est traité.

La requête "Flx" est une duplication de la requête "Lignes".

Sur cette nouvelle requête, à l'aide de la fonction fnGetParametre, j'ai passé en paramètre les valeurs (Dossier; Année; Mois; Fichier) de la zone nommée "Tableau2" afin de reconstituer l'arborescence du fichier à atteindre.

N'y a t-il pas un autre moyen pour effectuer ce travail ?
car au niveau de la requête "Selection de fichier" (et sur l'onglet du même nom), il y a dans "Folder Parth" et dans "Name" les informations nécessaires.
Comment pouvons nous récupérer ces informations pour les insérer à l'étape Source de la requête Flx ?

En vous remerciant,
Bien cordialement,
 

Pièces jointes

  • format fich.xlsx
    43.3 KB · Affichages: 5

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Franchement pourquoi avoir rajouté un Tableau Tableau2 (Format!A2:C6) alors qu'il existait déjà un tableau tParam (Format!A2:B6) il suffisait d'ajouter une colonne à tParam !

Non, je ne comprends pas, ce que vous faites, pourquoi vous le faites et surtout pourquoi vous n'osez pas.
Essayez, testez que diable ! Vous connaissez le dicton : sur l'enclume remets mille fois ton ouvrage.

Faites une requête sur un dossier, voyez comment ça se passe, comment vous pouvez filtrer les fichiers...
Testez et essayez en sachant ce que vous faites et pourquoi vous le faites, ne tapez pas au hasard

Il me semble pour vous avez tout pour parvenir à quelque chose.

D'ici je ne vois pas (ou comprends pas) ce que je peux faire pour vous à ce stade.

Ou alors posez différemment votre question.

bon courage

Si il y a quelque chose : si vous voulez rajouter un élément au début d'un tableau il suffit de les concaténer :
étape "Insert valeur Positions" :
={0} & Positions

On pourrait très bien se passer de cette étape en réécrivant l'étape Position de la sorte :
= {0} & Excel.CurrentWorkbook(){[Name="Positions_Colonnes"]}[Content][Column1]
 
Dernière édition:

Flx1er

XLDnaute Occasionnel
Bonjour à tous

Je croyais avoir répondu mais j'ai du oublier de poster
J'avais fait cela vendredi
Bonjour Chris,
J'ai l'erreur suivante :"Formula.Firewall : Requête « Lignes » (étape « Source ») référence d'autres requêtes ou étapes et ne peut donc pas accéder directement à une source de données. Reconstruisez cette combinaison de données."

je ne la comprends pas
pouvez-vous m'aider
Cordialement
 

chris

XLDnaute Barbatruc
re
Lancer PowerQuery, Fichier, Options et paramètres, Options de requête, partie GLOBAL : Confidentialité, Toujours ignorer les paramètres de niveau de confidentialité

Cela supprimera le message d'erreur
Cette option par défaut de niveau de confidentialité ne sert à rien dans 99% des cas sauf à créer des problèmes
 

Statistiques des forums

Discussions
311 720
Messages
2 081 899
Membres
101 834
dernier inscrit
Jeremy06510