Question Importation de fichiers CSV dans Excel à l'aide d'une macro


Je veux développer une macro où, dans ma feuille de calcul Excel, je tape une date dans une cellule spécifique et la macro ira dans un dossier contenant des fichiers texte. Une base de données que vous pourriez dire. Je veux qu'il trouve le nom de fichier correspondant qui est écrit comme une date, placez les données dans un délimiteur et collez-le directement dans les cellules ci-dessous, là où j'ai initialement mis la date.

Le dossier sera toujours au même endroit et les fichiers texte seront tous mis en forme DD_MM_YYYY. Et les cellules ci-dessous seront toujours vides

Quelques photos pour rendre ce que je demande plus facile à comprendre.

Result Data Input Step 1 Data Input Step 2 Data Input Step 3


4
2018-01-08 08:45


origine


Le dossier sera toujours au même endroit? Les fichiers texte auront-ils toujours la même mise en forme? Quelle quantité de données chaque fichier contiendra-t-il? Que se passe-t-il si les cellules situées sous votre entrée de date contiennent déjà des données? Fondamentalement, ce que vous demandez n'est pas très simple. : \ - Nick Spreitzer
Le dossier sera toujours au même endroit et les fichiers texte seront tous mis en forme DD_MM_YYYY. Et les cellules ci-dessous seront toujours vides. Je vais faire un montage pour inclure une image, un exemple des résultats que je veux. Je suis désolé c'est un peu compliqué :( (bien que simple en concept imo mais difficile à faire) - B-Ballerl


Réponses:


C'est plus simple que vous ne le pensez, car vous pouvez appeler l'Assistant Importation de texte (ou plutôt, vous pouvez utiliser ses fonctionnalités) depuis une macro, il n'est pas nécessaire d'écrire un analyseur CSV ou quelque chose de ce genre.

En fait, tout ce que j'ai fait avec la macro ci-dessous est d'utiliser la fonction d'enregistrement intégrée, puis de la modifier un peu pour répondre à vos besoins.

Utiliser la macro:

  1. Sauvegardez votre fichier Excel actuel en cas de problème.

  2. Changer la définition de folder dans la macro pour être le chemin contenant tous vos fichiers de données - assurez-vous d'inclure une barre oblique.

  3. Sélectionnez la cellule d'en-tête des colonnes, qui doit contient le nom d'un de vos fichiers - y compris l'extension de fichier. Vous pouvez modifier ce champ après le chargement des données si vous souhaitez supprimer l'extension.

  4. Exécutez la macro.

actes

Il prendra le nom de fichier de la cellule en cours, regardez dans le fichier spécifié folder et ouvrez le fichier spécifié dans la cellule. Ensuite, il l'importera en CSV, exactement une cellule au dessous de la cellule sélectionnée (au démarrage de la macro).

En tant que tel, il écrasera probablement les cellules situées sous la cellule sélectionnée lors de l'exécution de la macro. La prudence est recommandée.

Si le fichier n'est pas trouvé ou si une autre erreur se produit, cela échouera avec une zone d'erreur VBA normale, sans messages d'erreur amis.

Code macro

Certains peuvent probablement être coupés - comme je l’ai dit, je l’obtiens d’un enregistrement plutôt que d’apprendre à utiliser QueryTables moi-même - mais cela ne fera pas mal comme il est, et semble fonctionner de manière fiable.

Sub LoadFromFile()
    Dim fileName As String, folder As String

    folder = "C:\Path\To\Your\Files\"
    fileName = ActiveCell.Value

    ActiveCell.Offset(1, 0).Range("A1").Select

    With ActiveSheet.QueryTables _
        .Add(Connection:="TEXT;" & folder & fileName, Destination:=ActiveCell)
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 850
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub

5
2018-01-11 09:21



Haha incroyable! Ça marche ça marche !! Merci beaucoup homme :) !! - B-Ballerl
J'ai compris que si vous ajoutez à la 5ème ligne (FileName = ActiveCell.Value) + ".txt", vous ne devez plus le saisir dans la cellule d'origine. Et ça a marché! NomFichier = ActiveCell.Value + ".txt" - B-Ballerl