Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

VBA function trim

pepsister

XLDnaute Junior
Bonjour,

Dans mon fichier excel j'ai beaucoup de cases avec des espaces avant, après et entre les mots. Je souhaite donc supprimer les espaces inutiles. Pour cela j'ai écris le code suivant:
For Each Cell In ActiveSheet.UsedRange
Cell.Value = Application.WorksheetFunction.Trim(Cell.Value)
Next

Tout fonctionne bien sauf pour certaines valeurs. Je m'explique, dans ma dernière colonne j'ai des nombres décimaux. Pour certains d'entre eux (ceux supérieurs à 100 je crois) la fonction rajoute des espaces.
ex: dans ma cellule j'ai la valeur 209,5790116 il me le transforme en 2 095 790 116. Je ne comprends pas pourquoi il fait ca. Si dans ma feuille excel je teste la formule équivalente =SUPPRESPACE(A1) ca fonctionne très bien. Pourquoi il fait ca? Comment résoudre ce problème?

Merci,
 

Pierrot93

XLDnaute Barbatruc
Re : VBA function trim

Bonjour,

essaye peut être la fonction native vba pluôt que la fonction de feuille de calcul :

Code:
Cell.Value = Trim(Cell.Value)
bon après midi
@+

Edition : bonjour Papou
 
Dernière édition:

vmatthieu

XLDnaute Occasionnel
Re : VBA function trim

bonjour le forum, pepsister,
je n'ai pas trouvé la solution mais de ce que je comprends de "trim" cela supprime les espaces an début de chaines ou en fin de chaine mais pas au milieu à mois que je comprenne mal.
Pour les espaces du milieu de chaine tu peux utiliser un code de ce type
Dim cell As Range
Dim d As String
Application.ScreenUpdating = False
Set cell = Range("a1:aa200")

For Each c In cell
d = c.Value
For i = 1 To Len(d)
d = c.Value
g = Mid(d, i, 1)
If Mid(d, i, 1) = " " Then
c.Value = Mid(d, 1, i - 1) & Mid(d, i + 1)
i = i - 1
Else
End If
Next i
Next c
Application.ScreenUpdating = True

c'est un peu long (15 secondes pour 20000 espaces à supprimer sur 4000 cellules) mais bon...
bonne soirée
 

Modeste geedee

XLDnaute Barbatruc
Re : VBA function trim

Bonsour®
de ce que je comprends de "trim" cela supprime les espaces an début de chaines ou en fin de chaine mais pas au milieu à mois que je comprenne mal.

il faut distinguer la fonction VBA Trim (suppression devant et derrière)
de la fonction TRIM de feuille de calcul (Application.WorkSheetFunction.Trim) qui correspond elle effectivement à SUPRRESPACE (suppression devant, derrière et redondants internes)
 

pepsister

XLDnaute Junior
Re : VBA function trim

En effet geedee, la fonction trim vba correspond à un supprespace. Ca supprime donc bien les espaces avant et après le mot de la cellule ainsi que tous espaces redondants dans la cellule.
Mon problème dans mon cas c'est qu'il transforme mon nombre à virgule par un nombre entier avec séparateur de milliers.
Exemple: considérons les crochets comme un espace. J'ai dans ma cellule:
[]259.1452
avec la fonction trim vba il le transforme en:
2 591 452
alors que je voudrais simplement le même nombre en enlevant l'espace devant:
259.1452
 

Pierrot93

XLDnaute Barbatruc
Re : VBA function trim

bonjour,
essaye peut être la conversion de données, exemple ci-dessous pour la colonne A
Code:
Columns(1).TextToColumns Destination:=Range("A1"), DecimalSeparator:="."
bonne journée
@+
 

Modeste geedee

XLDnaute Barbatruc
Re : VBA function trim

Bonsour®
vérifier la concordance ou non des options EXCEL avec les paramètres système (Windows)

ne pas oublier non plus que le code de l'espace insécable (séparateur de millier) n'est pas CAR(32) mais CAR(160) !!!
 

Pièces jointes

  • Capture2.JPG
    56.6 KB · Affichages: 230
  • Capture1.jpg
    69.2 KB · Affichages: 204
  • Capture2.JPG
    56.6 KB · Affichages: 258
  • Capture1.jpg
    69.2 KB · Affichages: 224
  • Capture2.JPG
    56.6 KB · Affichages: 273
  • Capture1.jpg
    69.2 KB · Affichages: 208
Dernière édition:
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…