XL 2016 Importer des valeurs de fichiers CSV sans les ouvrir

David73

XLDnaute Nouveau
Bonjour,

A l'aide d'une macro dans un fichier Excel, j'aimerais importer certaines valeurs contenues dans une centaines (voir plus) de fichiers CSV.

Comme il y a beaucoup de CSV, je préfèrerais ne pas les ouvrir mais récupérer directement les valeurs ...

Je sais que des discussions traitent de ce sujet mais elle me semblent obsolètes et ne fonctionnent pas chez moi.

Merci beaucoup pour votre aide...
 

Cousinhub

XLDnaute Barbatruc
Bonsoir,
Je pense qu'une solution par le biais de Power Query pourrait convenir...
C'est en natif dans la version que tu utilises (2016).
Et le traitement peut également être effectué dans PQ.
Poste 1 ou 2 fichiers "exemples", et ce que tu veux récupérer dans chaque fichier (identifiant?)
Si les fichiers sont dans le même répertoire (ou du moins, même dossier "maître"), il ne devrait pas y avoir trop de problèmes pour les récupérer..
Bonne soirée
 

David73

XLDnaute Nouveau
Merci bhbh.

En effet, tous les fichiers .CSV sont dans le même répertoire.
Les fichiers .CSV sont très simples...
J'aimerais boucler sur les fichiers pour récupérer quelques valeurs sur la 3ème ligne....
Si tu as un exemple , ce serait cool...
 

Cousinhub

XLDnaute Barbatruc
Re-,
Ben non, c'est pas à nous de te donner un exemple qui ne fonctionnera "certainement" pas dans ton cas...
Il y a plein d'exemples dans le forum, cependant, tu auras sans doute du mal à les adapter à ton cas...
Donc, comme demandé, fournis-nous 1 ou 2 fichiers anonymisés, et on pourra t'expliquer comment tout récupérer en un passage...
 

Staple1600

XLDnaute Barbatruc
Pourtant, c'est vraiment intuitif ;)
(tout se pilote à la souris)

Donc Données/Obtenir des données/A partir d'un Fichier/A partir d'un dossier

NB: J'ai utilisé ce fichier CSV exemple (que j'ai copié/collé 10 dans un dossier nommé TestCSV

Voilà la "transcription" des étapes effectuées par PQ
Code:
let
    Source = Folder.Files("C:\Users\STAPLE\Documents\TestCSV"),
    #"Fichiers masqués filtrés1" = Table.SelectRows(Source, each [Attributes]?[Hidden]? <> true),
    #"Appeler une fonction personnalisée1" = Table.AddColumn(#"Fichiers masqués filtrés1", "Transformer le fichier", each #"Transformer le fichier"([Content])),
    #"Colonnes renommées1" = Table.RenameColumns(#"Appeler une fonction personnalisée1", {"Name", "Source.Name"}),
    #"Autres colonnes supprimées1" = Table.SelectColumns(#"Colonnes renommées1", {"Source.Name", "Transformer le fichier"}),
    #"Colonne de tables développée1" = Table.ExpandTableColumn(#"Autres colonnes supprimées1", "Transformer le fichier", Table.ColumnNames(#"Transformer le fichier"(#"Exemple de fichier"))),
    #"Type modifié" = Table.TransformColumnTypes(#"Colonne de tables développée1",{{"Source.Name", type text}, {"Column1", Int64.Type}, {"Column2", type text}, {"Column3", type text}, {"Column4", Int64.Type}, {"Column5", type text}, {"Column6", type text}, {"Column7", type text}, {"Column8", type text}, {"Column9", type text}, {"Column10", type text}})
in
    #"Type modifié"
Et j'obtiens ceci dans Excel
exemplePQ.png
 

Staple1600

XLDnaute Barbatruc
L'enregistreur de macros est souvent le 1er conseiller ;)
NB: Avant exécution; changer le chemin vers le CSV
Code:
Sub Macro1_B()
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;C:\Users\STAPLE\Documents\TestCSV\Exemple_CSV (1).csv", _
        Destination:=Range("$A$1"))
        .Name = "Exemple_CSV (1)"
        .FieldNames = True
        .PreserveFormatting = True
        .RefreshStyle = xlInsertDeleteCells
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePlatform = 1252
        .TextFileStartRow = 3 ' pour commencer à la 3ième ligne
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileSemicolonDelimiter = True
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileDecimalSeparator = "."
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub
Test OK sur mon PC
 

Staple1600

XLDnaute Barbatruc
Re

Pour commodité d'usage (pour changer plus facilement le path)
Enrichi (BBcode):
Sub Macro1_C()
Dim RepFic_CSV As String
RepFic_CSV = "TEXT;C:\Users\STAPLE\Documents\TestCSV\Exemple_CSV (1).csv" ' à adapter
    With ActiveSheet.QueryTables.Add(Connection:=RepFic_CSV, Destination:=Range("$A$1"))
        .Name = "Exemple_CSV (1)"
        .FieldNames = True
        .PreserveFormatting = True
        .RefreshStyle = xlInsertDeleteCells
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePlatform = 1252
        .TextFileStartRow = 3 ' pour commencer à la 3ième ligne
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileSemicolonDelimiter = True
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileDecimalSeparator = "."
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub
[conseil en passant]
Je te conseille quand même de tenter l'aventure PowerQuerypour l'import des CSV
C'est plus simple et plus rapide
(voir mon exemple du message#10 ;)
 

David73

XLDnaute Nouveau
Oui, voilà, il faut passer par la macro.....
Re

Pour commodité d'usage (pour changer plus facilement le path)
Enrichi (BBcode):
Sub Macro1_C()
Dim RepFic_CSV As String
RepFic_CSV = "TEXT;C:\Users\STAPLE\Documents\TestCSV\Exemple_CSV (1).csv" ' à adapter
    With ActiveSheet.QueryTables.Add(Connection:=RepFic_CSV, Destination:=Range("$A$1"))
         .Name = "Exemple_CSV (1)"
        .Name = "Exemple_CSV (1)"
        .FieldNames = True
        .PreserveFormatting = True
        .RefreshStyle = xlInsertDeleteCells
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePlatform = 1252
        .TextFileStartRow = 3 ' pour commencer à la 3ième ligne
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileSemicolonDelimiter = True
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileDecimalSeparator = "."
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub
Oui, voilà, il faut passer par la macro.....
En tout cas, merci beaucoup pour ton aide.
 

Discussions similaires

Statistiques des forums

Discussions
312 211
Messages
2 086 284
Membres
103 170
dernier inscrit
HASSEN@45