Microsoft 365 Import CSV

gabo29

XLDnaute Junior
Bonjour le Forum,

Je travail sous windows en Angalis (Etats Unis), mon pack office est intégralement en Anglais et je suis bloqué sur une macro d'import de fichier en CSV. (séparateur ";")

Dans le code ci-dessous que j'utilise, les données viennent toutes se coller en Colonne A et alors que j'aimerais que chaque donnée aille dans une colonne :

Dim Path_TechFiles As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False

Call Initialisation_Variables

Path_TechFiles = Path_Fichier_formule(1)
Call ChDirNet(Path_TechFiles)

Tech_File = Application.GetOpenFilename("Files Csv,*.csv")


If Not Tech_File = False Then
Current_Workbook = ThisWorkbook.Name
Workbooks.OpenText Filename:=Tech_File, DataType:=xlDelimited, Semicolon:=True, Local:=True
Tech_File_name = GetFilenameFromPath(Tech_File)
Tech_File = ActiveWorkbook.FullName
Cells.Copy
Windows(Current_Workbook).Activate
Feuil1.Activate
Feuil1.Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Workbooks(Tech_File_name).Close
End If
Feuil2.Select
Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub


Pouvez vous m'aider svp ?
Merci
Cdt,
Gabo29
 

cp4

XLDnaute Barbatruc
Salut:), Gabo29, Chris, Le Forum,

Un truc que j'utilise pour importer un csv, à adapter à tes besoins.
VB:
Option Explicit

Dim Fichier As Variant, oFSO As Object, Chemin As String, NomFichier As String ', NewNomFichier As String

Sub Importer_FichierCSV()
   Dim i As Long
   'choix du fichier à traiter
   Fichier = Application.GetOpenFilename("Tous les fichiers (*.csv),*.csv")
   If Fichier = False Then Exit Sub
   '---------------------------------------------------------------------
   'Avec la méthode "GetBaseName" on extrait le nom du fichier sans son extension (ex: .csv)
   Set oFSO = CreateObject("Scripting.FileSystemObject")
   NomFichier = oFSO.getbasename(Fichier)
   '---------------------------------------------------------------------
   'On récupère seulement le chemin du fichier, pour enregistrer le fichier_traité dans le même répertoire
   i = InStr(1, StrReverse(Fichier), "\", vbTextCompare)
   If i <> 0 Then
      Chemin = Left(Fichier, Len(Fichier) - i)  ' rajouter & "\" ou non suivant besoin
   End If
   Chemin = Chemin & "\"   'on rajoute le "\"
   '---------------------------------------------------------------------
   'on vide la feuille dans le cas où on traite d'autres fichiers
   Feuil1.Cells.Clear
   '---------------------------------------------------------------------
   'Importation des données
   With ActiveSheet.QueryTables.Add("TEXT;" & Fichier, [A1])
        .TextFileOtherDelimiter = ";" 'défini le délimiteur
        .TextFilePlatform = 65001 'unicode(UFT-8)
        .Refresh 'exécute la requête
        .Delete 'supprime la connexion
    End With
End Sub
En utilisant l'enregistreur de macro, tu pourras connaitre les différents codes de TextFilePlatform. Dans mon code 65001 est pour l'unicode(UFT-8)

Bonne continuation, en espérant que ça pourra te servir.
 

gabo29

XLDnaute Junior
Bonjour cp4, le forum,
Merci bcp, j'ai adapté le code et cela fonctionne désormais.
J'ai une dernière question, dans mon fichier CSV que j'importe, j'ai du texte et des nombres. Comment faire pour remettre le format nombre de certaines colonnes ?
 

cp4

XLDnaute Barbatruc
Bonjour Gabo29,

à adapter à tes colonnes avec et sans séparateur de milliers
VB:
With ActiveSheet
        .Columns("F:F").NumberFormat = "0.00"       'Décimal sans séparateur de milliers
        .Columns("G:G").NumberFormat = "#,##0.00"   'Décimal avec séparateur de milliers
End With
Bonne continuation.
 

Discussions similaires

Statistiques des forums

Discussions
312 069
Messages
2 085 041
Membres
102 764
dernier inscrit
nestu