ALTERNATIVE À LA FUNCTION VBA OU VB REPLACE (JUSQU'À 10 FOIS PLUS VITE, SANS AP

Signaler
Messages postés
291
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
13 mars 2015
-
Messages postés
12
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
21 janvier 2013
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/51268-alternative-a-la-function-vba-ou-vb-replace-jusqu-a-10-fois-plus-vite-sans-api

Messages postés
12
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
21 janvier 2013

L'instruction :
ReDim Preserve alHits(0 To lSize) As Long
prend environ 40 % du temps d'exécution. Pourquoi ne pas calculer la taille de ce tableau au préalable et n'effectuer le dimensionnement qu'une seule fois. Cela oblige à dupliquer quelques instructions mais s'avère payant. J'arrive à un rapport de 300 ms pour 16000 ms sur le même exemple.
Toujours impressionné par le travail de passionnés anonymes.
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
Ouais, ben, si il y avait que ça... CompMode vaut quoi ? Le typage de Textin, SeachStr, Replacement sont variant... et pis, aucune optimisation... Toutes les options de Replace ne sont pas présente. Sans compter le genre de truc qui sert à rien : If IsNull(Replacement) Then Replacement = ""... Utiliser IsMissing, ou mieux une valeur par défaut nulle dans les paramètres... etc.

J'ai testé (enfin, si on peut dire) cette proposition, et, j'ai arrêté tout sauvagement VB6, faute de patience...

=

Sinon, le code de VICOSTA est optimisable déjà en utilisant les mêmes types d'optimisation que dans StrRapelace... Entre autre : utiliser LenB, InstrB...

Amicalement,
Us.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
Pointer As Long
Messages postés
1
Date d'inscription
jeudi 31 décembre 2009
Statut
Membre
Dernière intervention
15 février 2010

Ou alors, il y a aussi :

Function ReplaceStr(TextIn, SearchStr, Replacement)
If IsNull(SearchStr) Or SearchStr = "" Then
ReplaceStr = TextIn
Exit Function
End If
On Error GoTo 0
If IsNull(Replacement) Then Replacement = ""
Dim WorkText As String, Pointer As Double
If IsNull(TextIn) Then
ReplaceStr = Null
Else
WorkText = TextIn
Pointer = InStr(1, WorkText, SearchStr)
Do While Pointer > 0
WorkText = left(WorkText, Pointer - 1) & Replacement & Mid(WorkText, Pointer + Len(SearchStr))
Pointer = InStr(Pointer + Len(Replacement), WorkText, SearchStr, CompMode)
Loop
ReplaceStr = WorkText
End If
End Function
Afficher les 13 commentaires