Power Query importer fichier CSV, dont le chemin est dans une cellule Excel

  • Initiateur de la discussion Initiateur de la discussion vgendron
  • 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 !

vgendron

XLDnaute Barbatruc
Bonjour,
J'interviens sur un post

j'ai donc une requete qui importe le fichier CSV, mais le chemin est en "dur" directement dans la requete

ce que je souhaite, c'est mettre ce chemin dans une cellule Excel que PQ va lire pour mettre dans une variable

après avoir mis le chemin complet du fichier à importer dans un tableau,
1) j'importe le tableau dans PQ
2) DrillDown pour en faire un paramètre "CheminComplet"

l'instruction d'import du fichier passe de
VB:
Source = Csv.Document(File.Contents("C:\Users\vince\Downloads\Fevrier.csv"),[Delimiter=";", Columns=15, Encoding=1252, QuoteStyle=QuoteStyle.None]),

à
Code:
Source = Csv.Document(File.Contents(CheminComplet),[Delimiter=";", Columns=15, Encoding=1252, QuoteStyle=QuoteStyle.None]),

MAIS j'ai un message d'erreur m'indiquant un pb de chemin absolu...

en cherchant un peu, j'ai vu une solution de @merinos-BernardEtang qui utilise deux cellules
Une pour le chemin nommée "CheminCSV" et une pour le nom du fichier nommée "FichierCSV"

le code devient donc
Code:
    Chemin =Excel.CurrentWorkbook(){[Name="CheminCSV"]}[Content]{0}[Column1],
    Fichier=Excel.CurrentWorkbook(){[Name="FichierCSV"]}[Content]{0}[Column1],
    Source = Csv.Document(Chemin&Fichier,[Delimiter=";", Columns=15, Encoding=1252, QuoteStyle=QuoteStyle.None]),

plus d'erreur MAIS le contenu reste vide

Sauriez vous m'indiquer ce qui ne va pas??
 
Solution
Bonjour @vgendron, le forum,

avec le chemin complet (par exemple C:\PQ\PQ.csv) dans une cellule nommée "Table1".

PowerQuery:
= Table.PromoteHeaders(Csv.Document(File.Contents(Table.FirstValue(Excel.CurrentWorkbook(){[Name="Table1"]}[Content])),[Delimiter=",", Columns=15, Encoding=1252]))

Bonne journée
ha et.. evidemment j'ai essayé en remettant le File.Contents

VB:
 Chemin =Excel.CurrentWorkbook(){[Name="CheminCSV"]}[Content]{0}[Column1],
    Fichier=Excel.CurrentWorkbook(){[Name="FichierCSV"]}[Content]{0}[Column1],
    Source = Csv.Document(File.Contents(Chemin&Fichier),[Delimiter=";", Columns=15, Encoding=1252, QuoteStyle=QuoteStyle.None]),

je reviens à une erreur d'adresse absolue...
 
Bonjour @vgendron, le forum,

avec le chemin complet (par exemple C:\PQ\PQ.csv) dans une cellule nommée "Table1".

PowerQuery:
= Table.PromoteHeaders(Csv.Document(File.Contents(Table.FirstValue(Excel.CurrentWorkbook(){[Name="Table1"]}[Content])),[Delimiter=",", Columns=15, Encoding=1252]))

Bonne journée
 
Bonjour au fil de la discussion,
pour faire simple sur ce sujet voir tous mes post à propos du passage par paramètres via le contenu d'un tableau TS ou d'une cellule et une bonne partie des post que j'ai publié sur pwq passent par des passages de paramètres pour importer des fichiers .csv
j'ai même publier un sujet démontrant que l'on peut récupérer des paramètres dans un fichier texte externe sous différents format y compris en utilisant la syntaxe des fichiers .ini de windows

faire une recherche sous mon peusdo oguruma et tu auras toute ma littérature sur le sujet powerquery
dans l'un d'eux je montre comment vérifier la présence d'un fichier....
j'espère t'avoir aidé 🙂
qq exemples à toi pour les autres recherches dans le site
bonne lecture





en vba : https://excel-downloads.com/threads/classe-vba-pour-gerer-les-parametres-dune-application.20077568/







 
Dernière édition:
rebonjour
un autre
 
Re.... pour éviter plus de spéléo dans le forum
dans ce fichier : FileInfoDateAndTimeRefresh_V0.022 là fonction pour tester la présence d'un fichier
PowerQuery:
let fnFileExists = (
                    pFilePathFullName as any
        ) as logical =>
        let
            FilePathNameString = pFilePathFullName,

            //=========================================================================================
            // Longueur totale du nom de fichier avec son chemin
            //=========================================================================================
            Length = Text.Length(FilePathNameString),

            //=========================================================================================
            // On calcule la position du dernier slash pour identifer le fichier
            //=========================================================================================
            PositionLastSlash = Text.PositionOf(FilePathNameString,"\",Occurrence.Last),

            //=========================================================================================
            // Chemin du fichier
            //=========================================================================================
            FolderPathName = Text.Start(FilePathNameString,PositionLastSlash + 1),

            //=========================================================================================
            // Nom du fichier
            //=========================================================================================
            FileName = Text.End(FilePathNameString,Length - PositionLastSlash - 1),

            //=========================================================================================
            // Vérification de l'existance du fichier
            //=========================================================================================
            RecordAttributes = try Folder.Contents(FolderPathName){[Name=FileName]}[Attributes] otherwise false,
            FileExists=if RecordAttributes is record then true else false,
            isExists = if FileExists then true else false
        in
            isExists
in
    fnFileExists

Un exemple pour récupérer des paramètres dans une cellule
PowerQuery:
let fnGetParameters =
    (pTable as text, pName as any) =>
    let
        ParamSource = Excel.CurrentWorkbook(){[Name=pTable]}[Content],
        ParamRow = Table.SelectRows(ParamSource, each ([PARAMETRE] = pName)),
        Value=
        if Table.IsEmpty(ParamRow)=true
            then null
        else Record.Field(ParamRow{0},"VALEUR")
    in
        Value
in
    fnGetParameters

une autre manière
PowerQuery:
let fnGetRangeValue = (
            pRangeName as text,
            optional pRow as number,
            optional pColumn as number
        ) =>
     
        let
            //***********************************************************************************************************
            // Gestion des paramètres
            //***********************************************************************************************************
            RangeName=pRangeName,
            Row=if pRow is null or pRow = 0 then 0 else pRow - 1,
            Column=if pColumn is null or pColumn = 0 then 1 else pColumn,
            WbExcel=Excel.CurrentWorkbook(),

            //***********************************************************************************************************
            // Construction de la liste des objets connus dans Excel
            //***********************************************************************************************************
            TbList=WbExcel[Name],
            bFound=List.Contains(TbList,RangeName),

            //***********************************************************************************************************
            // La recherche est uniquement effectuée si le champ est trouvé dans la liste des objets connus dans Excel
            //***********************************************************************************************************
            Value=if bFound
                      then
                            let
                              //--------------------------------------------------------
                              // Traitements de recherches si le nom de champ est connu
                              //--------------------------------------------------------
                              StrRange="WbExcel{[Name=RangeName]}[Content]{Row}[Column" & Text.From(Column) & "]",
                              RecEval=[WbExcel=WbExcel, Row=Row, Column=Column, RangeName=RangeName],
                              Eval=Expression.Evaluate(StrRange,RecEval)
                            in
                              Eval
                      else
                            "#N/A"
 
        in
            Value
in
    fnGetRangeValue

et les autres fichiers exemples pour gérer les paramètres
à toi d'adapter les paramètres avec tes propres fichiers

pour les fichiers à la sauce .ini (à tester avec tes propres fichiers ini)
GetPARAM_INI_V0.020

zz__PQ_PARAMS.zip : un fichier d'exemples de paramètres

Tu as donc de quoi lire 🙂
 

Pièces jointes

- 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
Power Query Power Query
Réponses
26
Affichages
438
Réponses
2
Affichages
589
Retour