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

  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
    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




    En VBA remplacer la séquence VbCrLf par exemple (cf aide VBA interne) par le caractère désiré, aucun souci …

  9. #9
    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, le pattern de séparation est la virgule et le guillemet. Mais il arrive que parfois entre 2 guillemets, j'ai des sauts de ligne et c'est cela que j'ai l'impression que Excel ne sait pas gérer.

  10. #10
    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

    En fait si le fichier a été mal conçu …

    Ou alors l'importation qu'il suffit de bien paramétrer manuellement et
    en ayant activer au préalable l'Enregistreur de macro un code est livré sur un plateau !

    Ne pouvant poursuivre sans voir un fichier source (.csv) et le résultat attendu (.xlsx) …

  11. #11
    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
    Voici le fichier initial que j'ai du passer au format texte pour réussir à le télécharger
    exportoriginal - CopieTXT.txt

  12. #12
    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
    Voici le fichier cibleexport-comments-1032_cible.xls

  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


    Ok autant pour moi j'avais oublié la séquence au milieu des champs …

    Je vais regarder à tête reposée.

  14. #14
    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
    Merci beaucoup,

    La seule idée que j'ai pour l'instant serait de récupérer chaque chaine entre guillemets et voir pour supprimer les sauts de lignes entre.

  15. #15
    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

  16. #16
    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

    P'tite démonstration à la romaine :
    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
    Sub Demo1()
         Dim S$, SPQ$(), D&, L&, U&, R&
             S = ThisWorkbook.Path & "\export.csv"
             If Dir(S) = "" Then Beep: Exit Sub
        With CreateObject("ADODB.Stream")
            .Charset = "utf-8"
            .Open
            .LoadFromFile S
             SPQ = Split(.ReadText, vbCrLf)
            .Close
        End With
            D = UBound(SPQ) + (SPQ(UBound(SPQ)) = "")
            If D < 0 Then Beep: Exit Sub
            Application.ScreenUpdating = False
            L = 1
        With Feuil1
            .UsedRange.Clear
            .Cells(L, 1).Value = SPQ(0)
            U = UBound(Split(SPQ(0), ","))
        For R = 1 To D
                S = SPQ(R)
            While UBound(Split(S, """,""")) < U And R < D
                R = R + 1
                S = S & vbLf & SPQ(R)
            Wend
                L = L + 1
                .Cells(L, 1).Value = S
        Next
            .[A1].Resize(L).TextToColumns DataType:=xlDelimited, Comma:=True, FieldInfo:=Array([{1, 1}], [{2, 1}], _
                                  [{3, 1}], [{4, 1}], [{5, 4}], [{6, 1}], [{7, 1}], [{8, 1}], [{9, 1}], [{10, 1}])
            .UsedRange.Rows.AutoFit
            .UsedRange.VerticalAlignment = xlCenter
        End With
            Application.ScreenUpdating = True
    End Sub
    ___________________________________________________________________________________________________________

          Merci de cliquer sur en bas à droite de chaque message ayant aidé puis sur pour clore cette discussion …

  17. #17
    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

    Pas de nouvelle ?

    Ce n'est pas grave, la prochaine fois je passerais mon chemin, cela m'apprendra à livrer sur un plateau !

    Mais bon c'est la mode depuis un moment, beaucoup répondent sans se préoccuper du règlement de ce forum …

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

  19. #19
    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

  20. #20
    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é …

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