Worksheetfunction ??? Comment faire un trim sous VBA - Newbie inside.

  • Initiateur de la discussion Alex
  • Date de début
A

Alex

Guest
Bonjour,

J'ai lu qu'on pouvait utiliser la plupart des fonctions excel sous VBA grace à la fonction worksheetfunction mais je n'y arrive pas.

Je créé des macros grace à l'enregistreur pour faire des choses très simples du genre copier-coller, effacer, etc ...

Je souhaiterais programmer une macro pour faire un "trim" dans une plage de données (appelons cette plage "a").

J'ai essayé worksheetfunction.trim("a) mais cela n'a rien donné (utilisation un peu naive, je sais !).

Quelqu'un pourrait-il m'expliquer comment faire ?

Merci d'avance.
 
A

Alex

Guest
Salut,

Merci pour ta reponse mais je ne comprends pas commet faire.
Je suis vraiment debutant et je n'ai personne autour demoi qui puisse m'aider.

J'ai essaye ce que tu as ecris ainsi que d'adapter le'exemple inclus dans l'aide VBA mais il ne se passe rien (meme pas un message d'erreur).

J'ai Excel en langue Anglaise

Je ne veux pas abuser mais pourrais-tu STP m'ecrire les lignes de code (si ce n'est pas trop long).
 
T

Ti

Guest
essaie cette procédure :

Sub Test()
MsgBox Trim(" a ")
End Sub

elle te renverra simplement "a", débarassé de ses espaces avant et arrière. Ensuite, c'est à toi de décider à quoi pourra te servir cette fonction !
 
@

@+Thierry

Guest
Bonjour Alex, Ti, le Forum

"Up" !!, hum !! Je ne vois pas ce que çà fait ici ?


Si tu es débutant, il faut que tu commence par des choses simples, comme par exemple faire une boucle "For / Next"

Essaie ceci dans un module d'un Classeur Vierge
Sub Demo1()
Dim i As Byte
For i = 1 To 100
Cells(i, 1) = i
Next
End Sub

Cette macro écrira de 1 à 100 (i) dans les cellules A1 à A100 (Cells(Row = 1, Colonne = 1 / soit "A")

Maintenant il te faut intégrer ta Fonction Trim...
Sub Demo2()
Dim i As Byte
For i = 1 To 100
Cells(i, 1) = Trim(Cells(i, 1))
Next
End Sub


Cette Macro fera la même chose que la première au niveau de la "surface" (Plage de Cellules) traitée, mais y incorporera la Fonction Trim...

En fait il y a des boucles plus puissantes que le For / Next, par exemple le For Each / Next
Sub Demo3()
Dim Cell As Range
For Each Cell In Range("A1:A100")
Cell.Value = Trim(Cell.Value)
Next Cell
End Sub

Cette Macro Démo3, fait la même chose que la Démo2, mais en agissant sur Chaque Cellule de la Plage "A1:A100", ce qui est différent.


Maintenant on peut jouer "dynamiquement" aussi si on ne connait pas la taille de la "Surface" (Plage de Cellules) à traiter :
Sub Demo4()
Dim Cell As Range
For Each Cell In Range("A1:A" & Range("A65536").End(xlUp).Row)
Cell.Value = Trim(Cell.Value)
Next Cell
End Sub

Cette Macro Démo4, avec "Range("A1:A" & Range("A65536").EndxlUp).Row)" définit la plage en partant de "A1" jusqu'à la première cellule non vide rencontrée en partant du Bas de la feuille "A65536"...

Voilà en espèrant t'avoir apporté quelques éclaircissements quant aux possibilités de VBA ...

On peut aussi faire des choses bien plus rapides sur des grosses "Surfaces" en passant par un Tableau, mais c'est plus compliqué pour débuter :

Sub Demo5()
Dim Tablo As Variant
Dim Plage As Range
Dim i As Integer, J As Integer

Set Plage = Range("A1:A" & Range("A65536").End(xlUp).Row)

Tablo = Plage.Value
For i = 1 To Plage.Count
Tablo(i, 1) = Trim(Tablo(i, 1))
Next i
Range("A1:A" & Range("A65536").End(xlUp).Row).Value = Tablo
End Sub

Enfin Bonne découverte de VBA
@+Thierry
 
A

Alex

Guest
Merci beaucoup Thierry.

Je n'ai pas vraiment le temps de voir cela tout de suite (je suis au boulot !) mais je suis sur de trouver mon bonheur dans une de tes solutions.

Merci d'avoir passé du temps à écrire tout cela.


Alex
 

Discussions similaires

Statistiques des forums

Discussions
312 502
Messages
2 089 049
Membres
104 012
dernier inscrit
baffyt2