La fonction Clean peut être appelée de cette manière à partir de VBA :
Range("A1").Value = Application.WorksheetFunction.Clean(Range("A1"))
Toutefois, tel qu'il est écrit ici La fonction CLEAN a été conçue pour supprimer du texte les 32 premiers caractères non imprimables du code ASCII à 7 bits (valeurs 0 à 31). Dans le jeu de caractères Unicode, il existe d'autres caractères non imprimables (valeurs 127, 129, 141, 143, 144 et 157). En soi, la fonction CLEAN ne supprime pas ces caractères non imprimables supplémentaires.
Rick Rothstein ont écrit un code pour gérer cette situation ici de cette manière :
Function CleanTrim(ByVal S As String, Optional ConvertNonBreakingSpace As Boolean = True) As String
Dim X As Long, CodesToClean As Variant
CodesToClean = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, _
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 127, 129, 141, 143, 144, 157)
If ConvertNonBreakingSpace Then S = Replace(S, Chr(160), " ")
For X = LBound(CodesToClean) To UBound(CodesToClean)
If InStr(S, Chr(CodesToClean(X))) Then S = Replace(S, Chr(CodesToClean(X)), "")
Next
CleanTrim = WorksheetFunction.Trim(S)
End Function
2 votes
vbCrLf
yvbNewLine
sont en fait constitués de deux caractères, ce qui signifie qu'ils doivent être remplacés parRight$(myString, 2)
1 votes
Niraj : Chris a tout à fait raison. @Chris : +1, veuillez l'afficher comme réponse :)