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
 

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
    Capture2.JPG
    56.6 KB · Affichages: 229
  • Capture1.jpg
    Capture1.jpg
    69.2 KB · Affichages: 203
  • Capture2.JPG
    Capture2.JPG
    56.6 KB · Affichages: 257
  • Capture1.jpg
    Capture1.jpg
    69.2 KB · Affichages: 223
  • Capture2.JPG
    Capture2.JPG
    56.6 KB · Affichages: 272
  • Capture1.jpg
    Capture1.jpg
    69.2 KB · Affichages: 207
Dernière édition:

Discussions similaires

Réponses
10
Affichages
366
Réponses
6
Affichages
380

Statistiques des forums

Discussions
312 239
Messages
2 086 508
Membres
103 238
dernier inscrit
ds776001