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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

Dernière édition:
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 😡
En espérant avoir été le plus précis possible.
En vous remerciant
 

Pièces jointes

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
 
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: 20
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour