52 votes

Comment supprimer un saut de ligne dans une chaîne de caractères

Je veux supprimer le saut de ligne de la chaîne si ma chaîne se termine par un saut de ligne.

Sub linebreak(myString)
    If Len(myString) <> 0 Then
        If Right$(myString, 1) = vbCrLf Or Right$(myString, 1) = vbNewLine Then myString = Left$(myString, Len(myString) - 1)
    End If
End Sub

2 votes

vbCrLf y vbNewLine sont en fait constitués de deux caractères, ce qui signifie qu'ils doivent être remplacés par Right$(myString, 2)

1 votes

Niraj : Chris a tout à fait raison. @Chris : +1, veuillez l'afficher comme réponse :)

98voto

Moosli Points 2337

Résumé

str = Replace(str, vbLf, "")

Ce code supprime tous les sauts de ligne du code

si vous voulez que le dernier soit éliminé :

If Right(str, 1) = vbLf Then str = Left(str, Len(str) - 1)

est la façon dont vous avez essayé OK.


Informations générales

saut de ligne = ASCII 10 , saut de page = ASCII 12 y retour chariot = ASCII 13 . Nous voyons ici clairement ce que nous savons tous : le PC vient de la machine à écrire (électrique).

vbLf es Chr (10) et signifie que le curseur saute une ligne plus bas (machine à écrire : tourner le rouleau)

vbCr es Chr (13) et signifie que le curseur saute au début (machine à écrire : retirer le rouleau)

En DOS un saut de ligne est toujours VBCrLf o Chr (13) & Chr (10) dans les fichiers de toute façon, mais aussi, par exemple, dans les zones de texte en VB.

Dans un Cellule Excel En revanche, un retour à la ligne n'est que VBLf , la deuxième ligne commence alors à la première position, même en l'absence de vbCr . Avec vbCrLf puis approfondir d'une cellule .

Tout dépend donc de l'endroit où vous lisez et obtenez votre ficelle. si vous voulez supprimer tous les vbLf ( Chr(10) ) et vbCr ( Char(13) ) dans votre chaîne de caractères, vous pouvez procéder comme suit :

strText = Replace(Replace(strText, Chr(10), ""), Chr(13), "")

Si vous ne voulez retirer que le dernier, vous pouvez tester et procéder de la manière suivante :

If Right(str, 1) = vbLf or Right(str, 1) = vbCr Then str = Left(str, Len(str) - 1)

36voto

chris neilsen Points 21247

vbCrLf y vbNewLine sont en fait constitués de deux caractères, ce qui signifie qu'ils doivent être remplacés par Right$(myString, 2)

Sub linebreak(myString)
    If Len(myString) <> 0 Then
        If Right$(myString, 2) = vbCrLf Or Right$(myString, 2) = vbNewLine Then 
            myString = Left$(myString, Len(myString) - 2)
        End If
    End If
End Sub

1 votes

"vbCrLf et vbNewLine ont en réalité deux caractères de long". ... Wow ! Je code avec VBA depuis un certain temps et je n'avais jamais remarqué cela. Je viens de trouver quelques bogues dans mes propres applications à ce sujet. Je vous remercie.

10voto

joe Points 79

Essayez avec la ligne suivante :

CleanString = Application.WorksheetFunction.Clean(MyString)

2 votes

Vous êtes le vrai MVP

8voto

Matt Donnan Points 4745

Comme vous utilisez Excel, vous n'avez pas besoin de VBA pour y parvenir. Vous pouvez simplement utiliser la fonction intégrée "Clean()", qui supprime les retours de chariot, les sauts de ligne, etc :

=Clean(MyString)

2 votes

Cela permet de supprimer todos non imprimables, pas de sauts de ligne à la fin.

0 votes

@chrisneilsen Mes excuses, je pensais qu'Excel représentait ces caractères comme un symbole carré, et que la méthode de nettoyage les supprimait ?

0 votes

Woo ! Je comprends qu'il s'agit d'une option nucléaire. Mais dans mon cas, cela a fonctionné pour se débarrasser de ce dernier symbole !!! :D beau travail ! (voir les commentaires de @Moosli pour mon premier commentaire)

5voto

Rocketq Points 354

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X