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

VBA Discussion :

Traitement d'un fichier CSV


Sujet :

VBA

  1. #1
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    avril 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : avril 2021
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Traitement d'un fichier CSV
    Hello,

    Est-il possible d'ajouter des encadrements de données sur un fichier CSV enregistré en UTF8 avec séparateur ; en encadrant les données de " " exemple "xxx";"Abc123";
    -> J'ai un fichier initialement uniquement avec xxx;Abc123
    -> ou macro excel moulinette pour que chaque case fournie on y ajoute les "" en question avant transformation en CSV UTF8?

    Toute aide de la communauté serait TELLEMENT BIENVENUE !
    Merci par avance

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    novembre 2003
    Messages
    17 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 17 434
    Points : 50 403
    Points
    50 403
    Billets dans le blog
    92
    Par défaut
    Salut.

    Bienvenue sur nos forums

    Si tes données sont aussi "simples" que cela, tu peux t'inspirer de ce qui suit, en adaptant le séparateur:

    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
    Sub Test()
      Dim Cha1 As Long, Cha2 As Long
      Dim Source As String, Target As String
      Dim s As String
      Dim t
     
      Source = "c:\data\temp\test-csv\test.csv"
      Target = "c:\data\temp\test-csv\test" & Format(Now(), "yyyymmddhhnnss") & ".csv"
     
      Cha1 = FreeFile
      Open Source For Input As Cha1
      Cha2 = FreeFile
      Open Target For Output As Cha2
     
      Do While Not EOF(Cha1)
        Line Input #Cha1, s
        t = Split(s, ";")
        s = """" & Join(t, """;""") & """"
        Print #Cha2, s
      Loop
     
      Close #1
      Close #2
      Kill Source
      Name Target As Source
     
    End Sub

    Note toutefois que tes données ne peuvent dès lors pas contenir de guillemets et donc a fortiori pas non plus de séparateur à l'intérieur d'une chaine. Tes données doivent ressembler à ceci: abc;def;ab 145;hd dhfe her he;jke mais pas à abc;"def ""hijklm""; jhg";xyz auquel cas il faudra les traiter selon la "norme" CSV et pas comme des simples données textuelles.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    avril 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : avril 2021
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Hello, merci pour le décalage de topic et de ta réponse !

    Alors c'est simple mais pas tant que ca ... je vais devoir m'assurer qu'il n'y ait pas d'autres " (facilement supprimable à la mano) et je pense que je vais devoir gérer des données avec effectivement des espaces du types "abc 12 ab ..." donc avec des espaces, c'est un bon point

  4. #4
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    novembre 2003
    Messages
    17 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 17 434
    Points : 50 403
    Points
    50 403
    Billets dans le blog
    92
    Par défaut
    La grammaire CSV demande que lorsqu'une donnée textuelle contient un ", un séparateur ou un caractère de retour à la ligne, elle soit encadrée par des guillemets, ce qui signifierait qu'il ne faut pas en ajouter. De plus, à l'intérieur d'une chaîne de caractères, le " doit être doublé pour ne pas le confondre avec le caractère de fin de donnée textuelle.

    Le code que je t'ai fourni est donc minimaliste car il ne tient pas compte de ces règles, mais se base uniquement sur tes exemples de données. Si on veut vraiment suivre la règle, et pour autant que ton CSV soit bien formé au départ, il faut analyser chaque donnée pour déterminer si elle contient un caractère de contrôle (guillemet, séparateur, retour à la ligne, et gérer les cas pour encadrer correctement toutes les valeurs qui, vu ta demande, sont toutes considérées comme textuelles.

    Un vrai traitement CSV tant à la lecture qu'à l'écriture risque d'être plus long en process. Du coup, il me semble qu'il serait alors intéressant d'ouvrir le CSV avec Excel pour recomposer le nouveau.

    Question: Y-a-t-il un schema.ini lié à ton fichier?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    avril 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : avril 2021
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    hello, non pas de schéma.ini et j'attends des extractions Excel. Après je pars d'un fichier excel avant de passer en format csv utf-8 est-ce que cela simplifie l'approche ?
    j'allais sous excel, "m'amuser" à créer des colonnes intermédiaires et à faire un concat final mais il y a surement plus intelligent ... ?

Discussions similaires

  1. Traitement d'un fichier CSV
    Par moiamatoallah dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 15/03/2013, 13h42
  2. [XL-2007] Traitement d'un fichier CSV
    Par ARTETA13 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 01/03/2012, 13h02
  3. Problème de traitement d'un fichier CSV
    Par cork1e dans le forum Langage
    Réponses: 5
    Dernier message: 20/10/2009, 15h53
  4. Réponses: 5
    Dernier message: 13/02/2008, 10h22
  5. [MySQL] Traitement de gros fichier CSV
    Par oceanbigone dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 03/07/2007, 11h40

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