Macro de copie d\'un fichier txt sur excel

chef_1

XLDnaute Nouveau
Macro de copie d'un fichier txt sur excel

Bonjour à tous! ;)

Je cherche à programmer une petite macro qui me permettrais de copier des données extraites d'un fichier texte provenant d'une d'une base de données dans une feulle excel. La taille des fichier texte étant varirable.A noter que chaque données dans ce fichier texte est délimité par un ';'.
Voilà ce que donne la macro que j'ai faite:
Malheureusement, elle plante, et là, je sèche... :( Help me please!!! :)

Sub CommandButton1_Click()

Dim nomchemin As String
Dim nomfichier As String
nomfichier = fichier.Value

Workbooks.OpenText Filename:=nomfichier, Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:=False _
, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 5), Array(2, 1), _
Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), _
Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array( _
16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1), Array(21, 1), Array(22, 1), _
Array(23, 1), Array(24, 1), Array(25, 1), Array(26, 1), Array(27, 1), Array(28, 1), Array( _
29, 1), Array(30, 1), Array(31, 1), Array(32, 1), Array(33, 1), Array(34, 1), Array(35, 1), _
Array(36, 1), Array(37, 1), Array(38, 1), Array(39, 1), Array(40, 1), Array(41, 1), Array( _
42, 1), Array(43, 1), Array(44, 1), Array(45, 1), Array(46, 1), Array(47, 1), Array(48, 1), _
Array(49, 1), Array(50, 1), Array(51, 1), Array(52, 1), Array(53, 1), Array(54, 1), Array( _
55, 1), Array(56, 1), Array(57, 1)), TrailingMinusNumbers:=True

Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Windows('destination.xls').Activate
Sheets('Feuil1').Select
Range('A1').Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Sheets('Feuil2').Select
End Sub


;)

Message édité par: chef_1, à: 09/09/2005 15:34

Message édité par: chef_1, à: 09/09/2005 15:36

Message édité par: chef_1, à: 09/09/2005 15:39
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re:Macro de copie d'un fichier txt sur excel

Bonjour Chef ! , le Forum

Moi je passerais plutôt par un Statement Open qui t'enverrait directement les données dans la Feuille Excel Voulue(ici 'TXT_Collecting')

Option Explicit

Const TheFullPath As String = 'C:\\Documents and Settings\\te\\My Documents\\TXT_Timed_Import.txt' '<<< A Adapter
Const TheSheetName As String = 'TXT_Collecting'

Sub ImportTXT()
Dim WSImport As Worksheet
Dim Record As String
Dim Container As Variant
Dim i As Integer, ii As Byte, iii As Byte

i = 1

Set WSImport = Worksheets(TheSheetName)

Open TheFullPath For Input As #1

   
Do While Not EOF(1)
        Line
Input #1, Record
       
        Container = Split(Record, Chr(59))
           
For ii = 1 To UBound(Container) + 1
                iii = ii - 1
                WSImport.Cells(i, ii) = Container(iii)
           
Next ii
    i = i + 1
   
Loop
Close #1

End Sub


Bon Aprèm
[ol]@+Thierry[/ol]

Message édité par: _Thierry, à: 09/09/2005 16:27
 

chef_1

XLDnaute Nouveau
Re:Macro de copie d'un fichier txt sur excel

Super merci!
Ta solution est vraiment plus modelable !
Par contre, comment prendre en compte les retour chariot ?
Car la fonction recopie sur une seul ligne... :(
Plus généralement, comment choisir les lignes/colonnes ou seront copiées les données?

Merci encore ! ;)
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re:Macro de copie d'un fichier txt sur excel

Bonjour Chef, le Forum

Je ne comprends pas clairement :
'Car la fonction recopie sur une seul ligne...'

En fait pou ta compréhension, si tu utilises cet algo, voici son fonctionnement :

Il va incrémenter par boucles ces Variables.
i = Variable Représentant la Ligne
ii = Variable Représentant la Colonne
iii = Variable Représenant le Numéro du Champs du TXT

Il va tourner sur deux Boucles :
1) Do While Not EOF(1) (tant qu'il y a des lignes dans el TXT (End Of File) (Donc, sous entendu, le Retour Charriot)
2) For ii = 1 To UBound(Container) + 1 (Tant qu'il y a des champs dans la Ligne du TXT (Record Splitté sur Char(59) =';')

Voilà c'esr simple. Une petite mofification serait de passer 'iii' en Integer plutôt que Byte (Voir même en Long si nécessaire, avec à ce moment là 'i' aussi)

Bonne journée et Week End
[ol]@+Thierry[/ol]

PS Sinon il faudrait peut-être voir un exemplaire du TXT car ce serait un problème de sa structure.
 

Discussions similaires

Statistiques des forums

Discussions
312 165
Messages
2 085 882
Membres
103 009
dernier inscrit
dede972