Bonjour,

Je rencontre le problème suivant avec l'une de mes routines visant à stocker un fichier en mémoire pour effectuer diverses opérations dessus.

Le fichier en question pèse environ 500Mo avec quelques 12 000 lignes.

La routine s'effectue sans problèmes, le fichier est stocké dans une variable puis découpé par ligne dans un tableau. j'arrive à afficher les éléments de ce tableau.

Seulement, au moment de quitter la routine (avant (ou après?) le end sub) j'obtiens plusieurs fois le message "out of memory".

voici la fonction pour charger le fichier dans une variable "string":

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Function ReadFileToBuffer(ByVal szFileName As String, _
                                 ByRef errCode As Integer, _
                                 ByRef errString As String) As String
    Dim f As Integer
    Dim buffer As String
 
    ' trappe les erreurs
    On Error GoTo ReadFileToBuffer_ERR
 
    ' Ouverture du fichier en 'Binary'
    f = FreeFile
 
    Open szFileName For Binary As #f
'        ' préallocation d'un buffer à la taille du fichier
          buffer = Space$(LOF(f))
'        ' lecture complète du fichier
          Get #f, , buffer
    Close #f
    ReadFileToBuffer = buffer
 
ReadFileToBuffer_END:
    Exit Function
 
ReadFileToBuffer_ERR:
    ' Gestion d'erreur
    ReadFileToBuffer = ""
    errCode = Err.number
    errString = Err.Description
    Resume ReadFileToBuffer_END
End Function
J'utilise ensuite cette fonction dans le code suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub LoadResultFile()
 
'declaration
Dim fileName As String
Dim Results() As String, tempResult As String
Dim errCode As Integer, errString As String
 
 
'get filename and store it
fileName = pickUpFilename("Results", "*.dat;*.txt")             'simple fonction pour récupérer le chemin complet du fichier
tempResult = ReadFileToBuffer(fileName, errCode, errString)
If errCode = 0 Then
    Results = Split(tempResult, vbCrLf)
    MsgBox Results(0)    'cette commande passe sans soucis!!!
    MsgBox Ubound(Results)        'renvoie bien 12000
Else
    MsgBox "Problem in reading file!" & vbCrLf & "error " & errCode & ": " & errString, vbCritical
End If
 
End Sub

Avez-vous une idée concernant les causes de l'erreur (à priori, il n'y a pas de soucis pour charger l'ensemble en mémoire, mais plutôt au moment de la libération de mémoire faites par le compilo)?
Si oui, savez-vous comment y remédier?

Merci de m'avoir lu.