J’ai un souci pour vous envoyer un fichier exemple car je n’arrive pas à descendre en dessous des 50ko. Je vous fournis tout de même le fichier à importer et le code initial.
L’exemple de MichelXld est absolument stupéfiant en termes de différence de rapidité !!! Je pensais pouvoir diviser le temps d’exécution par 2, voire 4, mais là !!! Ce qui me prenait parfois 40 à 120 secondes se fait en 1 seconde.
Cependant cela me cause certains problèmes lorsque j’utilise cette méthode dans mon code :
1/ Mon fichier compte 7 colonnes, mais je ne veux pas importer la première (ce point n’est pas très grave car je peux m’arranger en la cachant)
2/ Ce qui me gêne le plus c’est que chaque fichier texte à importer correspond à un onglet. Quand j’en importe un la première fois, tout vas bien, par contre les fois suivantes, je n’importe que le delta (c'est-à-dire les n dernières lignes du fichier, car celui-ci a été mis à jour entretemps et est trié en ordre inverse). Il y a-t-il un moyen pour ne pas importer les n premières lignes du fichier ?
3/ Les lignes du fichier sont triés par date et dans l’ordre inverse de ce que je veux obtenir dans excel. Il y a-t-il un moyen de les importer à partir du bas dans excel et par conséquent donc dans l’ « ordre de lecture du fichier » ?
4/ Vu la rapidité d’exécution, je suis tenté d’utiliser cette méthode pour créer le fichier d’import lui-même, ma source initiale est beaucoup plus complexe. Actuellement je génère 250 fichiers comme ceux que je vous ai fournis à partir de la source initiale. Est-il possible d’écrire des Recordset dans un fichier texte ?
Ci dessous mon code initial (il est moins d’actualité maintenant, mais permet de mieux cerner le problème)
Public Const First_line As Byte = 10
Public Const First_cell As String = 'A10'
Public Sub rempli_cours(sh As Byte, nb_sauts As Integer, nb_import As Integer)
Dim F_ISIN As Integer, i As Integer, Num_line As Integer, Tmp_line As Integer
Dim str As String, ligne() As String
Application.ScreenUpdating = False
Sheets(sh).Rows(First_line & ':' & First_line + nb_import - 1).Insert Shift:=xlDown
'Insère le nombre de lignes nécessaires pour l'import des cotations à partir de la ligne 10 (First_line)
F_ISIN = FreeFile
Open ActiveWorkbook.Path & '\\' & Sheets(sh).Range('C2').Value & '.txt' For Input As #F_ISIN
‘Saute les lignes à ne pas importer
For i = 1 To nb_sauts
Line Input #F_ISIN, str
Next i
Num_line = First_line + nb_import 'numéro de la ligne suivant la dernière ligne à importer
With Sheets(sh)
'importe toutes les lignes du fichier en commençant par la première soit la dernière sur excel
For i = 1 To nb_import
Line Input #F_ISIN, str
ligne = Split(str, ';', 7) 'renseigne le tableau ligne
Tmp_line = Num_line - i
.Cells(Tmp_line, 1).Value = CDate(Format(ligne(1), 'dd/mm/yy'))
.Cells(Tmp_line, 2).Value = ligne(2)
.Cells(Tmp_line, 3).Value = ligne(3)
.Cells(Tmp_line, 4).Value = ligne(4)
.Cells(Tmp_line, 5).Value = ligne(5)
.Cells(Tmp_line, 6).Value = ligne(6)
Next i
End With
Close #F_ISIN
'Met en forme les données insérées en fonction de la ligne suivant la dernière ligne importée (elle a été pré formaté)
Range(Cells(First_line + nb_import, 1), Cells(First_line + nb_import, 6)).Select
Selection.Copy
Range(Cells(First_line, 1), Cells(First_line + nb_import - 1, 6)).Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
'remplace les virgules par des points sur les lignes importés (Le séparateur décimal est le '.' sur mon PC)
'Je pense que cette ligne est à mettre en commentaire si ce n'est pas le cas chez vous
Selection.Replace What:=',', Replacement:='.', LookAt:=xlPart
'Copie les formules en face des données importées à partir de la ligne suivant la dernière ligne importée
Range(Cells(First_line + nb_import, 8), Cells(First_line + nb_import, 50)). _
Copy (Sheets(sh).Range(Cells(First_line, 8), Cells(First_line + nb_import - 1, 50)))
Sheets(sh).Range('F2').Select 'Supprime visuellemnent à l'écran la dernière sélection
Application.ScreenUpdating = True
End Sub
[file name=FR0000120537.zip size=6459]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/FR0000120537.zip[/file] [file name=FR0000120537.zip size=6459]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/FR0000120537.zip[/file]