Emulation de la fonction replace() de vba6

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 999 fois - Téléchargée 45 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
12 févr. 2004 à 22:02
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
13 août 2003 à 13:12
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
13 août 2003 à 10:29
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
29 juil. 2002 à 14:35
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 908 Date d'inscription jeudi 26 juillet 2001 Statut Modérateur Dernière intervention 1 février 2015 2
20 juil. 2002 à 21:59
Bon code.

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

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.