Salut,
Effectivement j'avais oublié de dire que Replace n'existe pas sous XL97. Voici le code testé sous XL97 et XL2003, avec un bogue corrigé dans repzero . Tu peux aussi utilisé en fonction de feuille de calcul Repzero pour tester une cellule. ex en B1 =repzero(a1).
Sub Princ()
Dim Res, T, I&
T = Range([A1], [A65536].End(xlUp)).Value ' à adapter
For I = 1 To UBound(T)
Res = RepZero(T(I, 1))
T(I, 1) = IIf(Res <> False, Res, "Erreur")
Next I
[B1].Resize(UBound(T)) = T
End Sub
Public Function RepZero(ByVal Chaine$)
Dim T, I As Byte, J As Byte, Temp$
Chaine = ReplaceZon97(Chaine, " ", "")
T = SplitZon97(Chaine, ".")
If UBound(T) <> 3 Then RepZero = False: Exit Function
For I = 0 To 3
If IsNumeric(T(I)) Then
While InStr(T(I), 0) >= 1 And Len(T(I)) > 1
T(I) = ReplaceZon97(T(I), 0, "", 1, 1)
Wend
J = J + 1
Temp = Temp & T(I) & "."
End If
Next I
RepZero = IIf(J = 4, Left(Temp, Len(Temp) - 1), False)
End Function
Function ReplaceZon97$(ByVal Chaine$, Ch$, ChRemp$, Optional Dep& = 1, _
Optional Compte& = -1, Optional Comp As Byte = 0)
Do
Dep = InStr(Dep, Chaine, Ch, Comp)
On Error Resume Next
Chaine = Left(Chaine, Dep - 1) & ChRemp & Right(Chaine, Len(Chaine) - (Dep + Len(Ch) - 1))
On Error GoTo 0
Compte = Compte - 1
Loop While Dep > 0 And Compte <> 0
ReplaceZon97 = Chaine
End Function
Function SplitZon97(ByVal Ch$, Sep$)
Dim Pos&, PosS&, T(), I&
Pos = 1
Do
PosS = InStr(Pos, Ch, Sep)
ReDim Preserve T(I)
On Error Resume Next
T(I) = Mid(Ch, Pos, PosS - Pos)
If Err <> 0 Then
Pos = Pos - 1
T(I) = Right(Ch, Len(Ch) - Pos)
Exit Do
End If
Pos = PosS + 1
I = I + 1
Loop While PosS > 0
SplitZon97 = T
End Function
Pour ce qui est de toutes les versions, j'espère que tu n'utilises pas Excel 4 ou 7 encore...voire sous MacOS.
Si tu rencontre des difficultés à le mettre en place, joins un petit fichier exemple.
A+++