1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| Option Explicit
Sub Test()
Dim Channel
Dim r
Dim RecordRow As String
Dim Record
Application.ScreenUpdating = False
Channel = Freefile ' On récupère le numéro du premier canal disponible pour la lecture du fichier
Open "C:\data\Temp\courant3.qif" For Input As Channel ' On ouvre le fichier
Line Input #Channel, r ' On lit la première ligne, celle qui renseigne le type de fichier. On ne l'utilise pas mais on doit la lire car l'avancement dans le fichier est séquentiel, ligne par ligne
Do
RecordRow = "" ' On vide la variable qui va recevoir les valeurs par concaténation
Line Input #Channel, r 'On lit la ligne courante du fichier QIF
Do While r <> "^" ' On boucle tant qu'on n'est pas sur la ligne de fin d'enregistrement
RecordRow = RecordRow & r & "||" 'On colle la ligne et on y ajoute le séparateur
Line Input #Channel, r ' On lit la nouvelle ligne courante (chaque lecture avance le pointeur d'une ligne)
Loop
RecordRow = Left(RecordRow, Len(RecordRow) - 2) ' On supprime le dernier séparateur
Record = Split(RecordRow, "||") ' On crée le tableau des valeurs de l'enregistrement que l'on vient de lire
TransferRow Record ' On transfère l'enregistrement dans le tableau structuré de stockage
Loop While Not EOF(Channel) ' On boucle jusqu'à la fin du fichier
Close Channel ' on ferme le canal de lecture
Application.ScreenUpdating = True
End Sub
Sub TransferRow(r)
Dim Target As Range
Dim Index As Long
Dim i As Long
Dim Value
Set Target = Range("t_Data").ListObject.ListRows.Add().Range ' On crée une nouvelle ligne dans le tableau structuré et on en récupère la plage
For i = 0 To UBound(r) ' on boucle sur les valeurs de l'enregistrement passé en argument de type Array
Index = Application.Match(Left(r(i), 1), Range("t_Codes[initiale]"), 0) ' On recherche le numéro de la colonne dans laquelle placer la valeur (Match = EQUIV)
Value = Right(r(i), Len(r(i)) - 1) ' On supprime le premier caractère de typage
Select Case Range("t_Codes[Type]")(Index).Value ' Selon la nature de la valeur, on la prépare pour la placer dans la cellule
Case "N"
Value = Replace(Value, ",", "") 'Suppression du séparateur de milliers
Case "D"
Value = DateSerial(Right(Value, 4), Left(Value, 2), Mid(Value, 4, 2)) ' conversion de la date mm/dd/yyyy en dd/mm/yyyy
End Select
Target(1, Index).Value = Value ' On pousse la valeur dans la cellule
Next
End Sub |
Partager