Comme d'autres l'ont souligné, chaque concaténation de chaîne dans VB allouera une nouvelle chaîne, puis copier les données sur puis désallouer la fois originale possible. Dans une boucle, cela peut causer des problèmes.
Pour contourner cela, vous pouvez créer une simple classe StringBuilder comme celui-ci:
Option Explicit
Private data As String
Private allocLen As Long
Private currentPos As Long
Public Function Text() As String
Text = Left(data, currentPos)
End Function
Public Function Length() As Long
Length = currentPos
End Function
Public Sub Add(s As String)
Dim newLen As Long
newLen = Len(s)
If ((currentPos + newLen) > allocLen) Then
data = data & Space((currentPos + newLen))
allocLen = Len(data)
End If
Mid(data, currentPos + 1, newLen) = s
currentPos = currentPos + newLen
End Sub
Private Sub Class_Initialize()
data = Space(10240)
allocLen = Len(data)
currentPos = 1
End Sub
Cette classe réduira au minimum le nombre d'allocations de chaîne en forçant la chaîne à construire avec des espaces, puis en écrasant le espaces au besoin. Il réaffecte à peu près le double de sa taille lorsqu'il constate qu'il n'a pas assez d'espace pré-initialisé. La méthode Text retournera la partie de la chaîne réellement utilisée.
Pourriez-vous coller le code autour de la ligne qui renvoie l'erreur? – Robit
Les déclarations des variables impliquées peuvent aussi être utiles. – Robit