IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Macro - Importation .csv en UTF-8


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 55
    Points : 29
    Points
    29
    Par défaut Macro - Importation .csv en UTF-8
    Bonjour,

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

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Points : 723
    Points
    723
    Par défaut
    Salut,

    Qu'est-ce qui cloche ?

    Normalement, ce qui est fait à l'enregistreur de macros de A à Z devrait marcher. Cela "traduit' seulement en code ce que tu as fait. Il n'y a vraiment aucune raison que cela ne marche pas.

    Refais-le à l'enregistreur de macros et donne-nous ce code-là aussi pour comparer.

    A+
    DeaD

  3. #3
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, si cela peut t'aider, à adapter sans doute à ton contexte

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    @ kiki29

    Merci pour ton fichier...

    J'ai regardé ta macro et je t'avoue je n'ai pas tout compris...

    En la testant, j'ai eu une erreur 1004 et le debug ma pointé sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ShDatas.Cells(iRow, iCol) = Ar(i)
    @ Dead78

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With ActiveSheet.QueryTables.Add(Connection:= _
            "TEXT;F", Destination _
            :=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 !!

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Salut, j'ai essayé ce que tu proposes mais j'ai d'abord eu une erreur. Je suppose que c'est parce qu'il y avait un guillemet de trop.

    Ensuite, avec le code ci-dessous ça ne marche toujours pas. Mon nouveau classeur s'ouvre mais rien ne s'importe !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With ActiveSheet.QueryTables.Add(Connection:= _
            "TEXT; & F ", Destination _
            :=Range("$A$1"))

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    En fait je viens de trouver la solution pour ceux que ça intéresse :

    Ca marche très bien avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With ActiveSheet.QueryTables.Add(Connection:= _
            "TEXT;" & F, Destination _
            :=Range("$A$1"))
    Et j'avais oublié de rajouter la ligne suivante après :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Refresh BackgroundQuery:=False
    Merci pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Macro Access import CSV et move files
    Par jicayom dans le forum VBA Access
    Réponses: 3
    Dernier message: 28/01/2015, 17h11
  2. [XL-2007] Macro importation .csv
    Par Fred-D dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/06/2012, 23h25
  3. [Macro]Problème d'importation .CSV avec macro
    Par Eric Harvey dans le forum VBA Access
    Réponses: 8
    Dernier message: 12/04/2007, 17h04
  4. import csv décimale
    Par gIch dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 13/12/2005, 12h46
  5. Importation CSV vers base de données
    Par Brice Yao dans le forum Bases de données
    Réponses: 1
    Dernier message: 29/06/2005, 13h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo