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 :

Traitement d'un fichier CSV [XL-2007]


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 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 50
    Par défaut Traitement d'un fichier CSV
    Bonjour,

    Je débute actuellement en VBA et je souhaiterai avoir un peu aide.
    Je souhaiterai ouvrir un fichier CSV sans le transformer et en pouvant choisir le chemin.
    Par la suite, je voudrais pouvoir copier chaque ligne en effectuant un test si la ligne est vide ou non.

    Merci pour votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Essaie :

    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
    Sub test()
        Dim Fich As String, Separateur As String, Enrgt As String, Ligne As Long
        Separateur = ","
        Fich = Application.GetOpenFilename("csv Files (*.csv), *.csv")
        Close #1
        Open Fich For Input As #1
        Sheets.Add
        Do While Not EOF(1)
            Line Input #1, Enrgt
            tabl = Split(Enrgt, Separateur)
            If Len(Application.Substitute(Enrgt, Separateur, "")) > 0 Then
                Ligne = Ligne + 1
                col = 0
                For Each Item In tabl
                    col = col + 1
                    Cells(Ligne, col) = Item
                Next Item
            End If
        Loop
        Close #1
    End Sub

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 50
    Par défaut Erreur objet
    Bonjour,

    Je travaille sous 2007 et la fonction "Application.Substitute" me renvoie une erreur.

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Je n'arrive pas à reproduire l'erreur. Peux-tu mettre en pièce jointe le fichier csv en effaçant les données confidentielles ?

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

    Informations forums :
    Inscription : Décembre 2011
    Messages : 50
    Par défaut
    Je souhaiterais qu'il recopie ce fichier jusqu' a la dernière ligne sur une feuille excel. (Détection EOF) sans transformer le fichier.

    Merci.

    Le site n'accepte pas le format CSV.
    Je l'ai donc transformer en excel.
    Fichiers attachés Fichiers attachés

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    La macro se déroule sans erreur. Vérifie que le séparateur de champ est bien celui indiqué par la ligne :


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

    Informations forums :
    Inscription : Décembre 2011
    Messages : 50
    Par défaut Erreur objet
    Lorsque je lance la macro une erreur se produit:

    "Erreur d'execution '1004'
    Erreur définie par l'application ou par l'objet"
    C'est bizarre je mets bien comme séparateur= ";"
    Mais le plus bizarre c'est que lorsque j'ouvre mon csv je n'ai pas besoin de le transformer.
    Il est déjà délimiter (conversion déjà faite).

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Mais le plus bizarre c'est que lorsque j'ouvre mon csv je n'ai pas besoin de le transformer.
    Il est déjà délimiter (conversion déjà faite).
    Non, ce n'est pas bizarre; un fichier CSV s'ouvre dans Excel comme un classeur. Vérifie, en ouvrant le csv dans le bloc-notes que le séparateur est bien ";". As-tu mis la macro dans un module standard ? Y a-t-il des lignes copiées sur la feuille quand l'erreur se produit ? si oui, combien ?

  9. #9
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Et en appliquant une requête ?
    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
     
    Sub CSV()
     
        Dim Fichier As String
     
        'le chemin du fichier cible, à adapter
        Fichier = "F:\test.csv"
     
        'exécute une requête er récup en feuille "Feuil1" à partir de "A1", à adapter
        With Worksheets("Feuil1").QueryTables.Add("TEXT;" & Fichier, _
                                                  Worksheets("Feuil1").Range("A1"))
     
            .TextFileSemicolonDelimiter = True 'le délimiteur est le point-virgule (;)
            .Refresh 'met à jour
            .Delete 'supprime la requête
     
        End With
     
    End Sub
    Hervé.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 50
    Par défaut Erreur objet EXCEL 2007
    Aucune ligne n'est recopié.
    J’exécute en pas pas la macro.
    Arrivé a cette ligne" If Len(Application.Substitute(Enrgt, Separateur, "")) > 0 Then" Il me met l’erreur 1004 (erreur définie par l'application et l'objet)
    Peux etre est ce du au référence? (excel 2007)

  11. #11
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Peux-tu mettre en pièce jointe le classeur où tu as mis la macro. Tu peux supprimer tout ce qui n'a pas trait au présent problème.
    Merci.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 50
    Par défaut
    Dans le bloc note le séparateur est bien le ";".
    Je pense que ce sont mes références, dans outils.
    J'ai bien sectionné "VBA FOR APPLICATION"

    Ci joint le classeur vide avec le module.
    Fichiers attachés Fichiers attachés

  13. #13
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Quel module, c'est ton fichier CSV ? Je l'ai déjà. Est-ce que tu as essayé les deux pistes que j'ai postées ?

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 50
    Par défaut Erreur objet EXCEL 2007
    Bonjour,

    J'ai essayé les deux pistes, il y a une petite amélioration.
    Le fichier se recopie et se délimite bien par contre il recopie tout sur une ligne (l1).

  15. #15
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    J'ai essayé les deux pistes, il y a une petite amélioration.
    Avec laquelle des deux méthodes indiquées ?

    Le fichier se recopie et se délimite bien par contre il recopie tout sur une ligne (l1).
    Tout quoi ? tout le fichier ? Tu as seulement demandé de ne pas copier les lignes vides.

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 50
    Par défaut Erreur objet EXCEL 2007
    Il m'a recopié sur une ligne les 3ème ligne du fichier.
    Par contre j'ai un autre bout de code qui est celui-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
        Dim Releve As Variant, Separateur As String, Enrgt As String, Ligne As Long, i As Integer, filtre As String
        Separateur = ";"
        filtre = "classeur (*.csv),*.csv"
        Releve = Application.GetOpenFilename(filtre, 2, "ouvrir", , True)
        If IsArray(Releve) Then
        For cmpt = LBound(Releve) To UBound(Releve)
            If StrComp(Right(Releve(cmpt), 3), "csv", vbTextCompare) = 0 Then
            Application.Workbooks.OpenText Releve(cmpt)
            End If
        Next cmpt
       End If
    End Sub
    il me permet d'ouvrir mon fichier par contre sans le délimiter il me faudrait juste l'application pour délimiter mon fichier (séparateur = ";")

  17. #17
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Il m'a recopié sur une ligne les 3ème ligne du fichier.
    Ça veut dire quoi ????

    AVEC QUEL CODE ???

    Si tu t'obstines à ne pas répondre aux questions, je cesse également de répondre. Quant à ton code, adresse-toi à celui qui te l'a fourni. Je t'ai fourni deux macros (et une modif pour la première). Tu les testes sinon, personnellement, j'arrête de perdre mon temps.

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 50
    Par défaut Erreur objet EXCEL 2007
    Merci Daniel.
    Ne t'énerve pas.
    J'ai trouvé ma solution.
    Tu m'as énormément aidé.
    encore merci.

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

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. Problème de traitement d'un fichier CSV
    Par cork1e dans le forum Langage
    Réponses: 5
    Dernier message: 20/10/2009, 15h53
  3. Réponses: 5
    Dernier message: 13/02/2008, 10h22
  4. [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
  5. Réponses: 7
    Dernier message: 06/02/2007, 13h27

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