Réduire les espaces dans une chaîne de caractères

Notamment après l’import de données, on se retrouve parfois avec de multiples espaces entre les mots. Voici une fonction qui supprime efficacement ces espaces multiples en un.

La fonction en VBA

Public Function ReduireEspaces(ByVal Chaine As String) As String
   Const DoubleEspace As String = "  "
   Const Espace As String = " "
 
   While InStr(1, Chaine, DoubleEspace, vbBinaryCompare) > 0
      Chaine = Replace(Chaine, DoubleEspace, Espace, , , vbBinaryCompare)
   Wend
   ReduireEspaces = Chaine
End Function

A chaque passe de la boucle, un espace double est réduit en un.
Par exemple, pour réduire 3 espaces contigus en un, la boucle est exécutée deux fois. Dans la première boucle, 3 espaces contigus sont vus comme 2 espaces + 1 espace, d’où la réduction à 1 espace + 1 espace. La deuxième boucle trouve ensuite deux espaces contigus qui sont alors réduits en un.

Pour rappel, on supprime les espaces en début de chaîne grâce à la fonction LTrim(), les espaces en fin de chaîne par RTrim() et l’ensemble par Trim() (ou LTrim$, RTrim$, Trim$ pour une chaîne de type String).

Exemple d’utilisation
Dans la fenêtre Exécution de VBE :

'Attendu: Un espace sinon rien!
?ReduireEspaces("Un     espace     sinon              rien!")

 
@+

Philippe

Laisser un commentaire