Lit le fichier et renvoit toutes les infos dans une structure.
Tester sur les fichiers OFX de Dexia Belgique et Fortis Belgique. N'hésitez pas à commenter ou m'envoyer d'autres fichiers OFX (tronquer bien sûr).
C'est ma première source, alors soyez indulgent :-)
Source / Exemple :
'------------------------------------
'Fichiers OFX
'------------------------------------
Private Structure FichierOFX
Dim ACCTID As String 'numero de compte
Dim CURDEF As String 'devise des extraits
Dim BANKID As String 'nom de la banque
Dim TRNTYPE As String 'type debit/credit
Dim DTPOSTED As Date 'date du mouvement
Dim TRNAMT As Double 'montant
Dim FITID As String 'numero ID
Dim CHECKNUM As String ' numero extrait
Dim NAME As String 'nom opération
Dim MEMO As String ' détail de l'opération (communication)
'<TRNTYPE>CREDIT</TRNTYPE><DTPOSTED>20100625</DTPOSTED><TRNAMT>-174,72</TRNAMT><FITID>0398</FITID><CHECKNUM>00004.0398</CHECKNUM><NAME> COLRUYT SERAING SERAING</NAME><MEMO>ACHAT MISTER CASH AVEC CARTE N° 6703 0507 3822 0500 - COCCHIARO SANDRINE LE 25/06 19:16 COLRUYT SERAING SERAING REF. : 6667013438538 VAL. 25-06 </MEMO></STMTTRN><STMTTRN><TRNTYPE>CRED
End Structure
Private Function LireOFX(ByVal Filename As String) As FichierOFX()
Dim resultat() As FichierOFX
Dim c As Integer = -1 'compteur de résultat
Dim txt As String = My.Computer.FileSystem.ReadAllText(Filename)
'séparation par ligne d'opération séparée par <STMTTRN>
Dim temp() As String = Split(txt, "<STMTTRN>")
'la ligne 0 comprend les valeurs générales
Dim ACCTID As Integer = temp(0).IndexOf("<ACCTID>")
Dim compte As String = temp(0).Substring(ACCTID + 8)
Dim length As Integer = compte.IndexOf("<")
compte = compte.Substring(1, length - 1)
Dim CURDEF As Integer = temp(0).IndexOf("<CURDEF>")
Dim devise As String = temp(0).Substring(CURDEF + 8)
length = devise.IndexOf("<")
devise = devise.Substring(1, length - 1)
Dim BkId As Integer = temp(0).IndexOf("<BANKID>")
Dim bankId As String
Dim bq As String = temp(0).Substring(BkId + 8)
length = bq.IndexOf("<")
bq = bq.Substring(1, length - 1)
'traitement de chaque ligne/mouvement
For i = 1 To temp.Count - 1
c = c + 1
ReDim Preserve resultat(c)
Dim tempo As String = temp(i)
Dim champs As Integer 'ou demarre le champs
Dim longg As Integer 'ou s'arrete le champs
Dim donnee As String 'le champs
resultat(c).ACCTID = compte
resultat(c).CURDEF = devise
resultat(c).BANKID = bq
'champs date
champs = tempo.IndexOf("<DTPOSTED>")
donnee = tempo.Substring(champs + 10)
'donnee = Mid(tempo, champs + 10)
donnee = donnee.Substring(1, 8)
donnee = donnee.Substring(7, 2) & "/" & donnee.Substring(5, 2) & "/" & donnee.Substring(1, 4)
resultat(c).DTPOSTED = CDate(donnee)
donnee = tempo
'champ numero
champs = tempo.IndexOf("<CHECKNUM>")
donnee = tempo.Substring(champs + 10)
longg = donnee.Substring("<") - 1
donnee = donnee.Substring(1, longg)
resultat(c).CHECKNUM = donnee
'champ numero
champs = tempo.IndexOf("<FITID>")
donnee = tempo.Substring(champs + 7)
longg = donnee.IndexOf("<") - 1
donnee = donnee.Substring(1, longg)
resultat(c).FITID = donnee
'champ TRNAMT montant
champs = tempo.IndexOf("<TRNAMT>")
donnee = tempo.Substring(champs + 8)
longg = donnee.IndexOf("<") - 1
donnee = donnee.Substring(1, longg)
resultat(c).TRNAMT = CDbl(donnee)
'champs NAME
champs = tempo.IndexOf("<NAME>")
donnee = tempo.Substring(champs + 6)
longg = donnee.IndexOf("<") - 1
donnee = donnee.Substring(1, longg)
resultat(c).NAME = donnee.Trim()
'champ TRNTYPE
champs = tempo.IndexOf("<TRNTYPE>")
donnee = tempo.Substring(champs + 9)
longg = donnee.IndexOf("<") - 1
donnee = donnee.Substring(1, longg)
resultat(c).TRNTYPE = donnee
'champ MEMO
champs = tempo.IndexOf("<MEMO>")
donnee = tempo.Substring(champs + 6)
longg = donnee.IndexOf("<") - 1
donnee = donnee.Substring(1, longg)
resultat(c).MEMO = donnee.Trim()
Next
Return resultat
End Function
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.