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
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