Power Query DataSource.Error : Exécution d'une requête dont le fichier source est ouvert

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

Leché

XLDnaute Junior
Bonjour,

Je dispose d'un fichier A et d'un fichier B.

A la fermeture du fichier A, j'ai un code VBA qui ouvre mon fichier B, et qui actualise les requêtes contenues dans le fichier B.
A noter que le fichier source des requêtes sont contenus dans le fichier A.

Cependant ça ne fonctionne pas et j'ai le message ci-dessous:

DataSource.Error : Le processus ne peut pas accéder au fichier 'Mon lien', car il est en cours d'utilisation par un autre processus.
Détails :
'Mon lien'

Avez vous des idées de comment je peux résoudre ce soucis ? svp

Dans l'attente de vos retours,
Bonne journée,
 
Bonjour le fil

@Leché
Un première idée, ce serait qu'on puisse voir le code VBA, non ?
Histoire de reproduire la chose sur nos PC

PS: On trouvera bien quelque requêtes PQ dans nos stocks à mettre dans le fichier B
Oui bien sur.
Je pensais à un problème de droit/confidentialité car quand j'exécute les requêtes depuis mon fichier B, si mon fichier A est ouvert, ça met le même message d'erreur.
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Application.ScreenUpdating = False

    Dim fileB As Workbook
    Dim fileBPath As String
    ' Lien d'accès vers le fichier du PDCA services supports
    
    username = Environ("USERNAME")
    fileBPath = "C:\Users\" & username & "\OneDrive - TEST\Documents\Dossier\20- PDCA.xlsm"

    ' Ouvrir le fichier du PDCA
    Set fileB = Workbooks.Open(fileBPath)
    
    'Actualiser les requêtes PDCA
    
ActiveWorkbook.Connections("Requête - PDCA_Secteur1").Refresh
ActiveWorkbook.Connections("Requête - PDCA_Secteur2").Refresh
ActiveWorkbook.Connections("Requête - PDCA_Secteur3").Refresh


End Sub
 
Bonjour,
Hello l'agraphe 🙂
Pourrais-tu mettre les 2 ou 3 premières lignes de code de ta requête?
Dans la ligne où tu sélectionnes ton fichier, il faudrait sans doute rajouter une condition du style :

PowerQuery:
..... and not Text.Contains([Name],"~")

Par exemple, mais d'autres commandes le font aussi, peut-être plus propre :

PowerQuery:
= Table.SelectRows(Source, each [Name] = "NomDuFichier" and [Attributes][Hidden]=false)

Par contre, au vu de ton code VBA, je te conseille d'enregistrer le fichier A avant de mettre à jour les requêtes du fichier B
 
Bonjour @Cousinhub

A vue de nez comme cela au feeling
VB:
username = Environ("USERNAME")
fileBPath = "C:\Users\" & username & "\OneDrive - TEST\Documents\Dossier\20- PDCA.xlsm"

n'a rien à voir dans l'histoire ?

Si j'ai bien compris on ouvre la version locale du classeur (et pas celle stockée sur One Drive)

PS: Si je te me trompe, nous aurons au moins échangé nos salutations du jour 😉
 
Bonjour @Cousinhub

A vue de nez comme cela au feeling
VB:
username = Environ("USERNAME")
fileBPath = "C:\Users\" & username & "\OneDrive - TEST\Documents\Dossier\20- PDCA.xlsm"

n'a rien à voir dans l'histoire ?

Si j'ai bien compris on ouvre la version locale du classeur (et pas celle stockée sur One Drive)

PS: Si je te me trompe, nous aurons au moins échangé nos salutations du jour 😉
Hi,
Le message d'erreur qu'il rencontre (et j'aurais du le préciser dans ma réponse) est dû à une importation à partir d'un fichier ouvert (en l’occurrence, le fichier A)
Comme sa requête (B) vient prendre les données dans ce fichier (A), il y a donc 2 fichiers de même nom (mais 1 ouvert, et dont le nom commence par "~" dans la requête.
Pour les différencier, les 2 techniques proposées dans ma réponse devraient résoudre ce souci.
Du moins, c'est ma vision des choses (mais peut-être me trompé-je?)
Bonne apm (bien ensoleillée, à l'ouest)
 
Re

@Cousinhub
Et peu importe d'où vient le fichier A ?
("Cloud" ou pas)
PS: C'est donc qui mé trompé le premier 😉
A l'ouest, le soleil donne comme disait l'autre
Et de la fenêtre de ma cellule, je ne vois aucun nuage dans le cloud 😉
Tout est bleu, comme une orange. (comme disait presque Paulo E. , il y a déjà 96 ans, fichtre!)

Au BAM, j'ajouterai le BA puis la BS et pour finir la BN.
 
Hello l'agraphe 🙂
Pourrais-tu mettre les 2 ou 3 premières lignes de code de ta requête?
Dans la ligne où tu sélectionnes ton fichier, il faudrait sans doute rajouter une condition du style :

PowerQuery:
..... and not Text.Contains([Name],"~")

Par exemple, mais d'autres commandes le font aussi, peut-être plus propre :

PowerQuery:
= Table.SelectRows(Source, each [Name] = "NomDuFichier" and [Attributes][Hidden]=false)

Par contre, au vu de ton code VBA, je te conseille d'enregistrer le fichier A avant de mettre à jour les requêtes du fichier B

Hello, @Cousinhub , @Staple1600

Ci-dessous le début du code :
PowerQuery:
    Source = Excel.Workbook(File.Contents("C:\Users\monnom\serveur\Documents\Dossier\10- Source.xlsm"), null, true),
    #"Colonnes supprimées" = Table.RemoveColumns(Source,{"Item", "Kind", "Hidden"}),
    #"Lignes filtrées" = Table.SelectRows(#"Colonnes supprimées", each ([Name] = "PDCA_Secteur1" or [Name] = "PDCA_Secteur2" or [Name] = "PDCA_Secteur3")),

Oui c'est vrai , j'ai l'enregistrement automatique sur 365, mais je pourrais/devrais le rajouter dans le code.
A noter que je n'ai pas le "OneDrive - TEST" dans le chemin d'accès vs le code VBA , cependant les deux fichiers sont stockés dans le même dossier au même emplacement.

Concernant ce que tu proposes, j'essai de voir comment je l'intègre, je test et je reviens vers toi 🙂

A dispo
 
Hi,
Le message d'erreur qu'il rencontre (et j'aurais du le préciser dans ma réponse) est dû à une importation à partir d'un fichier ouvert (en l’occurrence, le fichier A)
Comme sa requête (B) vient prendre les données dans ce fichier (A), il y a donc 2 fichiers de même nom (mais 1 ouvert, et dont le nom commence par "~" dans la requête.
Pour les différencier, les 2 techniques proposées dans ma réponse devraient résoudre ce souci.
Du moins, c'est ma vision des choses (mais peut-être me trompé-je?)
Bonne apm (bien ensoleillée, à l'ouest)
Quand tu dis "deux fichiers de même nom", ce n'est pas le cas, les noms des fichiers sont distinct.
Je t'avoue n'avoir pas saisie ou je dois modifier
 
Re-,
Tu peux mettre tout le code M de l'éditeur avancé, stp?
Lorsque tu cliques sur les étapes une à une, à quel moment as-tu ce msg d'erreur?

Le message d'erreur est au début dans la source, quand mes deux fichiers sont ouverts.

SI le fichier 10-Source est fermé, tout fonctionne.

Message depuis le fichier 20-PDCA si 10-Source est ouvert : DataSource.Error : Le processus ne peut pas accéder au fichier 'C:\Users\monnom\serveur\Documents\Dossier\10- Source.xlsm', car il est en cours d'utilisation par un autre processus.

PowerQuery:
let
    Source = Excel.Workbook(File.Contents("C:\Users\monnom\serveur\Documents\Dossier\10- Source.xlsm"), null, true),
    #"Colonnes supprimées" = Table.RemoveColumns(Source,{"Item", "Kind", "Hidden"}),
    #"Lignes filtrées" = Table.SelectRows(#"Colonnes supprimées", each ([Name] = "PDCA_1" or [Name] = "PDCA_2" or [Name] = "PDCA_3")),
    #"Data développé" = Table.ExpandTableColumn(#"Lignes filtrées", "Data", {"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13", "Column14", "Column15", "Column16", "Column17", "Column18"}),
    #"Colonnes supprimées1" = Table.RemoveColumns(#"Data développé",{"Data.Column1"}),
    #"Lignes filtrées4" = Table.SelectRows(#"Colonnes supprimées1", each ([Data.Column2] <> null and [Data.Column2] <> "Zone")),
    #"Lignes filtrées1" = Table.SelectRows(#"Lignes filtrées4", each ([Data.Column9] <> "Maintenance" and [Data.Column9] <> "PILOTE" and [Data.Column9] <> "Production")),
    #"Autres colonnes supprimées" = Table.SelectColumns(#"Lignes filtrées1",{"Name", "Data.Column2", "Data.Column3", "Data.Column4", "Data.Column5", "Data.Column6", "Data.Column7", "Data.Column8", "Data.Column9","Data.Column10","Data.Column11","Data.Column12","Data.Column13","Data.Column14", "Data.Column15"}),
    #"Lignes filtrées2" = Table.SelectRows(#"Autres colonnes supprimées", each ([Data.Column14] <> "CLOTURE")),
    #"Type modifié" = Table.TransformColumnTypes(#"Lignes filtrées2",{{"Data.Column6", type date}, {"Data.Column7", type date}, {"Data.Column8", type date}, {"Name", type text}, {"Data.Column2", type text}, {"Data.Column3", Int64.Type}, {"Data.Column4", type text}}),
    #"Colonnes renommées" = Table.RenameColumns(#"Type modifié",{{"Name", "PDCA_identification"}, {"Data.Column2", "Poste_Ligne"}, {"Data.Column3", "Numéro de la demande"}}),
    #"Colonnes permutées" = Table.ReorderColumns(#"Colonnes renommées",{"PDCA_identification", "Numéro de la demande", "Poste_Ligne", "Data.Column4", "Data.Column5", "Data.Column6", "Data.Column7", "Data.Column8", "Data.Column9", "Data.Column14", "Data.Column15"}),
    #"Colonnes renommées1" = Table.RenameColumns(#"Colonnes permutées",{{"Data.Column4", "Anomalie"}, {"Data.Column5", "Contre mesure"}, {"Data.Column6", "Date d'entrée"}, {"Data.Column7", "Date limite"}}),
    #"Colonnes renommées2" = Table.RenameColumns(#"Colonnes renommées1",{{"Data.Column9", "Pilote"}, {"Data.Column14", "Statut"}, {"Data.Column15", "Commentaires"}, {"PDCA_identification", "PDCA"}, {"Numéro de la demande", "Numéro"}, {"Poste_Ligne", "Zone"}, {"Anomalie", "PROBLEME"}, {"Contre mesure", "ACTIONS"}, {"Data.Column10", "P"}, {"Data.Column11", "D"}, {"Data.Column12", "C"}, {"Data.Column13", "A"}, {"Data.Column8", "Date clôture"}}),
    #"Lignes filtrées3" = Table.SelectRows(#"Colonnes renommées2", each ([Pilote] = "Bâtiment"))
in
    #"Lignes filtrées3"
 
- 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

Retour