[Résolu] Macro - Importation .csv en UTF-8

Macro - Importation .csv en UTF-8 [Résolu] - VB/VBA/VBS - Programmation

Marsh Posté le 04-08-2009 à 16:45:31    

je suis débutant en VBA et j'ai essayé de faire une macro qui ferait les étapes suivantes :
 
1. Ouvrir une fenêtre qui permet à l'utilisateur de choisir le chemin d'un fichier .csv
2. Ouverture d'un nouveau workbook
3. Importation de données externe sous format texte (csv) délimité par une virgule, texte entre doubles guillemets et encodé en UTF-8. Certaines colonnes contiennent du texte, d'autre des dates en format Y-M-D. Il y a donc plusieurs type de données
4. Coller les données importées en A1
5. Mise en gras de la première ligne
6. Autofit de la largeur des colonnes
 
Voici ce que j'ai réussi à faire en enregistrant des macro et en essayant de copier-coller les résultats.
 

Code :
  1. Sub import_ccsv()
  2. '
  3. Dim F As Variant
  4.  
  5. F = Application.GetOpenFilename("csv Files (*.csv), *.csv" )
  6.  
  7. If F = False Then Exit Sub
  8. Workbooks.Add
  9.     With ActiveSheet.QueryTables.Add(Connection:= _
  10.         "TEXT;F", Destination _
  11.         :=Range("$A$1" ))
  12.         .Name = "fichier_client"
  13.         .FieldNames = True
  14.         .RowNumbers = False
  15.         .FillAdjacentFormulas = False
  16.         .PreserveFormatting = True
  17.         .RefreshOnFileOpen = False
  18.         .RefreshStyle = xlInsertDeleteCells
  19.         .SavePassword = False
  20.         .SaveData = True
  21.         .AdjustColumnWidth = True
  22.         .RefreshPeriod = 0
  23.         .TextFilePromptOnRefresh = False
  24.         .TextFilePlatform = 65001
  25.         .TextFileStartRow = 1
  26.         .TextFileParseType = xlDelimited
  27.         .TextFileTextQualifier = xlTextQualifierDoubleQuote
  28.         .TextFileConsecutiveDelimiter = False
  29.         .TextFileTabDelimiter = True
  30.         .TextFileSemicolonDelimiter = False
  31.         .TextFileCommaDelimiter = True
  32.         .TextFileSpaceDelimiter = False
  33.         .TextFileColumnDataTypes = Array(2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, _
  34.         2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 5, 2)
  35.         .TextFileTrailingMinusNumbers = True
  36.         End With
  37.        
  38.     Rows("1:1" ).Select
  39.     Selection.Font.Bold = True
  40.     Columns("A:A" ).Select
  41.     Range(Selection, Selection.End(xlToRight)).Select
  42.     Columns("A:AM" ).EntireColumn.AutoFit
  43. End Sub


Je sais bien qu'il ne s'agit pas là de la meilleure technique mais c'est tout ce que j'ai réussi à faire avec mon tout petit niveau !!
 
Est-ce que quelqu'un voit ou est-ce que ça cloche ?


Message édité par alpking le 05-08-2009 à 17:10:05
Reply

Marsh Posté le 04-08-2009 à 16:45:31   

Reply

Marsh Posté le 04-08-2009 à 20:53:45    

Salut, as-tu vu le post que j'ai fait sur developpez.net ?


Message édité par kiki29 le 04-08-2009 à 21:01:43
Reply

Marsh Posté le 05-08-2009 à 14:11:37    

Oui j'ai vu merci !!
 
si jamais, voici l'adresse :
 
http://www.developpez.net/forums/d [...] v-utf-8-a/
 
Ce qui cloche dans mon code c'est qu'il ouvre une fenêtre afin de sélectionner un fichier et une fois celui-ci sélectionné, il ouvre un nouveau classeur mais rien ne se passe...
 
Je pense que mon erreur principale est dans la récupération du chemin du fichier sélectionné, que je stocke dans la variable "F"
 

Code :
  1. F = Application.GetOpenFilename("csv Files (*.csv), *.csv" )


 
Ensuite j'ai remplacé dans la macro automatiquement enregistrée le chemin d'accès par la variable F, afin de laisser à l'utilisateur le choix du fichier qu'il veut importer.
 

Code :
  1. With ActiveSheet.QueryTables.Add(Connection:= _
  2.         "TEXT;F", Destination _
  3.         :=Range("$A$1" ))


 
 
Je pense donc que mon erreur est la, le code ne comprend pas ce "TEXT;F" comme étant un chemin vers un fichier... Est-ce que je dois mettre des guillemets ou quelque chose du genre ??
 
Merci de votre aide en tout cas !!


Message édité par alpking le 05-08-2009 à 14:12:44
Reply

Marsh Posté le 05-08-2009 à 16:49:20    

Salut,


With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;" & F ", Destination:=Range("A1" ))


Message édité par kiki29 le 05-08-2009 à 16:49:34
Reply

Marsh Posté le 05-08-2009 à 17:10:59    

En fait je viens de trouver la solution pour ceux que ça intéresse :
 
Ca marche très bien avec :
 

Code :
  1. With ActiveSheet.QueryTables.Add(Connection:= _
  2.         "TEXT;" & F, Destination _
  3.         :=Range("$A$1" ))


 
Et j'avais oublié de rajouter la ligne suivante après :
 

Code :
  1. .Refresh BackgroundQuery:=False


 
Merci pour votre aide

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed