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 :

lecture d'un fichier texte SANS l'ouvrir


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Points : 17
    Points
    17
    Par défaut lecture d'un fichier texte SANS l'ouvrir
    Bonjour,

    je travaille actuellement à la mise à jour d'une macro qui récupère des données dans un fichier texte, afin d'acceder à des données.

    en voici le code, ce qui vous donnera une petite idée de ce qu'il faut faire.

    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
            Open MonFichier For Input As #1
     
            '---Recherche de la ligne d'entête---
            Do
                Line Input #1, ligne
            Loop Until EOF(1) Or InStr(1, ligne, "Sub Activity2")
            '------------------------------------
     
            'Recherche des positions du champ + filtre qui sont stockés dans des variables globales
            For i = 0 To UBound(vector)
                If vector(i) = champ Then
                    pchamp = i
                ElseIf vector(i) = filtre Then
                    pfiltre = i
                End If
            Next i        
            'Parcourir le fichier upf et récupérer les données voulues
            Do
                Line Input #1, ligne
                vector = Split(ligne, ";", -1, vbBinaryCompare)
     
                If vector(pfiltre) = "IF" Then
                    centre_if = centre_if + vector(pchamp)
                End If
     
            Loop Until EOF(1)
     
            Close #1
     
                 Recup_Hfinvest_Seed = centre_if
    mon problème, c'est que le fichier en question fait plusieurs milliers de lignes (trop pour une page excel) et que je dois le lancer pour plusieurs fichiers résultat, c'est très longs

    j'aimerais pouvoir acceder à ces données d'une façon similaire à celle présentée dans:
    http://silkyroad.developpez.com/VBA/...ursFermes/#LII

    avec pour requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xSQL = "SELECT SUM(AR_DD) FROM [Feuil1$] " & _
                "WHERE Center = 'IF'"
    mais, je n'y arrive pas.

    si quelqu'un pouvait m'aider, je pourais rentrez plus tot chez moi le soir

    merci

    Dr Gratesnif

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 147
    Points
    20 147
    Par défaut
    bonsoir

    La syntaxe pour lire les fichiers txt est différente des classeurs Excel:


    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
    Sub importFichierTexte_ADO()
        Dim Rc As ADODB.Recordset
        Dim cn As String, Chemin As String, Fichier As String
        Dim i As Long
     
        Chemin = "C:\Documents and Settings\michel\dossier"
        Fichier = "monFichier.txt"
     
        cn = "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
            "Dbq=" & Chemin & ";Extensions=asc,csv,tab,txt"
     
        Set Rc = New ADODB.Recordset
        Rc.Open Source:="SELECT SUM(AR_DD) FROM " & Fichier & _
            " WHERE Center = 'IF'", ActiveConnection:=cn
     
        If Not Rc.EOF Then
            'For i = 0 To Rc.Fields.Count - 1 'recuperation entetes
                'Cells(1, 1).Offset(0, i) = Rc.Fields(i).Name
            'Next
            Range("A2").CopyFromRecordset Rc
        End If
     
        Rc.Close
    End Sub


    bon week end
    michel

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Points : 17
    Points
    17
    Par défaut
    Merci !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

  4. #4
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Points : 17
    Points
    17
    Par défaut
    bah, en fait, ça ne marche pas,

    j'ai un petit peu modifié le code te essayé diverses méthodes:

    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
    Sub importFichierTexte_ADO()
        Sheets("TEST").Activate
        Dim Cn As ADODB.Connection
        Dim Rc As ADODB.Recordset
        Dim Chemin As String, Fichier As String
        Dim i As Long
     
        Chemin = "C:\USERS\Louis Bitterlin\RiskArb\"
        Fichier = "Limit_25.csv"
     
        If Dir(Chemin & Fichier$, vbNormal Or vbReadOnly Or vbHidden Or vbArchive) = "" Then
            MsgBox "le fichier " & Chemin & Fichier & " n'existe pas."
        Else
     
            Set Cn = New ADODB.Connection
            '--- Connection ---
            With Cn
                .ConnectionString = "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
                    "Dbq=" & Chemin & ";Extensions=asc,csv,tab,txt"
                .Open
            End With
     
            'ne marche pas
            'Set Rc = New ADODB.Recordset
            'Rc.Open "SELECT Center, AR_DD FROM " & Fichier & " where Center = 'IF'", Cn
     
            'ne marche pas
            'Set Rc = Cn.OpenRecordset("SELECT Center, AR_DD FROM " & Fichier & " where Center = 'IF'")
     
            If Not Rc.EOF Then
                For i = 0 To Rc.Fields.Count - 1 'recuperation entetes
                    Cells(1, 1).Offset(0, i) = Rc.Fields(i).name
                Next
                Range("A2").CopyFromRecordset Rc
            End If
            Rc.Close
        End If
    End Sub
    ça plante au lignes mises en commentaires, avant, aucun problème.
    ça me renvoie dans les deux cas:

    Run-time error '-2147217904 (80040e10)':

    Automation error

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 147
    Points
    20 147
    Par défaut
    bonsoir


    bah, en fait, ça ne marche pas,
    Forcément, si tu utilises une autre méthode... il ne suffit pas de faire des copier/coller et de compiler différentes méthodes pour ça fonctionne...


    Tu as oublié de spécifier des arguments sur cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rc.Open "SELECT Center, AR_DD FROM " & Fichier & " where Center = 'IF'", Cn


    bonne soirée
    michel

  6. #6
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Points : 17
    Points
    17
    Par défaut
    Bonjour,

    En fait, ta méthode me donne la même erreur.

    ce qui me fait penser que je n'ai peut être pas mis les bonnes bibliothéques

    a-t'on besoin d'une bibliothèque particulière qui n'est pas la même que pour lire les fichiers excel?

    je remarque aussi que l'on ne renseigne pas le .ConnectionProvider

    Citation Envoyé par SilkyRoad
    Tu as oublié de spécifier des arguments sur cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rc.Open "SELECT Center, AR_DD FROM " & Fichier & " where Center = 'IF'", Cn
    qu'est ce que j'ai oublié?
    lorsque je vais dans l'aide de l'objet Recordset, je ne trouve pas de méthode ".open"

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Points : 17
    Points
    17
    Par défaut
    bon, ça y est, j'ai compris

    en fait, les données de mon fichier sont séparées par des ";"

    vu que ça n'est pas moi qui le génére et que de nombreuses autres macros se servent des mêmes données, il ne m'est pas possible de modifier la forme du fichier source.

    est ce que quelqu'un sait comment faire dans ce cas?

  8. #8
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Points : 17
    Points
    17
    Par défaut
    désolé si je fais des UP, mais personne n'a répondu à mon problème

    la méthode de SilkyRoad marche très bien si l'on met les bibliothéques:

    Microsoft DAO 3.6 object library
    Microsoft ActiveX Data Object 2.8 library

    mais seulement si mes données sont séparées par des virgules, ce qui n'est pas le cas.

    est ce que quelqu'un a une autre idée, merci

Discussions similaires

  1. Récupérer textes dans plusieurs fichiers RTF sans les ouvrir
    Par jpvba65 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 25/01/2014, 17h13
  2. Ouvrir un fichier text sans retour ligne
    Par Harrys dans le forum PL/SQL
    Réponses: 6
    Dernier message: 27/10/2009, 17h18
  3. Comment en VBA modifier un fichier texte sans l'ouvrir dans Excel ?
    Par shadok6 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/10/2008, 13h54
  4. [C#] Lecture d'un fichier texte sans terminaison de ligne
    Par heavydrinker dans le forum Windows Forms
    Réponses: 4
    Dernier message: 17/10/2006, 10h03
  5. Stockage de données & lecture d'un fichier texte
    Par petitours dans le forum C++Builder
    Réponses: 6
    Dernier message: 13/03/2004, 14h05

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