macro Excel import csv

macro Excel import csv - VB/VBA/VBS - Programmation

Marsh Posté le 09-10-2014 à 19:07:36    

Bonjour à tous,
 
 
Je cherche à faire une macro qui suite à l'appui sur un bouton permet de choisir un fichier csv et d'en importer les données dans un onglet "Data".
 
Je précise que je suis un complet novice en VB...
 
J'utilise le code suivant :
 

Code :
  1. Sub Rectangle1_Cliquer()
  2.      Dim fStr As String
  3.     With Application.FileDialog(msoFileDialogFilePicker)
  4.         .Show
  5.         If .SelectedItems.Count = 0 Then
  6.             MsgBox "Cancel Selected"
  7.             Exit Sub
  8.         End If
  9.         'fStr is the file path and name of the file you selected.
  10.         fStr = .SelectedItems(1)
  11.     End With
  12.     With ThisWorkbook.Sheets("Data" ).QueryTables.Add(Connection:= _
  13.     "TEXT;" & fStr, Destination:=Range("$A$1" ))
  14.         .Name = "CAPTURE"
  15.         .FieldNames = True
  16.         .RowNumbers = False
  17.         .FillAdjacentFormulas = False
  18.         .PreserveFormatting = True
  19.         .RefreshOnFileOpen = False
  20.         .RefreshStyle = xlInsertDeleteCells
  21.         .SavePassword = False
  22.         .SaveData = True
  23.         .AdjustColumnWidth = True
  24.         .RefreshPeriod = 0
  25.         .TextFilePromptOnRefresh = False
  26.         .TextFilePlatform = 437
  27.         .TextFileStartRow = 1
  28.         .TextFileParseType = xlDelimited
  29.         .TextFileTextQualifier = xlTextQualifierDoubleQuote
  30.         .TextFileConsecutiveDelimiter = False
  31.         .TextFileTabDelimiter = True
  32.         .TextFileSemicolonDelimiter = False
  33.         .TextFileCommaDelimiter = True
  34.         .TextFileSpaceDelimiter = False
  35.         .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
  36.         .TextFileTrailingMinusNumbers = True
  37.         .Refresh BackgroundQuery:=False
  38.     End With
  39. End Sub


 
 
Cela marche plus ou moins. J'ai principalement 2 problèmes :
   - l'importation ne marche que si le bouton se situe dans l'onglet "Data" où je souhaite coller les informations du CSV. Comment faire pour qu'il n'y ait pas de relation entre l'onglet comportant le bouton et l'onglet où je souhaite coller les infos?
   - le collage des infos du CSV crée de nouvelles colonnes et décale les anciennes. Comment faire pour qu'il les remplace? Je suppose que cela vient du add de QueryTables.Add mais par quoi le remplacer?
 
Merci pour votre aide!


Message édité par gunvill le 09-10-2014 à 20:08:50
Reply

Marsh Posté le 09-10-2014 à 19:07:36   

Reply

Marsh Posté le 09-10-2014 à 19:57:07    

 
           Bonjour, bonjour !
 
           Merci d'utiliser l'icône dédié pour baliser le code, cela fera moins mal aux yeux et c'est plus facile pour indiquer un numéro de ligne !
 
           Activer la feuille avant la QueryTable pour voir …
 
           Revoir la propriété  RefreshStyle   pour les colonnes.
           Sinon sur un nouveau classeur activer le Générateur de macros puis paramétrer la QueryTable
           en prenant soin de bien remplir son assistant : le code est livré sur un plateau !
 

Reply

Marsh Posté le 09-10-2014 à 20:12:30    

Merci pour votre réponse.
 
Désolé pour les balises dédiées au code, je ne les avais pas vu.
 
Je vais essayé de décrypter vos informations, cela semble certainement facile mais je suis débutant donc ça risque de me prendre du temps^^


Message édité par gunvill le 09-10-2014 à 20:42:43
Reply

Marsh Posté le 09-10-2014 à 21:16:12    

ça marche!
 
Voilà le code suite aux indications de Marc L:
 

Code :
  1. Sub Rectangle1_Cliquer()
  2.      Dim fStr As String
  3.     With Application.FileDialog(msoFileDialogFilePicker)
  4.         .Show
  5.         If .SelectedItems.Count = 0 Then
  6.             MsgBox "Cancel Selected"
  7.             Exit Sub
  8.         End If
  9.         'fStr is the file path and name of the file you selected.
  10.         fStr = .SelectedItems(1)
  11.     End With
  12. Worksheets("Data" ).Activate
  13.     With ThisWorkbook.Sheets("Data" ).QueryTables.Add(Connection:= _
  14.     "TEXT;" & fStr, Destination:=Range("$A$1" ))
  15.         .Name = "CAPTURE"
  16.         .FieldNames = True
  17.         .RowNumbers = False
  18.         .FillAdjacentFormulas = False
  19.         .PreserveFormatting = True
  20.         .RefreshOnFileOpen = False
  21.         .RefreshStyle = xlOverwriteCells
  22.         .SavePassword = False
  23.         .SaveData = False
  24.         .AdjustColumnWidth = True
  25.         .RefreshPeriod = 0
  26.         .TextFilePromptOnRefresh = False
  27.         .TextFilePlatform = 437
  28.         .TextFileStartRow = 1
  29.         .TextFileParseType = xlDelimited
  30.         .TextFileTextQualifier = xlTextQualifierDoubleQuote
  31.         .TextFileConsecutiveDelimiter = False
  32.         .TextFileTabDelimiter = True
  33.         .TextFileSemicolonDelimiter = False
  34.         .TextFileCommaDelimiter = True
  35.         .TextFileSpaceDelimiter = False
  36.         .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
  37.         .TextFileTrailingMinusNumbers = True
  38.         .Refresh BackgroundQuery:=False
  39.     End With
  40. End Sub


 
Merci!

Reply

Sujets relatifs:

Leave a Replay

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