La fonction Replace() n'est pas disponible sous toutes les versions de VBA, en voici une émulation qui permet d'utiliser un code VB6 sous Access 97 par exemple.
Le code est rapide, mais il peut être accéléré si on retire les options non utilisées.
bigane
Source / Exemple :
' ----------------------------------------------------------------------------
' Description
' Renvoie une chaîne dans laquelle une sous-chaîne spécifiée a été
' remplacée plusieurs fois par une autre sous-chaîne.
' Syntaxe
' Replace(expression, find, replacewith[, start[, count[, compare]]])
'
' expression
' Expression de chaîne contenant une sous-chaîne à remplacer.
' find
' Sous-chaîne recherchée.
' replacewith
' Sous-chaîne de remplacement.
' start (Facultatif)
' Position dans l'argument expression où la recherche de sous-chaîne
' doit commencer. Si elle est omise, la position 1 est prise par défaut.
' count (Facultatif)
' Nombre de remplacements de sous-chaîne à effectuer. Si cette valeur
' est omise, la valeur par défaut -1, qui signifie tous les remplacements
' possibles, est employée.
' compare (Facultatif)
' Valeur numérique indiquant le type de comparaison à utiliser lors de
' l'évaluation des sous-chaînes. L'argument compare peut être omis ou
' prendre la valeur 0, ou 1.
' Indiquez la valeur 0 pour effectuer une comparaison binaire.
' Indiquez la valeur 1 pour effectuer une comparaison de texte,
' sans différenciation des majuscules et des minuscules.
'
' NOTES : vbDatabaseCompare n'est pas émulé.
' Version: 1.0 - 20/07/2002
' Auteur : Bigane@tiscalinet.ch
' ----------------------------------------------------------------------------
Public Function Replace( _
ByVal expression As String, _
ByVal find As String, _
ByVal replacewith As String, _
Optional ByVal start As Long = 1, _
Optional ByVal count As Long = -1, _
Optional ByVal compare As Long)
Dim lenFind As Long
Dim lenNext As Long
Dim lenReplace As Long
Dim lenExpression As Long
'Emulation de Const vbUseCompareOption = -1
If IsEmpty(compare) Or _
((compare <> vbBinaryCompare) And (compare <> vbTextCompare)) Then
compare = IIf("A" = "a", vbTextCompare, vbBinaryCompare)
End If
If start > Len(expression) Then
Replace = vbNullString
Else
If Not ((start < 1) Or _
(start > Len(expression)) Or (find = vbNullString)) Then
lenFind = Len(find)
lenReplace = Len(replacewith)
start = InStr(start, expression, find, compare)
Do While (start<>0) And (count<>0)
lenExpression = Len(expression)
lenNext = start + lenFind
expression = Mid$(expression, 1, start - 1) & replacewith & _
IIf(lenNext <= lenExpression, _
Mid$(expression, lenNext), vbNullString)
count = count - 1
start = InStr(start + lenReplace, expression, find, compare)
Loop
End If
Replace = expression
End If
End Function
Conclusion :
L'émulation est presque identique à l'original, si vous trouvez des bugs ou des différences,
n'hésitez pas...
Historique:
Correction d'un bug le 29-07-2002:
Do While start And count
remplacé par
Do While (start<>0) And (count<>0)
Bigane
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.