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 :

Changer le séparateur de données de son fichier CSV [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 25
    Points : 14
    Points
    14
    Par défaut Changer le séparateur de données de son fichier CSV
    Bonjour,

    Comme indiqué dans le titre je souhaite changer le séparateur de données de mon fichier CSV.

    Jusqu'à maintenant je faisais l'action manuellement, c'est-à-dire : en allant dans l'onglet Données --> Données externes -> Fichier texte --> je sélectionne mon fichier CSV --> et je coche le séparateur virgule --> terminer.


    De base le fichier CSV est de ce format (aperçu de données) :
    Nom : avant_separateur.png
Affichages : 232
Taille : 12,7 Ko

    Quand je fais la manipulation décrite ci-dessus et que je fais terminer voici ce qu'on obtient (aperçu de données) :

    Nom : apres_separateur.png
Affichages : 225
Taille : 12,7 Ko


    J'ai utilisé l'enregistreur de macro pour voir si je pouvais faire les étapes d'en haut- et je l'ai adapté en rajoutant le chemin du fichier CSV.

    Voici le code obtenu :

    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
    Sub changer_separateur_CSV()
    Dim Chemin As String
     
        Chemin = ActiveWorkbook.FullName
     
     
        With ActiveSheet.QueryTables.Add(Connection:= _
            "TEXT;Chemin" _
            , Destination:=Range("$A$1"))
            .Name = "csv_test_macro"
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .TextFilePromptOnRefresh = False
            .TextFilePlatform = 1252
            .TextFileStartRow = 1
            .TextFileParseType = xlDelimited
            .TextFileTextQualifier = xlTextQualifierDoubleQuote
            .TextFileConsecutiveDelimiter = False
            .TextFileTabDelimiter = True
            .TextFileSemicolonDelimiter = False
            .TextFileCommaDelimiter = True
            .TextFileSpaceDelimiter = False
            .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 _
            , 1, 1)
            .TextFileTrailingMinusNumbers = True
            .Refresh BackgroundQuery:=False
        End With
    End Sub
    Mais ça ne fonctionne pas voici l'erreur affichée :
    Nom : erreur_code.PNG
Affichages : 205
Taille : 9,8 Ko

    Et le code bug a cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Refresh BackgroundQuery:=False
    Si quelqu'un a une solution, je suis preneur.

    Bonne journée à tous !

  2. #2
    Membre expérimenté Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 903
    Points : 1 364
    Points
    1 364
    Par défaut
    Bonjour,

    C'est peut-être con comme idée mais tu as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;Chemin" _
    Ce ne serait pas plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & Chemin _
    ?

    J'ai un doute aussi sur le fait de récupérer le chemin de l'activeworkbook et pas plutôt le chemin complet du fichier csv.

    Cordialement,
    Le sabre est une arme. Le kendo est un art de tuer. Quelles que soient les belles paroles pour l'expliquer, telle est sa vérité.

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Points : 602
    Points
    602
    Par défaut
    Oui c'est çà, vous avez mis la variable "chemin" en champ texte, donc vous allez cherchez le CSV a l'adresse "chemin" au lieu du chemin précisé dans votre variable "chemin".

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 25
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par Gado2600 Voir le message
    Bonjour,

    C'est peut-être con comme idée mais tu as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;Chemin" _
    Ce ne serait pas plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & Chemin _
    ?

    J'ai un doute aussi sur le fait de récupérer le chemin de l'activeworkbook et pas plutôt le chemin complet du fichier csv.

    Cordialement,
    Merci beaucoup pour ta réponse Gado2600, cela fonctionne sauf que cela m'écrit deux fois les données. Mais j'ai bien une donnée par colonne après je sais pas pourquoi cela écrit deux fois l'ensemble des données.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 25
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par ChristianBosch Voir le message
    Oui c'est çà, vous avez mis la variable "chemin" en champ texte, donc vous allez cherchez le CSV a l'adresse "chemin" au lieu du chemin précisé dans votre variable "chemin".
    Oui merci beaucoup j'ai du coup modifié et ça a fonctionné par contre à chaque fois que j'exécute la macro cela ajoute x fois l'ensemble des données du fichier CSV

  6. #6
    Membre expérimenté Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 903
    Points : 1 364
    Points
    1 364
    Par défaut
    Tu as retiré les données avant ?

    Parce qu'il me semble que, de mémoire, il déplace l'existant sur l'onglet ciblé, sur la droite, pour intégrer les nouvelles données.
    Ou alors, fais le sur un onglet vide.

    Cordialement,
    Le sabre est une arme. Le kendo est un art de tuer. Quelles que soient les belles paroles pour l'expliquer, telle est sa vérité.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 25
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par Gado2600 Voir le message
    Tu as retiré les données avant ?

    Parce qu'il me semble que, de mémoire, il déplace l'existant sur l'onglet ciblé, sur la droite, pour intégrer les nouvelles données.
    Ou alors, fais le sur un onglet vide.

    Cordialement,
    Ah oui, j'avais pas remarqué mais même quand je le fais manuellement cela ajouter une deuxième fois les mêmes données. Du coup, je vais appliqué ton conseil et le balancer dans une autre feuille, un grand merci !

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

Discussions similaires

  1. Comment attacher une base de données sans son fichier log
    Par callo dans le forum MS SQL Server
    Réponses: 16
    Dernier message: 05/06/2014, 11h03
  2. [MySQL] Importer les données d'un fichier CSV dans une base de données
    Par joueur dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 12/11/2008, 11h59
  3. Extraire des données dans un fichier .csv
    Par orj30754 dans le forum C
    Réponses: 7
    Dernier message: 03/11/2006, 14h48
  4. Réponses: 2
    Dernier message: 11/10/2006, 22h35
  5. Sauvegarder les données dans un fichier CSV
    Par beb30 dans le forum MFC
    Réponses: 5
    Dernier message: 08/03/2006, 13h06

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