XL 2016 Ouvrir un fichier contenant du texte sans extension txt et sans séparateur pour le structurer ligne par ligne

Flx1er

XLDnaute Occasionnel
Bonjour,
Le titre est un peu long mais il pose le cadre.
Pour mon travail, je dois réussir à structurer une multitude de fichier n'ayant pas d'extension et ne possédant pas de séparateur.
Ces fichiers se trouvent sur plusieurs dossiers.
J'ai commencé à écrire une macro qui m'identifier tous les emplacements où se trouvent les fichiers, mais je bloque pour ouvrir et traiter ces fichiers
La description ci-dessous ne vaut que pour un seul fichier. Dès que j'aurai la démarche je l’adapterai à cet macro.

Pour l'exemple, le fichier nommé "Data.Activite.grp" :
  • le caractère "." : les fichiers sont générés par d'autres soft
  • .grp signifie groupé.
  • Les données de ce fichier sont au format texte.
  • Ce fichier comporte plusieurs milliers de lignes
Comment faire :
  • pour ouvrir ce type de fichier
  • puis lui appliquer la structure définie sur le fichier xlsx joint
    • Sur le 1er onglet, se trouve les formats àappliquer en fonction de la version (emplacement 11 et d'une longueur 3 : M1B ou M1A).
    • Sur le 2nb onglet se trouve les entêtes des champs
  • et enfin l'enregistrer au format :
    • cvs
    • xlsx : l'onglet contenant ces données sera nommé GRP
J'espère avoir été explicite sur cette demande
En vous remerciant
 

Pièces jointes

  • DataActivite.zip
    350 bytes · Affichages: 10
  • Structure.xlsx
    13.5 KB · Affichages: 8
Dernière édition:

Flx1er

XLDnaute Occasionnel
Comme demandé, je poste l'intégralité du fichier xlsm.
A noter : comme précisé dans la demande initiale, j'aimerai avoir la démarche pour 1 cas et je finaliserai le reste. A cette fin, le repère "Pour exemple" figure au niveau de l'onglet Fichier, dans le formulaire et la macro dans a été repéré
Quelques descriptifs :
  • Onglet Fichier : cette onglet décrit les paramètres de chaque fichier devant être traité. Ces paramètres seront utiles pour la macro.
    • Type de fichier servira utile lors de la création des tableaux de bords
    • Onglet : Sélection du format de fichier en fonction du ou des checkbox coché sur l'UserForm_Traitement
      (pour notre exemple, les données de l'onglet RHS seront utilisées.)
    • Répertoire : emplacement du fichier a paramétrer manuellement
    • nom fichier : partie du nom du fichier
  • onglet FMT servira (pour l'ensemble des traitements de fichier) d'onglet de traitement
    • la première ligne est le contenu d'une partie de la colonne A
    • les lignes suivantes sont issues du traitement de formatage de la macro
  • Userform_Traitement
    • un checkbox est repérè (pour notre exemple)
  • Bouton parcourir (private sub CmdBtn_Parcourir_Click)
    • un repère est présent '\\\\ pour l'exemple ////
Fonctionnement , à l'exécution :
  • La feuille UserForm_Traitement apparait,
  • après avoir renseigner la période(peu importe la période), les chkbox de la liste de fichiers à traiter s'activent,
  • cocher RHS Groupés (RHS Grp) pour l'exemple
  • puis appuyer sur parcourir, vous arriverez à la procédure private sub CmdBtn_Parcourir_Click (j'ai posé un pas à pas qui correspondant à la case à coché ci-dessus)
    • a ce moment je passe les paramètres type fichier, onglet, répertoire et nom_fichier à la procédure Sub Fichier_A_Traiter
    • et là je bloque :mad:
En espérant avoir été le plus précis possible.
En vous remerciant
 

Pièces jointes

  • SSR Format Fichier v0.5.xlsm
    160.1 KB · Affichages: 6

danielco

XLDnaute Accro
Un exemple, sans utiliser le type de fichier :

VB:
Sub Fichier_A_traiter(Type_Fichier As String, Onglet As String, Répertoire As String, Nom_Fichier As String)
  'proc Fichier_A_traiter
  Dim Enrgt As String, Ligne As Long, Col As Long
  Close #1
  Open repertoire & "\" & Nom_Fichier For Input As #1
  Do While Not EOF(1)
    'Traitement d'une ligne
    Line Input #1, Enrgt
    Col = 1
    Ligne = Ligne + 1
    'recopie du n° de version
    Cells(Ligne, 1) = Mid(Enrgt, 11, 3)
  Loop
  Close #1
End Sub

Les valeurs "11" et "3" peuvent être lues depuis le fichier Structure et mises dans des variables.

Daniel
 

eriiic

XLDnaute Barbatruc
Bonjour,

c'est ce qu'on appelle un fichier à accès aléatoire.
(aléatoire dans le sens où vu qu'on connait la longueur des enregistrements qui sont fixes, on peut se rendre directement à celui voulu sans tout lire)

Un exemple en écriture :
VB:
Type tNom
    nom As String * 15
    date As String * 10
    somme As String * 10
End Type

Sub test()
    Dim numfich As Integer, lig As Long, col As Long
    Dim nom As tNom
    numfich = FreeFile
    Open "D:\tmp\test.txt" For Random As #numfich Len = Len(nom)
    For lig = 2 To 3
        nom.nom = Cells(lig, 1)
        nom.date = Cells(lig, 2)
        nom.somme = Cells(lig, 3)
        Put numfich, lig, nom ' lig = n° d'enregistrement
    Next lig
    Close #numfich
End Sub
Pour la lecture c'est Get : https://docs.microsoft.com/fr-fr/office/vba/language/reference/user-interface-help/get-statement
eric

PS : dans l'exemple j'avais typé les champs, mais ça peut être un tableau de x éléments par enregistrement.
 

Pièces jointes

  • 1569756694775.png
    1569756694775.png
    19.6 KB · Affichages: 18
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 886
Membres
101 830
dernier inscrit
sonia poulaert