Partage
  • Partager sur Facebook
  • Partager sur Twitter

VBA : Ouverture et formatage d'un fichier CSV

Ouverture grâce à l'explorateur de fichiers

Sujet résolu
    21 mai 2019 à 16:29:37

    [Update]

    J'ai finalement réussi à trouver ce que je cherchais j'en étais pas très loin. Je vous mets la correction si jamais vous avez un problème avec les fonctions ActiveSheet.QueryTables () et Application.GetOpenFileName()


    Sub ouvertureFichier()
    
     
    
    ' Ouverture du fichier au format voulu
    
     
    
        Dim pathFichier As String, nomFichier As String
    
       
    
    'On va cherhcer l'adresse du fichier avec GetOpenFilename()
    
        pathFichier = Application.GetOpenFilename()
    
       
    
    'On met le nom du fichier au format voulu
    
        nomFichier = "TEXT;" & pathFichier
    
     
    
    'Connection permet d'ouvrir le fichier
    
    'Name de donner un nom à ce qu'on ouvre
    
    'Les champs suivants permettent de paramétrer le fichier
    
    'Ici ce qui nous intéressent c'est le format par défaut des colonnes
    
    'On le modifie avec la ligne TextFileColumnDataTypes
    
        With ActiveSheet.QueryTables.Add(Connection:= _
    
            nomFichier, Destination _
    
            :=Range("$A$1"))
    
            .Name = "Import"
    
            .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 = True
    
            .TextFileSemicolonDelimiter = True
    
            .TextFileCommaDelimiter = False
    
            .TextFileSpaceDelimiter = False
    
            .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
    
            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2)
    
            .TextFileTrailingMinusNumbers = True
    
            .Refresh BackgroundQuery:=False
    
        End With
    
    End Sub



    Bonjour,

    Je travaille actuellement sur un petit projet et j'aimerais à partir d'une commande pouvoir aller cherche un fichier CSV et l'ouvrir au format que je souhaite.

    J'ai essayé plusieurs méthodes.

    La première avec ActiveSheet.QueryTables et Application.GetOpenFileName(). J'ai essayé d'associer les deux pour que mon programme fonctionne mais il me retourne l'erreur suivante : "Argument ou appel de procédure incorrect" alors que je suis capable d'ouvrir l'explorateur de fichier et de sélectionner ce dont j'ai besoin. Voici le code :

    Sub Macro1()
    
    '
    
    ' Macro1 Macro
    
    '
    
     
    
    '
    
        With ActiveSheet.QueryTables.Add(Connection:= _
    
            "TEXT;" & Application.GetOpenFilename(), Destination _
    
            :=Range("$A$1"))
    
            .CommandType = 0
    
            .Name = "Import"
    
            .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 = True
    
            .TextFileSemicolonDelimiter = True
    
            .TextFileCommaDelimiter = False
    
            .TextFileSpaceDelimiter = False
    
            .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
    
            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2)
    
            .TextFileTrailingMinusNumbers = True
    
            .Refresh BackgroundQuery:=False
    
        End With
    
    End Sub

    Si vous comprenez mon erreur, je veux bien une aide. De plus elle marche très bien si je mets directement le chemin d'accès du fichier.

    Enfin j'ai aussi abordé le problème avec la fonction Worbook.OpenText et GetOpenFileName. Cette fois je peux ouvrir le fichier mais il ne reconnaît pas bien les délimiteurs alors que j'ai bien mentionné qu'il s'agissait du point-virgule. Voici le code

    Sub OuvreFichier1()
    
        Workbooks.OpenText Filename:= _
    
        Application.GetOpenFilename(FilterIndex:=1, Title:="Sélectionner le fichier texte à ouvrir...", MultiSelect:=False), _
    
        DataType:=xlDelimited, _
    
        Semicolon:=True, _
    
        FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), _
    
        Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), _
    
        Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), _
    
        Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1), _
    
        Array(20, 1), Array(21, 1), Array(22, 1), Array(23, 1), Array(24, 1), _
    
        Array(25, 1), Array(26, 1), Array(27, 1), Array(28, 1), Array(29, 1), _
    
        Array(30, 1), Array(31, 1), Array(32, 2))
    
    End Sub


    Je vous remercie pour votre aide !

    -
    Edité par RG514 21 mai 2019 à 17:12:24

    • Partager sur Facebook
    • Partager sur Twitter

    VBA : Ouverture et formatage d'un fichier CSV

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown