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 :

Conversion csv en Excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 37
    Par défaut Conversion csv en Excel
    Bonjour,

    Je poste mon message ici en espérant que ce soit le bon endroit mais je n'en suis pas sur.
    Je souhaite ouvrir un fichier csv avec Excel puis utiliser la fonction de conversion pour avoir des données dans des colonnes différentes de ma feuille de calcul.
    Le but final est de faire cela sous forme de macro mais pour l'instant, j'en suis loin.

    Plus en détails, voilà mon souci :
    pour l'une de mes données de mon fichier, j'ai des commentaires de site internet dans lesquels j'ai des sauts de lignes.
    La fonction de conversion de Excel ne prends pas en compte le saut de ligne comme je voudrais. Je n'arrive pas à les remplacer/supprimer pour qu'ils ne soient plus pris en compte dans la conversion.
    Pour Excel, dans la conversion, un saut de ligne est une nouvelle ligne.

    Si j'utilise openoffice calc, ma conversion se fait bien.

    Comment puis-je faire ?

    Merci par avance de vos idées,

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par scoubida42 Voir le message
    Si j'utilise openoffice calc, ma conversion se fait bien.
    Comment puis-je faire ?
    Bin... une logique pragmatique inciterait à te conseiller d'utiliser Calc qui dispose d'un Basic équivalent à VBA.
    Qu'est-ce qui t'en empêche ?

  3. #3
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour !

    Citation Envoyé par scoubida42 Voir le message
    Je n'arrive pas à les remplacer/supprimer pour qu'ils ne soient plus pris en compte dans la conversion.
    Là c'est pourtant évident, il suffit déjà de vérifier le code ASCII du caractère à remplacer, aucune ambiguïté possible !

    Sinon logiquement demander au fournisseur du fichier source de modifier son exportation …

    ___________________________________________________________________________________________________________
    Je suis Paris, Barcelone, London, Manchester, Egypte, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 37
    Par défaut
    Pour l'utilisation de openoffice calc, cela pourrait être une bonne idée si ce n'est qu'en fait, j'ai fini toute la partie traitement de mon fichier csv pour changer le format de certaines données via des macros et qu'elle est déjà fonctionelle.

    Pour le code ASCII, je vais regarder tout de suite.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 37
    Par défaut
    En fait, je ne peux pas chercher le code ASCII sinon toutes mes données vont se retrouver sur une seule et même ligne.

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut


    C'était en réponse à ton assertion « je n'arrive pas à remplacer » …

    Si tu n'arrives pas à remplacer alors tu te trompes juste de caractère à remplacer !

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 37
    Par défaut
    En fait, à la fin de chaque ligne, que ce soit une ligne de commentaire ou une ligne complète de mon fichier csv, si j'affiche les symboles, j'ai les caractères LF et RC.
    Je n'ai pas moyen de les différencier.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    tu as des caractère j'ai pensé qu'il s'agissait d'UTF8 mais ils sont encore présent!

    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
    Const DATAOBJECT_BINDING As String = "new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}"
    Public Property Let PressePapier(Value)
        With CreateObject(DATAOBJECT_BINDING)
            .SetText Value
            .PutInClipboard
        End With
    End Property
     
     
    Public Property Get PressePapier()
        With CreateObject(DATAOBJECT_BINDING)
            .GetFromClipboard
            PressePapier = .GetText
        End With
    End Property
     
     
    Sub test()
    Server = "C:\MyRepertoire"
    With CreateObject("AdoDb.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Server & ";Extended Properties=""Text;HDR=YES;Charset=UTF8;"""
        PressePapier = Replace(Replace(Replace(.Execute("Select * from exportoriginal#txt").GetString(, , vbTab, "©"), Chr(13), ""), Chr(10), "¤"), "©", vbCrLf)
        ThisWorkbook.Sheets(1).Range("A1").PasteSpecial xlPasteAll
        ThisWorkbook.Sheets(1).Cells.Replace What:="¤", Replacement:=vbCrLf, LookAt:=xlPart, _
                SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                ReplaceFormat:=False
        .Close
    End With
    End Sub

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonsoir Marc,
    Demain on regardera la rubrique nécrologique!

  10. #10
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    La methode Workbooks.Open est la seule, dans Excel, qui interprete correctement les caracteres de fin de ligne qui sont entre parentheses.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    chemin = "C:\Users\Admin\Downloads\"
    classeur = "exportoriginal - CopieTXT.csv"
    nom = chemin & classeur
    Set wb = Workbooks.Open(Filename:=nom, local:=False)
    Local:=False si le fichier est au format americain ( separateur de lliste = virgule )
    sinon Local:=True

  11. #11
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Salut Doc !

    Tu a raison mais alors subsiste les caractères non convertis comme la source est codée en utf-8 !

    Avec le paramètre Origin cela ne passe pas (erreur 400) sur ma vieille version de tests, à voir de ton côté …
    D'où mon p'tit code via Stream pour cette conversion.

    Avec OpenText et ses divers paramètres dont Origin, TextQualifier et Local à False
    les caractères sont bien convertis mais le format d'origine n'est pas respecté, là aussi à voir de ton côté …

  12. #12
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Salut Marc.
    Tu as raison.
    Avec ce fichier, ta methode semble preferable a Workbooks.Open, car ce fichier contient un separateur de liste americain ( la virgule ) et un format de dates non americain ( jj/mm/aaaa ). D'ou inversion possible jour/mois sur les dates.
    Il serait interessant de connaitre les parametres regionaux de l'ordinateur qui a produit ce fichier pour essayer de le lire avec Workbooks.Open en utilisant les memes parametres regionaux.

  13. #13
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Non seulement le séparateur est une virgule mais il y a aussi des virgules dans les textes,
    double peine avec la séquence VbCrLf
    A cause des dates j'ai préféré passer par TextToColumns

    Mais tu as bien fait d'intervenir pour Workbooks.Open car beaucoup ne pensent pas à consulter l'aide VBA !

    Mon code colle bien à ce cas mais ne fonctionnera pas avec tous les types de fichiers mal conçus.
    Car ici ce qui a évité l'usine à gaz - sinon je n'aurais rien posté sans nouvelle du demandeur -
    c'est la présence des guillemets encadrant les données car sans, cette voie n'était pas possible …

  14. #14
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Trop occupé pour essayer, mais je tenterais personnellement ceci :
    - remplacement de chr(34) & vbcrlf par chr(1)
    - remplacement de vbcrlf par chr(10)
    - remplacement de chr(1) par chr(34) & vbcrlf

  15. #15
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour.

    Pour que les donnees (dates ou numeriques) soient correctement interpretees par Workbooks.Open, il est preferable de toujours utiliser Local:=True dans les parametres. Le probleme alors est que le separateur de donnees du fichier CSV doit etre le separateur local. Si le separateur n'est pas le separateur local, Excel nous permet d'ajouter en tete du fichier la ligne suivante qui indique explicitement le separateur qui est utilise par ce fichier.

    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
    Sub AjouterSeparateurEnTeteDuFichier()
    Separateur = ","
    chemin = "C:\Users\Admin\Downloads\"
    FichierCSV = "exportoriginal - CopieTXT.csv"
    nom = chemin & FichierCSV
     
    Dim objStream, strData
    Set objStream = CreateObject("ADODB.Stream")
    objStream.Charset = "utf-8"
    objStream.Open
    objStream.LoadFromFile (nom)
    strData = objStream.ReadText()
    objStream.Close
    Set objStream = Nothing
     
    FichierCSV = "Tmp_ADO.csv"
    nom = chemin & FichierCSV
    FileNumber = FreeFile
    Open nom For Output As FileNumber
    If UCase(Mid(strData, 1, 4)) = "SEP=" Then
     B = InStr(strData, vbCrLf)
     strData = Mid(strData, B + 2)
    End If
    Print #FileNumber, "sep="; Separateur; vbCrLf;
    Print #FileNumber, strData;
    Close
    Set wb = Workbooks.Open(Filename:=nom, local:=True)
     
    End Sub

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/07/2016, 12h14
  2. [XL-2010] Conversion d'un fichier csv dans excel 2010
    Par Yvette dans le forum Excel
    Réponses: 5
    Dernier message: 10/02/2014, 15h36
  3. Conversion csv en excel
    Par Tiviia dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/08/2013, 16h47
  4. Conversion .csv en .xls
    Par Isa31 dans le forum Langage
    Réponses: 4
    Dernier message: 24/05/2005, 13h04
  5. conversion de fichier Excel en csv ,
    Par bounette dans le forum Excel
    Réponses: 2
    Dernier message: 26/01/2005, 08h42

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