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 :

Importer fichier de données sans séparateur dans xls [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    personnel
    Inscrit en
    Janvier 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : personnel

    Informations forums :
    Inscription : Janvier 2016
    Messages : 4
    Par défaut Importer fichier de données sans séparateur dans xls
    Bonjour,
    Pour le boulot, j'ai besoin d'importer un fichier txt de données.
    Ce fichier a comme particularité qu'il ne possède pas de séparateur, mais les données sont délimitées par une structure.

    Ci-dessous un extrait des 6 premières informations de la structures (qui en comporte 44) :
    Libellé   |Taille|PosDeb|PosFin
    Filler    |10    |1     |10
    RHSGrp    |3     |11    |13
    FINESS    |9     |14    |22
    VersRHS   |3     |23    |25
    NumSej    |7     |26    |32
    Ci dessous un extrait des 2 premières données (qui en comporte au minimum 3000 lignes):
    abcdefghijM195207xxxxxM093877000
    abcdefghijM195207xxxxxM094578090
    Résultat attendu dans une feuille excel : chaque cellule comportera une information
    Exemple :
    Filler	   |RHSGrp   |FINESS	 |VersRHS |NumSej
    abcdefghij |M19      |5207xxxxx  |M09     |3877000
    abcdefghij |M19      |5207xxxxx  |M09     |4578090
    En utilisant les fonctions xls, je m'en sors très bien, mais le fichier est long a rafraichir et très volumineux, bref fastidieux.

    Pour cela, je souhaite automatiser ce traitement par une macro, mais ,mes connaissances en VBA sont très très limitées.

    Y a t-il une personne qui pourrait m'aider. SVP

    Merci beaucoup

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Si chaque champ a une longueur prédéfinie, tu pourrais créer un tableau avec les emplacements de départ et la longueur de chacun de ces champs
    En partant de l'exemple de fichier que tu donnes, on pourrait y aller ainsi

    exemple de tableau Array(1, 10, 11, 7, 18, 5, 23, 10)
    le premier champ commence en 1 et a 10 comme longueur
    le deuxième commence en 11 et a 7 comme longueur
    le troisième commence en 18 et a 5 de longueur....


    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
    Sub Importer()
        Dim I As Long
        Dim LigneLue As String, LigneÉcrite As String
        Dim TabloIntervalle
     
        'tableau qui donne le numéro de départ des sections et leurs longueurs
        TabloIntervalle = Array(1, 10, 11, 7, 18, 5, 23, 10)
     
        'si le fichier existe, on le supprime
        If Dir("C:\resultat.txt") <> "" Then Kill "C:\resultat.txt"
     
        'Crée le fichier à écrire
        Open "C:\resultat.txt" For Append As #1
        'lecture du fichier original
        Open "C:\test.txt" For Input As #2
        Do Until EOF(2)
            LigneÉcrite = ""
     
            'lecture ligne par ligne
            Line Input #2, LigneLue
            For I = 0 To UBound(TabloIntervalle) - 1 Step 2
                LigneÉcrite = LigneÉcrite & Mid(LigneLue, TabloIntervalle(I), TabloIntervalle(I + 1)) & ";"
            Next
     
            'écriture de chaque ligne transformée
            Print #1, LigneÉcrite
        Loop
     
        Close #1
        Close #2
    End Sub
    Une fois le fichier créé, tu peux alors l'ouvrir dans Excel

  3. #3
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour

    Il s'agit probablement d'un fichier où il n'y a pas de séparateurs de lignes non plus.

    La méthode de Lecture/Ecriture suggérée ici http://warin.developpez.com/access/fichiers/
    est l'accès direct ( Open fichier For Random )


    Un exemple de lecture de tous les dossiers dans un tel fichier : How to Work with Random Access Files https://support.microsoft.com/en-us/kb/150700

  4. #4
    Candidat au Club
    Homme Profil pro
    personnel
    Inscrit en
    Janvier 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : personnel

    Informations forums :
    Inscription : Janvier 2016
    Messages : 4
    Par défaut [Résolu] - Remerciements
    Merci à Docmarti et à parmi de leur aide très précieuse.
    Cordialement

  5. #5
    Candidat au Club
    Homme Profil pro
    personnel
    Inscrit en
    Janvier 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : personnel

    Informations forums :
    Inscription : Janvier 2016
    Messages : 4
    Par défaut
    Bonjour,
    Je reviens sur le forum pour un autre problème que je n'arrive pas à résoudre (au regard de mes compétences en vba).
    Je vous remercie par avance de votre aide, j'ai la nécessité de traiter un fichier txt sans séparateur afin de créer 4 fichiers textes ayant comme séparateur le ";".
    Structure du fichier txt source :
    Ci-dessous le formatage :
    Libellé taille PosDEB PosFIN
    Filler 10 1 10
    RHSGrp 3 11 13
    FINESS 9 14 22
    VersRHS 3 23 25
    NumSej 7 26 32
    Nb DAS(n1) 2 33 34
    Nb Acte(n2) 3 35 37
    Nb Med(n3) 2 38 39
    DAS n°1 6
    DAS n°n1 6
    Acte n°1 10
    Acte n°n2 10
    Med n°1 4
    Med n°n3 4

    Informations des fichiers de sorties :
    • Fichier 1 :
      • Filler
      • RHSGrp
      • FINESS
      • VersRHS
      • NumSEJ
      • Nb DAS(n1)
      • Nb Acte(n2)
      • Nb Med(n3)


    Pour les fichiers ci-dessous, il faut arriver à transposer la dernière information, c'est à dire qu'il faut répèter autant de lignes que la valeur de l'indicateur Nb xxx avec la valeur


    • Fichier 2
      • Filler
      • RHSGrp
      • FINESS
      • VersRHS
      • NumSEJ
      • Nb DAS(n1)
      • Nb Acte(n2)
      • Nb Med(n3)
      • Nb DAS(n1)
      • DAS (pour info : données à transposer)

    • Fichier 3
      • Filler
      • RHSGrp
      • FINESS
      • VersRHS
      • NumSEJ
      • Nb DAS(n1)
      • Nb Acte(n2)
      • Nb Med(n3)
      • Nb Acte(n1)
      • Acte (pour info : données à transposer)

    • Fichier 4
      • Filler
      • RHSGrp
      • FINESS
      • VersRHS
      • NumSEJ
      • Nb DAS(n1)
      • Nb Acte(n2)
      • Nb Med(n3)
      • Nb Acte(n1)
      • Med (pour info : données à transposer)



    Exemple de données :
    abcdefghijM195207xxxxxM0938770000200303R20212H409 NKQ+284 NKR+204 NBC+024 A521B587H587
    abcdefghijM195207xxxxxM0945780900300202Z58029H40952Z08415PLS+001 DRZ+804 Z991X412

    Résultat attendu pour chaque fichier
    • Fichier 1

    Filler RHSGrp FINESS VersRHS NumSEJ Nb DAS(n1) Nb Acte(n2) Nb Med(n3)
    abcdefghij M19 5207xxxxx M09 3877000 02 003 03
    abcdefghij M19 5207xxxxx M09 4578090 03 002 02
    ....

    • Fichier 2

    Filler RHSGrp FINESS VersRHS NumSEJ Nb DAS(n1) Nb Acte(n2) Nb Med(n3) DAS
    abcdefghij M19 5207xxxxx M09 3877000 02 003 03 R20212
    abcdefghij M19 5207xxxxx M09 3877000 02 003 03 H409
    abcdefghij M19 5207xxxxx M09 4578090 03 002 02 Z5802
    abcdefghij M19 5207xxxxx M09 4578090 03 002 02 H40952
    abcdefghij M19 5207xxxxx M09 4578090 03 002 02 Z08415

    • Fichier 2

    Filler RHSGrp FINESS VersRHS NumSEJ Nb DAS(n1) Nb Acte(n2) Nb Med(n3) Acte
    abcdefghij M19 5207xxxxx M09 3877000 02 003 03 NKQ+284
    abcdefghij M19 5207xxxxx M09 3877000 02 003 03 NKR+204
    abcdefghij M19 5207xxxxx M09 3877000 02 003 03 NBC+024
    abcdefghij M19 5207xxxxx M09 4578090 03 002 02 PLS+001
    abcdefghij M19 5207xxxxx M09 4578090 03 002 02 DRZ+804

    • Fichier 4

    Filler RHSGrp FINESS VersRHS NumSEJ Nb DAS(n1) Nb Acte(n2) Nb Med(n3) Med
    abcdefghij M19 5207xxxxx M09 3877000 02 003 03 A521
    abcdefghij M19 5207xxxxx M09 3877000 02 003 03 B587
    abcdefghij M19 5207xxxxx M09 3877000 02 003 03 H587
    abcdefghij M19 5207xxxxx M09 4578090 03 002 02 Z991
    abcdefghij M19 5207xxxxx M09 4578090 03 002 02 X412

    Je vous remercie pour l'aide que vous allez m'apportée
    Merci beaucoup

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Si c'était possible pour toi de fournir un exemple de fichier texte, ça aiderait pas mal...

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 24/09/2011, 12h42
  2. [XL-2003] Import fichier texte - problème avec séparateur milliers
    Par nmicoud dans le forum Excel
    Réponses: 4
    Dernier message: 15/04/2009, 13h48
  3. Réponses: 4
    Dernier message: 12/07/2007, 08h56
  4. Importer fichiers txt d'un dossier dans une table
    Par avantoux dans le forum Access
    Réponses: 16
    Dernier message: 28/12/2005, 12h13
  5. Développer une base de données sans BDE dans DELPHI 3 PRO
    Par ndlh721 dans le forum Bases de données
    Réponses: 3
    Dernier message: 05/02/2005, 14h21

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