begin process at 2008 09 05 20:48:35
1 237 501 membres
441 nouveaux aujourd'hui
14 313 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

EMULATION DE LA FONCTION REPLACE() DE VBA6


Information sur la source

Catégorie :Texte Niveau : Initié Date de création : 20/07/2002 Date de mise à jour : 31/07/2002 17:44:20 Vu : 4 148

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

Description

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

  • ' ----------------------------------------------------------------------------
  • ' 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
' ----------------------------------------------------------------------------
' 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&lt;&gt;0) And (count&lt;&gt;0)

Bigane    
  • signaler à un administrateur
    Commentaire de bigane le 20/07/2002 12:47:13

    Oups... affichage pourri, je le remet en ligne sur 80 colonnes dans quelques minutes...

  • signaler à un administrateur
    Commentaire de bigane le 20/07/2002 12:50:58

    Oups... affichage pourri, je le remet en ligne sur 80 colonnes dans quelques minutes...

  • signaler à un administrateur
    Commentaire de Alain Proviste le 20/07/2002 21:59:34 administrateur CS

    Bon code.

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

  • signaler à un administrateur
    Commentaire de bigane le 29/07/2002 14:35:08

    Le 29-07-2002, j'ai corrigé un bug.
    Do While start And count
    remplacé par
    Do While (start&lt;&gt;0) And (count&lt;&gt;0)

    Le source est à jour.

    Bigane

  • signaler à un administrateur
    Commentaire de jenial le 13/08/2003 10:29:08

    Merci bcp,

    C trop fort pile poil ce que je cherchais

  • signaler à un administrateur
    Commentaire de bigane le 13/08/2003 13:12:04

    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+

  • signaler à un administrateur
    Commentaire de bigane le 12/02/2004 22:02:45

    Voici une ligne qu'il faut ajouter en fin de la fonction :

    If Start &gt; 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 ...

Ajouter un commentaire

Pub



Appels d'offres

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Boutique

Boutique de goodies CodeS-SourceS