Macro d'importation fichier texte en référence à un fichier pour délimiter les champs

Samferrir72

XLDnaute Nouveau
Bonjour,

Mon problème est le suivant :

je souhaite importer sous Excel un fichier .txt de longueur fixe tout en parcourant une table de paramètre permettant de délimiter les champs.
Cette table de paramètre est enregistrée dans une feuille de mon fichier Excel.

A oui pourquoi est ce que je souhaite faire ça : une fois que la moulinette fonctionnera je pourrais ajouter aisément d'autres tables de paramètre et importer d'autres fichiers. De plus ce sont des fichiers avec près de 170 colonnes....

voir les explications détaillées ci dessous

Merci beaucoup,

Sam

J'ai créé la macro qui permet d'importer le fichier et de parcourir la table de paramètre de la première ligne à la dernière ligne mais je ne vois pas comment intégrer les valeurs au paramètres des différents champs en bouclant dans la propriété FieldInfo:=
Voici le code généré lors de l'enregistrement de la macro d'import du fichier sans faire référence à la table de paramètre mais en utilisant l'utilitaire de délimitation des champs présent sous Excel
ChDir "C:\Users\NOM\Desktop"
Workbooks.OpenText _
Filename:="C:\Users\NOM\Desktop\nom_fichier.TXT", _
Origin:=xlMSDOS, _
StartRow:=1, _
DataType:=xlFixedWidth, _
FieldInfo:= Array(Array(0, 2), Array(9, 2), Array(18, 2), Array(26, 2), Array(34, 2), Array(37, 2), Array(40, 2), Array(43, 2), _
TrailingMinusNumbers:=True
Le code lié à la table de paramètre que je parcours
On Error Resume Next
Dim derniereligne As String
Dim x As String
Dim y As Long
Dim i As Integer
Sheets("paramètres_import").Select
col = "'paramètres_import'!B"
derniereligne = Range(col & "65536").End(xlUp).Row
For i = 2 To derniereligne
x = "'paramètres_import'!E" 'colonne de la table de paramètre ou est présente la valeur de la longueur permettant de délimiter le champ
y = Range(x & i).Value 'valeur longueur de chaque champ pour délimiter le fichier
Z = 2 'champ au format texte
Next

J'aimerais à la place d'écrire le code comme suit :
FieldInfo:= Array(Array(0, 2), Array(9, 2), Array(18, 2), Array(26, 2), Array(34, 2), Array(37, 2), Array(40, 2), Array(43, 2), _

Faire référence à la table de paramètre et incrémenter les valeurs retournées en bouclant sur chaque ligne de la table
Ce qui donnerais en simplifié...
For i = 2 To derniereligne
x = "'paramètres_import'!D" 'colonne coupure de la table
y = Range(x & i).Value
Z = 2
Next

Et renvoyer dans la zone FieldInfo:= à fin de chaque boucle les valeurs de chacuns des champs trouvés dans la table de paramètre, ce qui donnerait FieldInfo:= Array(Array(y1, z), Array(y2, z), Array(y3, z)....

J'espère que je suis clair

Exemple de la table de paramètre
Libellé-----------Positions---Longueur----Coupure
Chp 1 --------------1----------9-----------0
Chp 2 --------------10----------9----------9
Chp 3--------------19----------8----------18
 

MJ13

XLDnaute Barbatruc
Re : Macro d'importation fichier texte en référence à un fichier pour délimiter les c

Bonjour Sam

Peut-être qu'avec un fichier .txt et .xls avec ce que tu veux, ce serait plus simple pour que quelqu'un puisse t'aider :).
 

Samferrir72

XLDnaute Nouveau
Re : Macro d'importation fichier texte en référence à un fichier pour délimiter les c

Bonjour

Merci mais je n'arrivais pas ce matin à charger une pièce jointe. J'avais une erreur lorsque j'ajoutais une pièce jointe.

donc c'est bon ci joint le fichier Excel d'import avec la macro et la table de paramètre et le fichier .txt pour exemple

merci pour ta réponse
j'ai mis à jour un peu le code avec des conditions complémentaires lors de l'import

Sam
 

Pièces jointes

  • Fichier_import.zip
    470 bytes · Affichages: 66
  • macro import fichier DEMO.xls
    60.5 KB · Affichages: 170

MJ13

XLDnaute Barbatruc
Re : Macro d'importation fichier texte en référence à un fichier pour délimiter les c

Re

Merci pour le fichier qui permet en général d'avoir une bonne base pour commencer.

Mais je n'ai pas trop le temps en ce moment.

A suivre....
 

Discussions similaires

Statistiques des forums

Discussions
312 069
Messages
2 085 041
Membres
102 764
dernier inscrit
nestu