Emulation de la fonction replace() de vba6

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 425 fois - Téléchargée 43 fois

Contenu du snippet

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

A voir également

Ajouter un commentaire

Commentaires

cs_bigane
Messages postés
46
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
12 février 2004
-
Voici une ligne qu'il faut ajouter en fin de la fonction :

If Start > 1 Then Replace = Mid$(Replace, Start)

J'ai retrouvé cette idée sur un site étranger :
http://www.programmazione.it/index.php?entity=etip&idTip=110&idArea=1

C'est marrant, on a toujours réinventé la roue, sa fonction replace me semble correcte, a voir ...
cs_bigane
Messages postés
46
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
12 février 2004
-
Fais attention, j'ai remarqué que ce source ne fonctionne pas correctement avec la version Replace() de VB6. J'ai commis une erreur de retranscription, donc tu dois utiliser la fonction replace() que j'ai postée sur vbfrance.
A+
cs_jenial
Messages postés
10
Date d'inscription
mercredi 5 juin 2002
Statut
Membre
Dernière intervention
23 juillet 2004
-
Merci bcp,

C trop fort pile poil ce que je cherchais
cs_bigane
Messages postés
46
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
12 février 2004
-
Le 29-07-2002, j'ai corrigé un bug.
Do While start And count
remplacé par
Do While (start<>0) And (count<>0)

Le source est à jour.

Bigane
cs_Alain Proviste
Messages postés
910
Date d'inscription
jeudi 26 juillet 2001
Statut
Modérateur
Dernière intervention
1 février 2015
1 -
Bon code.

Pour info il existe aussi
http://www.vbfrance.com/article.asp?Val=3008
pour ceux qui utilisent vb5

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.