Instruction Trim(Cells qui fonctionne neuf fois sur dix

Bonjour,

J'ai un problème avec l'instruction Trim incluse dans le code du fichier ci-joint ; une fois sur dix, elle ne fonctionne pas !

Dans cet exemple, le texte en A4 comporte un espace derrière. Lorsque je lance la macro Tri_NOMS par le bouton en place, la macro Supprimer_espaces est appelée à son tour. L'instruction placée là, Tableau_A(j) = Trim(Cells(j, 1)), ne fonctionne alors pas.

Avez-vous une idée pourquoi ?

2copie.zip (14.99 Ko)

Bonjour,

Ton espace n'ets pas vraiment un espace.

For j = 2 To i
        Tableau_A(j) = Replace(Cells(j, 1), Chr(160), vbNullString)
Next j

Re,

Un petit complément.

For j = 2 To i
        x = Replace(Cells(j, 1), Chr(160), vbNullString)
        x = WorksheetFunction.Trim(x)
        Tableau_A(j) = x
    Next j

Bonsoir à tous,

L'idéal serait de mettre le tout sous la forme d'une fonction :

Function cleaner$(chaine$)
cleaner = Application.Trim(Application.Clean(Replace(chaine, Chr(160), "")))
End Function

Pour effacer les espaces insécables, les 32 premiers caractères non imprimables et les espaces indésirables (à partir de la fonction de feuille, qui contrairement à la fonction VBA supprime aussi les espaces excédentaires en milieu de chaine). Je crois qu'il reste quelques caractères non imprimables, auquel cas, il faudrait les identifier et les supprimer ainsi :

Function cleaner$(chaine$)

dim toclean(), i%

toclean = array(chr(127), chr(129), chr(141), chr(143), chr(144), chr(157), chr(160))

for i = lbound(toclean) to ubound(toclean)
    chaine = replace(chaine, toclean(i), "")
next i

cleaner = application.trim(application.clean(chaine))

end function

La fonction serait alors utilisée dans le code (mais également sur feuille si besoin) :

For j = 2 To i
        Tableau_A(j) = cleaner(cells(j, 1))
Next j

Cdlt,

Bonjour Jean-Eric, bonjour 3GB,

Merci infiniment pour vos réponses qui correspondent toutes deux parfaitement à mon attente.

Je choisis la proposition de 3GB qui semble prévenir des soucis que je pourrais avoir dans le futur, bien que le cas paraisse très peu probable.

Très belle fin de journée.

Bonjour,

A tout hasard, regarde l'aide Excel pour Trim.

Il y a de mémoire une différence entre la fonction de feuille de calcul et la fonction en VBA !?

Cordialement.

Bonjour à tous les 2,

@Jean-Eric : Oui, Application.Trim (ou worksheetfunction.Trim) est l'équivalent de SUPPRESPACE et permet de supprimer les espaces "inutiles" (en remplaçant tous les groupes d'espaces par un espace unique et en supprimant les espaces en début et fin de chaine) tandis que Trim (la fonction de VBA) n'est que la combinaison de Ltrim et RTrim.

Et application.clean (que j'ai découverte tout récemment grâce à h2so4) est la fonction EPURAGE d'excel.

Cdlt,

Merci infiniment pour toutes ces explications complémentaires

Rechercher des sujets similaires à "instruction trim cells qui fonctionne neuf fois dix"