Sans API, et oui, ca m'arrive parfois de ne pas en utiliser :p
ici, une simple classe permettant de concaténer des chaines de caractères rapidement (très rapidement, en comparaison avec un simple & )
ne pas utiliser pour chaque concaténation que vous ferez, bien évidemment, mais pour a partit d'un nombre raisonnable de concaténation, le gain est sensible : la mémoire allouée n'a pas besoin d'être contigüe en mémoire, moins de données sont déplacées, etc
Source / Exemple :
Option Explicit
Private mxsValues() As String
Private mnCount As Long
Private mnCapacity As Long
Private mnLength As Long
'# Nombre de cases que l'on ajoute au tableau lorsqu'il est trop petit
Private Const BLOCKSIZE As Long = 250
'# Méthode qui permet l'ajout d'éléments dans le tampon
Public Sub Append(ByVal szString As String)
Dim nLength As Long
nLength = Len(szString)
If nLength Then
If mnCount = mnCapacity Then
'# Le tableau est trop petit...
'# On agrandit sa taille de BLOCKSIZE
ResizeArray
End If
mnLength = mnLength + nLength
'# On ajoute notre chaine dans le tableau
mxsValues(mnCount) = szString
'# Et on incrémente le compteur
mnCount = mnCount + 1
End If
End Sub
'# Propriété par défault
'# on recolle simplement les morceaux...
Public Property Get Value() As String
Attribute Value.VB_UserMemId = 0
Attribute Value.VB_MemberFlags = "200"
Value = Join(mxsValues, vbNullString)
End Property
'# On vide le buffer
Public Sub Clear()
mnCount = 0
mnLength = 0
mnCapacity = 0
Erase mxsValues
End Sub
Private Sub ResizeArray()
ReDim Preserve mxsValues(mnCapacity + BLOCKSIZE - 1) As String
mnCapacity = mnCapacity + BLOCKSIZE
End Sub
Public Property Get Length() As Long
Length = mnLength
End Property
Private Sub Class_Terminate()
Me.Clear
End Sub
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.