Function MultiReplace(ByVal Expression As String, aFind() As String, aReplace() As String) As String
Dim i&, lPos&, UboundReplace%, sBuffer$
' tableaux dimentionnés?
If (Not (Not aFind)) = 0 Then MultiReplace = Expression: Exit Function
If (Not (Not aReplace)) = 0 Then UboundReplace = -1 Else UboundReplace = UBound(aReplace)
' chaque élément du tableau à chercher
If UboundReplace = -1 Then
For i = LBound(aFind) To UBound(aFind)
Call MonoReplace(Expression, aFind(i), vbNullString)
Next i
ElseIf UboundReplace >= UBound(aFind) Then
For i = LBound(aFind) To UBound(aFind)
Call MonoReplace(Expression, aFind(i), aReplace(i))
Next i
Else
For i = LBound(aFind) To UBound(aFind)
Call MonoReplace(Expression, aFind(i), aReplace(UBound(aReplace)))
Next i
End If
MultiReplace = Expression
End Function
Sub MonoReplace(ByRef Expression As String, sFind As String, sReplace As String)
Dim lPos&
Do
lPos = InStr(1, Expression, sFind)
If lPos > 0 Then Expression = Left$(Expression, lPos - 1) & sReplace & Right$(Expression, Len(Expression) - lPos - Len(sFind) + 1)
Loop Until lPos = 0
End Sub
' EXEMPLE D'UTILISATION
Private Sub Form_Load()
Const TOTREAT As String = "Dans le pays %%countryselected, '%%pseudo' a déclaré la guerre ce %%date à %%time (en %%countryselected) avec son arme favorite : %%extraweapon."
Dim aArgs(4) As String, aStr1(4) As String, aStr2(0) As String
aArgs(0) = "%%countryselected"
aArgs(1) = "%%pseudo"
aArgs(2) = "%%date"
aArgs(3) = "%%time"
aArgs(4) = "%%extraweapon"
aStr1(0) = "France"
aStr1(1) = "piti Codyx"
aStr1(2) = Format$(Date, "DDDD DD MMM YYYY")
aStr1(3) = CStr(Time)
aStr1(4) = "la bible de Visual Basic ; bien lourde mais relativement digeste"
aStr2(0) = "générique"
MsgBox TOTREAT & vbCrLf & vbCrLf & MultiReplace(TOTREAT, aArgs, aStr1)
MsgBox TOTREAT & vbCrLf & vbCrLf & MultiReplace(TOTREAT, aArgs, aStr2)
End Sub