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

VBA Access Discussion :

fichier texte, recuperer le nr de ligne [Toutes versions]


Sujet :

VBA Access

  1. #1
    Membre actif
    Homme Profil pro
    Manager de Projet SAP
    Inscrit en
    Mars 2009
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Pologne

    Informations professionnelles :
    Activité : Manager de Projet SAP
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2009
    Messages : 210
    Points : 238
    Points
    238
    Par défaut fichier texte, recuperer le nr de ligne
    Bonjour.

    Je cherche a importer un fichier texte dans Access apres avoir supprime les 8 1eres lignes inutiles.

    Je sais comment ouvrir un fichier txt, copier les donnees d'un fichier a un autre.

    Je souhaite savoir s'il existe une solution pour, comme je recupere le contenu d'une ligne par exemple (Line Input #1, Chaine), verifier a quelle ligne du fichier le programme se trouve dans le fichier txt afin que, si je me trouve dans la ligne 1 par exemple, il ne copie pas la ligne dans le 2eme fichier.

    Par exemple j'ai actuellement la chose suivante :

    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
     
    Nrmag = 2
        Fichier1 = "C:\....\fichier1.txt"
        Fichier2 = "C:\....\fichier2.txt"
        Open Fichier1 For Input As #1
        Open Fichier2 For Append As #2
    'Boucle sur toutes les lignes du fichier texte
        Do While Not EOF(1)
        'recup des donnees de la ligne active du 1er fichier txt
            Line Input #1, Chaine
        'rajout dans le fichier 2 de la valeur du nr magasin + de la ligne du fichier 1 
            Print #2, Nrmag & ";" & Chaine
        Loop
        'Fermeture des fichiers
        Close #1
        Close #2
    Donc j'aimerai rajouter la verification du nr de ligne traitee afin de ne pas copier dans le fichier 2 tant que la ligne traitee dans le fichier 1 est entre la ligne 1 et la ligne 8.

    Merci.
    Cdlt.

  2. #2
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Bonjour

    http://warin.developpez.com/access/fichiers/

    Et plus particulièrement : II-D. Les TextStream

    II-D. Les TextStream

    Vous l'avez sans doute remarqué, la manipulation de fichier texte en VBA est très limitée. Pour combler ce manque, les développeurs ont souvent accès aux objets TextStream de la librairie Microsoft Scripting Runtime.


    Même si l'accès est toujours séquentiel, la programmation est grandement simplfiée et parait plus naturelle.



    II-D-1. Ouvrir un fichier texte

    La méthode OpenTextFile de l'objet FileSystemObject permet d'ouvrir ou créer un fichier texte.


    Syntaxe :
    OpenTextFile(FileName As String, [IOMode As IOMode = ForReading], [Create As Boolean = Faux], [Format As Tristate = TristateFalse]) As TextStream
    • Le paramètre FileName correspond au chemin du fichier.
    • IOMode spécifie le mode d'ouverture : ForReading (lecture), ForWriting (écriture), ForAppending (Ajout)
    • Lorsque Create est à True, le fichier est créé s'il n'existe pas.
    • Si Format est à True, le texte est en Unicode, sinon, il s'agit du codage ASCII.
    Exemple :
    Dim oFSO As Scripting.FileSystemObjectDim oTxt As Scripting.TextStream'Instanciation du FSOSet oFSO = New Scripting.FileSystemObjectSet oTxt = oFSO.OpenTextFile("D:\Essai\monfichier.txt", ForReading)
    Une nouvelle fois, il faut choisir entre lecture et écriture. Impossible d'utiliser les deux modes simultanément.

    La méthode CreateTextFile peut aussi être utilisée si le fichier n'existe pas encore.


    Syntaxe :
    CreateTextFile(FileName As String, [Overwrite As Boolean = Vrai], [Unicode As Boolean = Faux]) As TextStream
    Dans ce cas, le paramètre OverWrite écrase un fichier existant s'il est égal à True.


    Une dernière technique peut être utilisée pour instancier un objet TextStream : utiliser la méthode OpenAsTextStream depuis un objet File.


    Exemple :
    Dim oFSO As Scripting.FileSystemObjectDim oFl As Scripting.FileDim oTxt As Scripting.TextStream'Instanciation du FSOSet oFSO = New Scripting.FileSystemObjectSet oFl = oFSO.GetFile("D:\Essai\monfichier.txt")Set oTxt = oFl.OpenAsTextStream(ForReading)


    II-D-2. Lecture

    La lecture d'un fichier texte se fait en positionnant le paramètre IOMode à ForReading lors de l'ouverture.


    Plusieurs méthodes permettent de lire un ensemble de caractères :


    • Read(X) : lit X caractères
    • ReadLine : lit toute la ligne
    • ReadAll : lit tout le fichier
    La lecture se fait à partir de la position courante. Celle-ci est recalculée à chaque appel d'une de ces méthodes. Les propriétés Line et Column permettent de la connaître. Si à l'ouverture vous lisez 3 caractères, la position courante devient :


    • line(ligne) = 1
    • column(colonne) = 4
    La propriété AtEndOfLine permet de savoir si vous êtes à la fin de la ligne. Quant à la propriété AtEndOfStream, elle détermine si vous êtes à la fin du fichier.


    Exemple pour une lecture ligne à ligne :
    Dim oFSO As Scripting.FileSystemObjectDim oFl As Scripting.FileDim oTxt As Scripting.TextStream'Instanciation du FSOSet oFSO = New Scripting.FileSystemObjectSet oFl = oFSO.GetFile("D:\Essai\monfichier.txt")Set oTxt = oFl.OpenAsTextStream(ForReading)With oTxt While Not .AtEndOfStream MsgBox .ReadLine WendEnd With
    La méthode Skip(X) permet de déplacer la position courante de X caractères. La méthode SkipLine permet de sauter une ligne.


    Exemple pour une lecture un caractère sur deux :
    Dim oFSO As Scripting.FileSystemObjectDim oFl As Scripting.FileDim oTxt As Scripting.TextStream'Instanciation du FSOSet oFSO = New Scripting.FileSystemObjectSet oFl = oFSO.GetFile("D:\Essai\monfichier.txt")Set oTxt = oFl.OpenAsTextStream(ForReading)With oTxt While Not .AtEndOfStream MsgBox .Read(1) .Skip 1 WendEnd With
    N'oubliez pas que les sauts de lignes sont aussi des caractères.


    II-D-3. Ecriture

    Que le fichier soit ouvert en mode ForAppending ou ForWriting n'influe pas sur les méthodes à utiliser :


    • Write(Text) : écrit le texte à partir de la position courante
    • WriteLine(Text) : écrit le texte dans une nouvelle ligne
    • WrtieBlankLine(X) : écrit X lignes vides.
    Exemple :
    Dim oFSO As Scripting.FileSystemObjectDim oFl As Scripting.FileDim oTxt As Scripting.TextStreamDim i As Integer'Instanciation du FSOSet oFSO = New Scripting.FileSystemObjectSet oFl = oFSO.GetFile("D:\Essai\monfichier.txt")Set oTxt = oFl.OpenAsTextStream(ForWriting)With oTxt For i = 0 To 10 .WriteLine i Next iEnd With


    II-D-4. Fermeture

    La fermeture d'un objet TextStream est simplement obtenue avec l'appel de sa méthode Close.


    Exemple :

  3. #3
    Membre actif
    Homme Profil pro
    Manager de Projet SAP
    Inscrit en
    Mars 2009
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Pologne

    Informations professionnelles :
    Activité : Manager de Projet SAP
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2009
    Messages : 210
    Points : 238
    Points
    238
    Par défaut
    Merci beaucoup pour cette reponse.

    Je vais utiliser ca pour mon besoin.

    Merci.
    Cdlt

  4. #4
    Membre actif
    Homme Profil pro
    Manager de Projet SAP
    Inscrit en
    Mars 2009
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Pologne

    Informations professionnelles :
    Activité : Manager de Projet SAP
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2009
    Messages : 210
    Points : 238
    Points
    238
    Par défaut
    j'ai un probleme avec la ligne concernant le fichier a creer.

    Voici le code complet :

    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
     
        Dim oFSO As Scripting.FileSystemObject
        Dim oFSO2 As Scripting.FileSystemObject
        Dim oFl As Scripting.File
        Dim oF2 As Scripting.File
        Dim oTxt As Scripting.TextStream
        Dim oTxt2 As Scripting.TextStream
        'Instanciation du FSO
        Set oFSO = New Scripting.FileSystemObject
        Set oFSO2 = New Scripting.FileSystemObject
     
     
        Set oFl = oFSO.GetFile("G:\ftp\BAP\zdz_suma.201003.002.60 copie.csv")
        Set oF2 = oFSO2.CreateTextFile("G:\ftp\BAP\zdz_suma.201003.002.60 2.csv",True)as TextStream
     
        Set oTxt = oFl.OpenAsTextStream(ForReading)
        Set oTxt2 = oF2.OpenAsTextStream(ForWriting)
     
        'MsgBox "Nr de ligne egal a " & oTxt.Line
     
        Do While Not oTxt.AtEndOfStream
            If oTxt.Line < 8 Then
                MsgBox "nr ligne < a 8. On ne copie pas dans le 2eme fichier"
            Else
                MsgBox "nr ligne egal a " & oTxt.Line
                valeur = oTxt.ReadLine
                oTxt2.WriteLine valeur
            End If
        Loop
        oTxt.Close
        oTxt2.Close
    Si j'ecris la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set oF2 = oFSO2.CreateTextFile("G:\ftp\BAP\zdz_suma.201003.002.60 2.csv",True)
    Lors de l'execution j'ai un "Type mismatch" runtime error '13'

    Le fichier est neanmoins cree.

    Si je rajoute "As TextStream" comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set oF2 = oFSO2.CreateTextFile("G:\ftp\BAP\zdz_suma.201003.002.60 2.csv",True)as TextStream
    et que je passe a la ligne suivante, j'ai un message m'indiquant une erreur de compilation sur le "as". Message : "Expected: end of statement"

    Le probleme est le meme si j'utilise oFSO sans avoir cree oFSO2.

    D'ou peut venir le probleme ?
    Merci
    Cdlt.

  5. #5
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    oF2 doit être de type textstream et non de type file

  6. #6
    Membre actif
    Homme Profil pro
    Manager de Projet SAP
    Inscrit en
    Mars 2009
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Pologne

    Informations professionnelles :
    Activité : Manager de Projet SAP
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2009
    Messages : 210
    Points : 238
    Points
    238
    Par défaut
    Merci beaucoup.

    Cdlt.

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

Discussions similaires

  1. [Débutant] Ecrirer un fichier texte avec les numéros de ligne ?
    Par Krillz dans le forum MATLAB
    Réponses: 14
    Dernier message: 25/02/2009, 23h09
  2. Réponses: 4
    Dernier message: 14/12/2006, 22h13
  3. Réponses: 13
    Dernier message: 09/11/2006, 23h37
  4. [VB6] Lecture fichier texte - Probleme virgule = saut de ligne
    Par Zaal dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 13/09/2006, 08h16
  5. Lecture fichier texte avec un nombre de lignes à ignorer
    Par TravelMate dans le forum Langage
    Réponses: 20
    Dernier message: 02/08/2006, 11h59

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