Copie feuille CSV vers fichier de travail xlsm

Bonjour à tous,

Je butte sur un morceau de procédure, qui doit être tout simple et pour autant je ne parviens a rien.

Je construis un fichier xlsm, sur lequel par le biais d'un import, je vais y ajouter des données provenant d'un fichier csv.

Pour ce faire dans ma procédure, je cherche le fichier a importer, je le sectionne et demande le lancement de l'import.

La ma procédure doit ouvrir le csv, prendre ce qu'il y a sur la feuille (il y a que 1 feuille), copier, et l'ajouter sur mon fichier xlsm dans la feuille Import Epsilon².

- 1ere difficulté, lorsque le fichier csv est en cours d'ouverture, la procédure continue de s’exécuter, donc m’envoie une erreur car forcement il peut pas prendre quelque chose qui n'est pas ouvert.

- 2eme difficulté, pour contournée ce problème, je me suis dit, je vais créer une boucle qui test l'ouverture ou non du fichier, tans qu'il n'est pas ouvert goto XXXX, et s'il est ouvert, bas la fait ton job. Mais pareil, je ne parviens pas a le détecter ouvert.

Quel serait la solution en passant directement sur la difficulté 1 ou en magouillant dans le sens de la difficulté 2 ?

Cordialement,

PS : je vous joint les deux fichiers

6logistique.xlsm (138.98 Ko)

Bonjour

Tu peux importer par PowerQuery puis supprimer la requête pour délier le résultat du fichier source puis enregistrer sous pour garder le modèle avec requête

Que le CSV soit ouvert ou fermé ne joue pas

14logistique-pq.zip (406.25 Ko)

Pour un nouveau fichier Actualiser par ThisWorkbook.RefreshAll (Données, Actualiser tout)

Bonjour,

Merci pour ton indication, je ne connais pas du tous le PowerQuerty, je vais regarder ça un peu ce weekend.

Ça fonctionne en VBA ? En faisant de la façon dont j'ai débuté (recherche et selection du fichier à importer) ?

Cordialement,

RE

Non PowerQuery ce n'est pas du VBA mais on peut par VBA Actualiser ou passer des paramètres. Cela utilise le langage M mais on utilise majoritairement les menus, on ne code pas ou peu.

C'est l'outil qui par défaut ouvre les csv : Données, A partir d'un txt/csv

On peut ensuite paramétrer la requête pour qu'elle traite un fichier variable (ce que j'ai fait)

Pas grand intérêt d'utiliser VBA sauf pour rompre le lien (ce qu'on faisait déjà avant l'existence de PowerQuery (dispo depuis 12 ans) en utilisant la même commande, qui invoquait l'assistant d'importation qui a cédé la place à PowerQuery et qui liait aussi le fichier csv au classeur...

Bonjour,

Je viens faire un petit retour :

Je fais des tests avec les PowerQuery, j'ai trouvé un bout de code sur le net, ça semble fonctionner, c'est rapide, un bel outil qui me plait bien. Le seul truck c'est que sur un tableau csv d'environ 3000 lignes (et ce n'est pas le plus gros), il m'importe qu'environ 1200 lignes...normale ? C'est l'outil qui est comme ça ou moi qui l'utilise mal ?

Cordialement,

8logistique-v2.zip (624.65 Ko)

Bonjour

Aucune trace de PowerQuery dans ton classeur

PowerQuery peut importer plus d'1 million de lignes...

Ah alors je me demande si les macro en powerquerty se transfert bien quand on partage le classeur ici, quand j'ai récupéré le classeur envoyé dans ton retour, je n'avais pas non plus de trace d’utilisation, pour cela que j'ai cherché sur internet.

9logistique-v2.zip (598.54 Ko)

Et le code :

Sub ImportCSVFile()
    Dim xFileName As Variant
    Dim Rg As Range
    Dim xAddress As String
    xFileName = Application.GetOpenFilename("CSV File (*.csv), *.csv", , , , False)
    If xFileName = False Then Exit Sub
    On Error Resume Next
    Set Rg = Sheets("Import Epsilon²").Range("A1")
    On Error GoTo 0
    If Rg Is Nothing Then Exit Sub
    xAddress = Rg.Address
    With ActiveSheet.QueryTables.Add("text;" & xFileName, Range(xAddress))
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .RefreshPeriod = 0

'        .TextFilePromptOnRefresh = False
'        .TextFilePlatform = 936
'        .TextFileStartRow = 1
'        .TextFileParseType = xlDelimited
'        .TextFileTextQualifier = xlTextQualifierDoubleQuote
'        .TextFileConsecutiveDelimiter = False
'        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = True
'        .TextFileCommaDelimiter = True
'        .TextFileSpaceDelimiter = False
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
    End Sub

Bonjour

Le mot Query peut désigner divers types de requêtes et ici ce n'est pas celles de PowerQuery mais les vieilles méthodes...

Sans le fichier de 3000 lignes difficile de démontrer la supériorité de PowerQuery...

Ah alors je me demande si les macro en powerquerty se transfert bien quand on partage le classeur ici, quand j'ai récupéré le classeur envoyé dans ton retour, je n'avais pas non plus de trace d’utilisation

J'ai déjà précisé que PowerQuery n'est pas du VBA : il faut ouvrir PowerQuery pour voir les requêtes, pas VBE,

Données, Obtenir des Données, lancer PowerQuery

Rechercher des sujets similaires à "copie feuille csv fichier travail xlsm"