Bonjour,
Teste ce qui suit. La proc effectue une recherche avec Find et selon la taille de la plage, ça peu prendre un peu de temps car il y a toute une manipulation à faire :
Sub Test()
Dim Plage As Range
Dim Cel As Range
Dim Texte As String
Dim Nombre As Single
Dim ValCellule As Single
Dim NBEspace As String
Dim Adr As String
'nombre devant être retranché...
Nombre = 25
'la plage est définie en colonne A depuis A1
With Worksheets("Feuille1")
Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
End With
'commence la recherche
Set Cel = Plage.Find("<ele>" & "*", , xlValues)
If Not Cel Is Nothing Then
Adr = Cel.Address
Do
'récupère le nombre d'espaces qui préfixe
NBEspace = InStr(Cel.Value, "<") - 1
'récupère la valeur numérique
Texte = Replace(Trim(Cel.Value), "<ele>", "")
Texte = Replace(Texte, "</ele>", "")
'remplace le point par le séparateur décimal régional
Texte = Replace(Texte, ".", Format(0, "."))
'affecte la valeur en Single et effectue la soustraction
ValCellule = CSng(Texte)
ValCellule = ValCellule - Nombre
'puis reconstruit
Cel.Value = Space(NBEspace) & "<ele>" & Replace(ValCellule, Format(0, "."), ".") & "</ele>"
Set Cel = Plage.FindNext(Cel)
Loop While Adr <> Cel.Address
End If
End Sub
Hervé.