Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1470 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1911686
alpking
Posté le 04-08-2009 à 16:45:31  profilanswer
 

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
mood
Publicité
Posté le 04-08-2009 à 16:45:31  profilanswer
 

n°1911746
kiki29
Posté le 04-08-2009 à 20:53:45  profilanswer
 

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


Message édité par kiki29 le 04-08-2009 à 21:01:43
n°1911976
alpking
Posté le 05-08-2009 à 14:11:37  profilanswer
 

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
n°1912032
kiki29
Posté le 05-08-2009 à 16:49:20  profilanswer
 

Salut,


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


Message édité par kiki29 le 05-08-2009 à 16:49:34
n°1912051
alpking
Posté le 05-08-2009 à 17:10:59  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 

Sujets relatifs
[Resolu] Deziper un fichier en vbsHeaders et headers_sent (Résolu)
[RESOLU] Acc. 2000 Export XL : contourner la limite de 255 caractèresGros problème de Mappage de lecteurs réseaux [ Résolu]
Création fichier log retraçant le déroulement d'une macroProblème dans une macro devant faire un tri
[résolu] Warning: Call-time pass-by-reference has been deprecated[Résolu] Un bouquin en ASP ?
VB Lancer un .bat tout juste créé [Resolu]Catcher une alerte dans une macro excel
Plus de sujets relatifs à : [Résolu] Macro - Importation .csv en UTF-8


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR