re
et bien le replace c'est bien mais le instr doit être double mid,instr,instrrev,etc.. n'accepte pas le joker
donc allons y pour le replace
fonction tenant compte des espaces
'si les espaces sont a prendre en compte
Function NoDoBen(v As String)
Dim x1%, x2%
x1 = InStr(1, v, " do")
x2 = InStr(x1, v, "ben ")
If x1 + x2 <> x1 Then NoDoBen = Replace(v, Mid(v, x1, x2 + 4 - x1), " ")
End Function
fonction ne tenant pas compte des espaces
'si les espaces ne sont pas a prendre encompte
Function NoDoBen2(v As String)
Dim x1%, x2%
x1 = InStr(1, v, "do")
x2 = InStr(x1, v, "ben")
If x1 + x2 <> x1 Then NoDoBen2 = Application.Trim(Replace(v, Mid(v, x1, x2 + 3 - x1), " "))
End Function
on teste avec une sub
Sub test()
MsgBox "NoDoBen : " & NoDoBen("bla blabla do%fgben jfg turi") & vbCrLf & _
"NoDoBen2 : " & NoDoBen2("bla blabla do%fgben jfg turi")
End Sub
resultat
tu voulais un replace ben voila
on observe que quand on prend pas en compte les espaces il nous reste un espaces en trop
et si on prend en compte les espaces et qu'il y en a pas ben walouh c'est perdu
donc au mieux dans le pire
on garde celle sans espaces mais on fait un trim globale Application
Function NoDoBen2(v As String)
Dim x1%, x2%
x1 = InStr(1, v, "do")
x2 = InStr(x1, v, "ben")
If x1 + x2 <> x1 Then NoDoBen2 = Application.Trim(Replace(v, Mid(v, x1, x2 + 3 - x1), " "))
End Function
cela dit si plusieurs espaces consécutifs dans la chaine sont volontairement placé et bien c'est perdu
cela dit maintenant tu a le choix au mieux dans le pire
patricktoulon