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 :

Importation d'un fichier CSV en VBA


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
    Septembre 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 34
    Par défaut Importation d'un fichier CSV en VBA
    EN VBA, est-il possible d'importer les données d'un fichier CSV avec certain critères (je le fais avec Excel normalement, mais je dois classer manuellement 1000 à 1200 lignes) et je m'explique:

    Je voudrais qu'en important le fichier CSV, avec colonne délémitée et avec des virgules comme séparateurs, que les lignes avec la mention "samedi" de la colonne F (ou la 6è colonne) se retrouve dans le 1er onglet avec comme nom "samedi" et les lignes avec la mention "Dimanche" se retrouve dans le 2è onglet avec comme nom d'onglet "Dimanche"

    Un immense merci

  2. #2
    Membre Expert
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Par défaut
    Bonsoir,
    avec la commande TransferText

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 34
    Par défaut
    Oui, si cela veut dire de transférer le texte dans mon classeur Excel.

    Merci

  4. #4
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut,Un début de réponse ,sans aucun doute à adapter et améliorer
    je n'ai pas généré de fichier de test donc à toi de poursuivre
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    ' Sous VBE cocher référence Microsoft Scripting Runtime
    Option Explicit
     
    Sub Lecture()
    Dim Fichier As Variant
        ChDir ThisWorkbook.Path
        Fichier = Application.GetOpenFilename("Fichier CSV (*.csv), *.csv")
        If Fichier <> False Then Lire Fichier
    End Sub
     
    Private Sub Lire(ByVal sNomFichier As String)
    Dim s As String
    Dim FSO As Scripting.FileSystemObject
    Dim Fichier As Scripting.TextStream
    Dim iRowS As Long, iRowD As Long, iCol As Long
    Dim Ar() As String
    Dim i As Long
    Const Separateur As String * 1 = ","
     
        Worksheets("Samedi").Cells.Clear
        Worksheets("Dimanche").Cells.Clear
     
        Application.ScreenUpdating = False
     
        Set FSO = New Scripting.FileSystemObject
        Set Fichier = FSO.GetFile(sNomFichier).OpenAsTextStream(ForReading)
     
        iRowS = 0: iRowD = 0
        Do While Not Fichier.AtEndOfStream
            iCol = 1
            s = Fichier.ReadLine
            Ar = Split(s, Separateur)
            Select Case Ar(5)
                Case "Samedi"
                    iRowS = iRowS + 1
                    For i = LBound(Ar) To UBound(Ar)
                        Worksheets("Samedi").Cells(iRowS, iCol) = Ar(i)
                        iCol = iCol + 1
                    Next i
                Case "Dimanche"
                    iRowD = iRowD + 1
                    For i = LBound(Ar) To UBound(Ar)
                        Worksheets("Dimanche").Cells(iRowD, iCol) = Ar(i)
                        iCol = iCol + 1
                    Next i
            End Select
        Loop
        Fichier.Close
     
        Set Fichier = Nothing
        Set FSO = Nothing
     
        Application.ScreenUpdating = True
    End Sub

  5. #5
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    Bonjour, à tous,
    Perso quand je dois transférer des données d'un csv, je met le fichier csv et le fichier qui recevra les données dans le même répertoire.
    J'ouvre le fichier de destination, et j'envoie ma macro d'import_csv.
    quand l'import est fini je referme le fichier csv et cela fonctionne tres bien.

    Pour ton cas voici comment cela pourrais se présenter :
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Sub import_csv()
    Dim wk1 As Workbook, wk2 As Workbook
    Dim chemin As String, fichier As String
     
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
     
    Set wk1 = ThisWorkbook
     
    'Indique le répertoire du fichier csv
    'ici le même répertoire que le fichier destination
    chemin = wk1.Path & "\"
     
    'définit le nom du fichier à importer
    fichier = "TEST.csv"
     
    'ouvre le fichier csv
    Workbooks.Open chemin & fichier
     
    Set wk2 = Workbooks(fichier)
     
    With wk2.Sheets(1)
    derlign = .Range("A1").SpecialCells(xlLastCell).Row
    x = 2
    y = 2
     
    'recherche dans la colonne F Samedi ou dimanche et copy
    'en fonction
    For Each cel In .Range("F1:F" & derlign)
      If cel.Value = "Samedi" Then
        .Rows(cel.Row).Copy wk1.Sheets(1).Rows(x)
        x = x + 1
      ElseIf cel.Value = "Dimanche" Then
        .Rows(cel.Row).Copy wk1.Sheets(2).Rows(y)
        y = y + 1
      End If
    Next cel
    End With
     
    wk2.Close
     
    With wk1
    .Sheets(1).Name = "Samedi"
    .Sheets(2).Name = "Dimanche"
    End With
     
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    End Sub
    Bien entendu il faut adapter le nom du fichier csv et peux-être le chemin, sauf si tu met les deux fichiers dans le même répertoire.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 34
    Par défaut
    Bonjour rvtoulon et kiki29,

    En premier j'ai essayé la solutionde kiki29 et ca bloque à "Dim FSO As Scripting.FileSystemObject" mais je ne sais pas pourquoi car je ne connais pas cette ligne de code ensuite j'ai essayé la solution de rvtoulon et je me suis rendu compte que j'ai oublié de vous dire que le fichier est en réseau, car même si j'ai bien mis le chemin complet la place de la barre oblique "\" à "chemin = wk1.Path & "\" cela indique un chemin sur le "D . . . application.data\Microsoft\Excel", j'ai fait bien des tentatives pour modifier et arriver à lui donner le bon chemin mais j'y arrive pas, je ne suis pas aussi bon que vous.

    Merci de m'aider

  7. #7
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    Bonjour,
    je viens de faire un essai en réseau et le code fonctionne.
    je te suggère de mettre les deux fichiers , le ".xls" et le ".csv" dans le même répertoire sur le réseau.
    ensuite tu ne touches pas a cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chemin = wk1.Path & "\"
    si tu enlèves le "\" le chemin ne seras pas BON: par exemple tu as un répertoire qui s'appelle DOSSIER et un fichier qui s'appelle test.xls. Le chemin
    C:\DOSSIERtest.xls = Pas valide
    mais
    c:\DOSSIER\test.xls = valide

    Par contre tu met le nom de ton fichier csv ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    'définit le nom du fichier à importer
    'Garde les "
    fichier = "LE NOM DE TON FICHIER.csv" 
    et tu lances la macro.
    Dis nous ce qu'il se passe.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 34
    Par défaut
    Pourtant c'est bien cela que j'ai fais, voici le chemin tel que je l'ai mis:

    chemin = wk1.Path & "\\serveur\DONNEES\Partage\métaux meuble accessoires \MMA\ACC\Centralisation MMA\Rapports ville\MÉTAUX.xls
    (les 2 barres obliques au début sont inscrit comme ça quand je copie l'adresse)

    et le fichier .CSV est écrit comme ça; fichier = "ville.csv"

    Qu'est ce que je fais de pas correct ? J,ai le message suivant:

    Erreur d'exécution 1004 (je vois très bien le chemin pour faire ouvri excel et ensuite le chemin est correct pour le fichier) et il est écrit : Fichier introuvable

  9. #9
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut,pour ton erreur FSO voir remarque en tête du code
    ' Sous VBE cocher référence Microsoft Scripting Runtime

  10. #10
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    Tu lances ta macro à partir du fichier Métaux.xls ?
    Si oui il se trouve sur le Réseau, donc pour la ligne chemin l'instruction path renvois le chemin du fichier métaux. Regarde F1 à "Path".
    Ce qui veux dire que tu laisses la ligne comme je l'ai écrite, tu ne rajoutes rien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chemin = wk1.Path & "\"
    rien de plus maintenant si tu veux contrôler le chemin met ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    chemin = wk1.Path & "\"
    MsgBox chemin
    et tu laisses ta ligne fichier :Excuse moi d'insister mais pour le code que je t'ai donné, il faut que Métaux.xls et ville.csv soient dans le même répertoire.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 34
    Par défaut
    Super, Merci rvtoulon, ça marche Nickel ou presque....

    Je m'excuse je croyais que je devais mettre le chemin au complet, et mes 2 fichier étaitent déjà dans le même répertoire. . . bon ça c'est réglé.

    la macro fonctionne très très bien sauf que rein n'est collé dans mes feuilles nouvellement créé. . . se pourrait-il qu'il manque le code pour coller ce qui a été copié par ".Rows(cel.Row).Copy wk1.Sheets(2).Rows(y)"

    merci encore de m'aider et de ta patience

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

Discussions similaires

  1. [AC-2002] import fichiers CSV:code VBA NOK
    Par 19chacha75 dans le forum VBA Access
    Réponses: 0
    Dernier message: 02/02/2010, 15h52
  2. Réponses: 9
    Dernier message: 12/06/2007, 11h02
  3. [Wamp] Problème à l'import d'un fichier csv
    Par Pokerstar dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 25/05/2007, 09h15
  4. Pb d'import d'un fichier .csv
    Par clodius dans le forum Access
    Réponses: 2
    Dernier message: 17/04/2007, 10h18
  5. importation d'un fichier csv
    Par bidson dans le forum XMLRAD
    Réponses: 14
    Dernier message: 22/12/2005, 13h44

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