OVH Cloud OVH Cloud

Effacer espaces inutiles dans colonne (mais + rapide)

10 réponses
Avatar
Christophe Joly
Bonsoir:

Pour effacer les espaces inutiles dans une colonne j'utilise le code VBA
suivant mais c'est très lent (environ 20 secondes)
For Each cell In Range("A1:A150")
cell.Value = WorksheetFunction.Trim(cell.Value)
Next

Est ce que le recalcul 100% en est la cause?
Est-il possible d'améliorer le code pour que la fonction TRIM s'applique à
la plage A1:A150 en une seule fois plutot que cellule par cellule?


Sinon, est t-il possible de faire en sorte que la fonction TRIM s'applique
directement au moment ou une valeur est saisie dans une cellule de la
colonne A?

Merci.

Christophe



For Each cell In Range("A1:A150")
cell.Value = WorksheetFunction.Trim(cell.Value)
Next

10 réponses

Avatar
j
si tu n'as que des espaces en début ou fin de cellules, tu peux utiliser
Columns(1).Replace " ", ""
tous les espaces sont supprimés d'un coup

http://jacxl.free.fr


"Christophe Joly" a écrit dans le message de news:
uO23n4W$
Bonsoir:

Pour effacer les espaces inutiles dans une colonne j'utilise le code VBA
suivant mais c'est très lent (environ 20 secondes)
For Each cell In Range("A1:A150")
cell.Value = WorksheetFunction.Trim(cell.Value)
Next

Est ce que le recalcul 100% en est la cause?
Est-il possible d'améliorer le code pour que la fonction TRIM s'applique à
la plage A1:A150 en une seule fois plutot que cellule par cellule?


Sinon, est t-il possible de faire en sorte que la fonction TRIM s'applique
directement au moment ou une valeur est saisie dans une cellule de la
colonne A?

Merci.

Christophe



For Each cell In Range("A1:A150")
cell.Value = WorksheetFunction.Trim(cell.Value)
Next




Avatar
Christophe Joly
Bonsoir:

Je te remercie mais en fait mon objectif principal est bien de supprimer les
espaces en début et fin de cellules.

Sinceres salutations,

Christophe
"" a écrit dans le message de
news:403fb04a$0$21672$
si tu n'as que des espaces en début ou fin de cellules, tu peux utiliser
Columns(1).Replace " ", ""
tous les espaces sont supprimés d'un coup

http://jacxl.free.fr


"Christophe Joly" a écrit dans le message de news:
uO23n4W$
Bonsoir:

Pour effacer les espaces inutiles dans une colonne j'utilise le code VBA
suivant mais c'est très lent (environ 20 secondes)
For Each cell In Range("A1:A150")
cell.Value = WorksheetFunction.Trim(cell.Value)
Next

Est ce que le recalcul 100% en est la cause?
Est-il possible d'améliorer le code pour que la fonction TRIM s'applique
à


la plage A1:A150 en une seule fois plutot que cellule par cellule?


Sinon, est t-il possible de faire en sorte que la fonction TRIM
s'applique


directement au moment ou une valeur est saisie dans une cellule de la
colonne A?

Merci.

Christophe



For Each cell In Range("A1:A150")
cell.Value = WorksheetFunction.Trim(cell.Value)
Next








Avatar
sabatier
je ne comprends pas le "mais" puisque ce propose est bien ce que tu
sembles vouloir faire, christophe, non?
jps

Christophe Joly a écrit:
Bonsoir:

Je te remercie mais en fait mon objectif principal est bien de supprimer les
espaces en début et fin de cellules.

Sinceres salutations,

Christophe
"" a écrit dans le message de
news:403fb04a$0$21672$

si tu n'as que des espaces en début ou fin de cellules, tu peux utiliser
Columns(1).Replace " ", ""
tous les espaces sont supprimés d'un coup

http://jacxl.free.fr


"Christophe Joly" a écrit dans le message de news:
uO23n4W$

Bonsoir:

Pour effacer les espaces inutiles dans une colonne j'utilise le code VBA
suivant mais c'est très lent (environ 20 secondes)
For Each cell In Range("A1:A150")
cell.Value = WorksheetFunction.Trim(cell.Value)
Next

Est ce que le recalcul 100% en est la cause?
Est-il possible d'améliorer le code pour que la fonction TRIM s'applique


à


la plage A1:A150 en une seule fois plutot que cellule par cellule?


Sinon, est t-il possible de faire en sorte que la fonction TRIM


s'applique


directement au moment ou une valeur est saisie dans une cellule de la
colonne A?

Merci.

Christophe



For Each cell In Range("A1:A150")
cell.Value = WorksheetFunction.Trim(cell.Value)
Next












Avatar
j
mais non jps, retourne dans ta barrique, ce que je proposais c'est
d'éradiquer TOUS les espaces, et c'est pas ça que souhaite christophe


"sabatier" a écrit dans le message de news:

je ne comprends pas le "mais" puisque ce propose est bien ce que tu
sembles vouloir faire, christophe, non?
jps

Christophe Joly a écrit:
Bonsoir:

Je te remercie mais en fait mon objectif principal est bien de supprimer
les


espaces en début et fin de cellules.

Sinceres salutations,

Christophe
"" a écrit dans le message de
news:403fb04a$0$21672$

si tu n'as que des espaces en début ou fin de cellules, tu peux utiliser
Columns(1).Replace " ", ""
tous les espaces sont supprimés d'un coup

http://jacxl.free.fr


"Christophe Joly" a écrit dans le message de news:
uO23n4W$

Bonsoir:

Pour effacer les espaces inutiles dans une colonne j'utilise le code
VBA




suivant mais c'est très lent (environ 20 secondes)
For Each cell In Range("A1:A150")
cell.Value = WorksheetFunction.Trim(cell.Value)
Next

Est ce que le recalcul 100% en est la cause?
Est-il possible d'améliorer le code pour que la fonction TRIM
s'applique





à


la plage A1:A150 en une seule fois plutot que cellule par cellule?


Sinon, est t-il possible de faire en sorte que la fonction TRIM


s'applique


directement au moment ou une valeur est saisie dans une cellule de la
colonne A?

Merci.

Christophe



For Each cell In Range("A1:A150")
cell.Value = WorksheetFunction.Trim(cell.Value)
Next















Avatar
sabatier
comprends plus que couic...
mais avant de retourner dans mon tonneau, tel diogène, puis-je ajouter que :
toi, ? tu écris :
"si tu n'as que des espaces en début ou fin de cellules, tu peux utiliser"
et christophe dit qu'il veut :
"mon objectif principal est bien de supprimer les espaces en début et
fin de cellules"

serait-ce le "ou" et le "et" qui ferait la différence?
sur ce, je referme le couvercle
jps

a écrit:
mais non jps, retourne dans ta barrique, ce que je proposais c'est
d'éradiquer TOUS les espaces, et c'est pas ça que souhaite christophe


"sabatier" a écrit dans le message de news:


je ne comprends pas le "mais" puisque ce propose est bien ce que tu
sembles vouloir faire, christophe, non?
jps

Christophe Joly a écrit:

Bonsoir:

Je te remercie mais en fait mon objectif principal est bien de supprimer


les


espaces en début et fin de cellules.

Sinceres salutations,

Christophe
"" a écrit dans le message de
news:403fb04a$0$21672$


si tu n'as que des espaces en début ou fin de cellules, tu peux utiliser
Columns(1).Replace " ", ""
tous les espaces sont supprimés d'un coup

http://jacxl.free.fr


"Christophe Joly" a écrit dans le message de news:
uO23n4W$


Bonsoir:

Pour effacer les espaces inutiles dans une colonne j'utilise le code


VBA




suivant mais c'est très lent (environ 20 secondes)
For Each cell In Range("A1:A150")
cell.Value = WorksheetFunction.Trim(cell.Value)
Next

Est ce que le recalcul 100% en est la cause?
Est-il possible d'améliorer le code pour que la fonction TRIM


s'applique




à


la plage A1:A150 en une seule fois plutot que cellule par cellule?


Sinon, est t-il possible de faire en sorte que la fonction TRIM


s'applique



directement au moment ou une valeur est saisie dans une cellule de la
colonne A?

Merci.

Christophe



For Each cell In Range("A1:A150")
cell.Value = WorksheetFunction.Trim(cell.Value)
Next

















Avatar
Alain CROS
Bonjour.

Pour le 1 :

Sub SupEspace()
Dim Plg
Plg = Range("A1:A150")
Range("A1:A150") = Application.Trim(Plg)
End Sub

Pour le 2 :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("A1:A150")) Is Nothing Then
Application.EnableEvents = False
Target = Application.Trim(Target)
Application.EnableEvents = True
End If
End Sub

Alain CROS.

"Christophe Joly" a écrit dans le message de news: uO23n4W$
Bonsoir:

Pour effacer les espaces inutiles dans une colonne j'utilise le code VBA
suivant mais c'est très lent (environ 20 secondes)
For Each cell In Range("A1:A150")
cell.Value = WorksheetFunction.Trim(cell.Value)
Next

Est ce que le recalcul 100% en est la cause?
Est-il possible d'améliorer le code pour que la fonction TRIM s'applique à
la plage A1:A150 en une seule fois plutot que cellule par cellule?


Sinon, est t-il possible de faire en sorte que la fonction TRIM s'applique
directement au moment ou une valeur est saisie dans une cellule de la
colonne A?

Merci.

Christophe



For Each cell In Range("A1:A150")
cell.Value = WorksheetFunction.Trim(cell.Value)
Next




Avatar
Michel Gaboly
Bonjour Jean-Paul,

Je pense que c'est qui s'est mal exprimé : il a écrit "si tu n'as que
des espaces en début et fin ...", mais voulait probablement dire :

Si tu n'as des espaces qu'en début et fin ...


Si ce n'est pas le cas, le dialogue n'a effectivement aucun sens, comme
tu le relèves brillamment ;-)))


Pour en revenir au plan technique, si Trim donne le bon résultat
mais est anormalement long à cause des recalculs à chaque passage
dans la boucle, la solution est probablement :

Application.Calculate = xlManual
For Each cell In Range("A1:A150")
cell.Value = WorksheetFunction.Trim(cell.Value)
Next
Application.Calculate = xlAutomatic

ou pour le cas (assez rare) où le calcul n'est pas toujours en automatique
(Automatique ou Automatique sauf Tables selon les circonstances)

Dim Statut As Integer
Statut = Application.Calculation
Application.Calculation = Statut
For Each cell In Range("A1:A150")
cell.Value = WorksheetFunction.Trim(cell.Value)
Next
Application.Calculation = Statut
End Sub


NB - Statut est défini comme Integer, car xlManual, xlSemiAutomatic
et xlAutomatic, les 3 valeurs que peut prendre Calculation, représentent
des constantes dont la valeur respective est -4135, 2 et - 4105.

On peut s'en assurer avec l'une des méthodes suvantes : MsgBox ou
Debug.Print, ou en entrant l'une d'elles dans la zone de recherche de
l'explorateur d'objets puis en validant : la valeur en décimal et en hexa
s'affiche alors dans le coin inférieur gauche de l'explorateur d'objets.



comprends plus que couic...
mais avant de retourner dans mon tonneau, tel diogène, puis-je ajouter que :
toi, ? tu écris :
"si tu n'as que des espaces en début ou fin de cellules, tu peux utiliser"
et christophe dit qu'il veut :
"mon objectif principal est bien de supprimer les espaces en début et
fin de cellules"

serait-ce le "ou" et le "et" qui ferait la différence?
sur ce, je referme le couvercle
jps

a écrit:
mais non jps, retourne dans ta barrique, ce que je proposais c'est
d'éradiquer TOUS les espaces, et c'est pas ça que souhaite christophe


"sabatier" a écrit dans le message de news:


je ne comprends pas le "mais" puisque ce propose est bien ce que tu
sembles vouloir faire, christophe, non?
jps

Christophe Joly a écrit:

Bonsoir:

Je te remercie mais en fait mon objectif principal est bien de supprimer


les


espaces en début et fin de cellules.

Sinceres salutations,

Christophe
"" a écrit dans le message de
news:403fb04a$0$21672$


si tu n'as que des espaces en début ou fin de cellules, tu peux utiliser
Columns(1).Replace " ", ""
tous les espaces sont supprimés d'un coup

http://jacxl.free.fr


"Christophe Joly" a écrit dans le message de news:
uO23n4W$


Bonsoir:

Pour effacer les espaces inutiles dans une colonne j'utilise le code


VBA




suivant mais c'est très lent (environ 20 secondes)
For Each cell In Range("A1:A150")
cell.Value = WorksheetFunction.Trim(cell.Value)
Next

Est ce que le recalcul 100% en est la cause?
Est-il possible d'améliorer le code pour que la fonction TRIM


s'applique




à


la plage A1:A150 en une seule fois plutot que cellule par cellule?


Sinon, est t-il possible de faire en sorte que la fonction TRIM


s'applique



directement au moment ou une valeur est saisie dans une cellule de la
colonne A?

Merci.

Christophe



For Each cell In Range("A1:A150")
cell.Value = WorksheetFunction.Trim(cell.Value)
Next














--
Cordialement,

Michel Gaboly
http://www.gaboly.com






Avatar
Christophe Joly
Alain:

Bonjour et merci c'est exactement ce que je voulais. Ta solution no 1 me
permet de gagner 19 secondes et 9/10 eme autant dire une éternité.

Merci encore,

Christophe
"Alain CROS" a écrit dans le message de
news:%236q1Yjd$
Bonjour.

Pour le 1 :

Sub SupEspace()
Dim Plg
Plg = Range("A1:A150")
Range("A1:A150") = Application.Trim(Plg)
End Sub

Pour le 2 :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("A1:A150")) Is Nothing Then
Application.EnableEvents = False
Target = Application.Trim(Target)
Application.EnableEvents = True
End If
End Sub

Alain CROS.

"Christophe Joly" a écrit dans le message de news:
uO23n4W$

Bonsoir:

Pour effacer les espaces inutiles dans une colonne j'utilise le code VBA
suivant mais c'est très lent (environ 20 secondes)
For Each cell In Range("A1:A150")
cell.Value = WorksheetFunction.Trim(cell.Value)
Next

Est ce que le recalcul 100% en est la cause?
Est-il possible d'améliorer le code pour que la fonction TRIM s'applique
à


la plage A1:A150 en une seule fois plutot que cellule par cellule?


Sinon, est t-il possible de faire en sorte que la fonction TRIM
s'applique


directement au moment ou une valeur est saisie dans une cellule de la
colonne A?

Merci.

Christophe



For Each cell In Range("A1:A150")
cell.Value = WorksheetFunction.Trim(cell.Value)
Next








Avatar
sabatier
merci, michel, mais tu avoueras que si, en plus, il s'exprime mal,
comment veux-tu que je comprenne....
jps

Michel Gaboly a écrit:
Bonjour Jean-Paul,

Je pense que c'est qui s'est mal exprimé : il a écrit "si tu n'as que
des espaces en début et fin ...", mais voulait probablement dire :

Si tu n'as des espaces qu'en début et fin ...


Si ce n'est pas le cas, le dialogue n'a effectivement aucun sens, comme
tu le relèves brillamment ;-)))


Pour en revenir au plan technique, si Trim donne le bon résultat
mais est anormalement long à cause des recalculs à chaque passage
dans la boucle, la solution est probablement :

Application.Calculate = xlManual
For Each cell In Range("A1:A150")
cell.Value = WorksheetFunction.Trim(cell.Value)
Next
Application.Calculate = xlAutomatic

ou pour le cas (assez rare) où le calcul n'est pas toujours en automatique
(Automatique ou Automatique sauf Tables selon les circonstances)

Dim Statut As Integer
Statut = Application.Calculation
Application.Calculation = Statut
For Each cell In Range("A1:A150")
cell.Value = WorksheetFunction.Trim(cell.Value)
Next
Application.Calculation = Statut
End Sub


NB - Statut est défini comme Integer, car xlManual, xlSemiAutomatic
et xlAutomatic, les 3 valeurs que peut prendre Calculation, représentent
des constantes dont la valeur respective est -4135, 2 et - 4105.

On peut s'en assurer avec l'une des méthodes suvantes : MsgBox ou
Debug.Print, ou en entrant l'une d'elles dans la zone de recherche de
l'explorateur d'objets puis en validant : la valeur en décimal et en hexa
s'affiche alors dans le coin inférieur gauche de l'explorateur d'objets.




comprends plus que couic...
mais avant de retourner dans mon tonneau, tel diogène, puis-je ajouter que :
toi, ? tu écris :
"si tu n'as que des espaces en début ou fin de cellules, tu peux utiliser"
et christophe dit qu'il veut :
"mon objectif principal est bien de supprimer les espaces en début et
fin de cellules"

serait-ce le "ou" et le "et" qui ferait la différence?
sur ce, je referme le couvercle
jps

a écrit:

mais non jps, retourne dans ta barrique, ce que je proposais c'est
d'éradiquer TOUS les espaces, et c'est pas ça que souhaite christophe


"sabatier" a écrit dans le message de news:



je ne comprends pas le "mais" puisque ce propose est bien ce que tu
sembles vouloir faire, christophe, non?
jps

Christophe Joly a écrit:


Bonsoir:

Je te remercie mais en fait mon objectif principal est bien de supprimer


les



espaces en début et fin de cellules.

Sinceres salutations,

Christophe
"" a écrit dans le message de
news:403fb04a$0$21672$



si tu n'as que des espaces en début ou fin de cellules, tu peux utiliser
Columns(1).Replace " ", ""
tous les espaces sont supprimés d'un coup

http://jacxl.free.fr


"Christophe Joly" a écrit dans le message de news:
uO23n4W$



Bonsoir:

Pour effacer les espaces inutiles dans une colonne j'utilise le code


VBA





suivant mais c'est très lent (environ 20 secondes)
For Each cell In Range("A1:A150")
cell.Value = WorksheetFunction.Trim(cell.Value)
Next

Est ce que le recalcul 100% en est la cause?
Est-il possible d'améliorer le code pour que la fonction TRIM


s'applique





à



la plage A1:A150 en une seule fois plutot que cellule par cellule?


Sinon, est t-il possible de faire en sorte que la fonction TRIM


s'applique




directement au moment ou une valeur est saisie dans une cellule de la
colonne A?

Merci.

Christophe



For Each cell In Range("A1:A150")
cell.Value = WorksheetFunction.Trim(cell.Value)
Next












--
Cordialement,

Michel Gaboly
http://www.gaboly.com










Avatar
sabatier
c'est mon temps au 100 m et j'ai pourtant pas le sentiment de courir une
éternité...par contre, quelle soif à l'arrivée...
jps

Christophe Joly a écrit:
Alain:

Bonjour et merci c'est exactement ce que je voulais. Ta solution no 1 me
permet de gagner 19 secondes et 9/10 eme autant dire une éternité.

Merci encore,

Christophe
"Alain CROS" a écrit dans le message de
news:%236q1Yjd$

Bonjour.

Pour le 1 :

Sub SupEspace()
Dim Plg
Plg = Range("A1:A150")
Range("A1:A150") = Application.Trim(Plg)
End Sub

Pour le 2 :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("A1:A150")) Is Nothing Then
Application.EnableEvents = False
Target = Application.Trim(Target)
Application.EnableEvents = True
End If
End Sub

Alain CROS.

"Christophe Joly" a écrit dans le message de news:


uO23n4W$

Bonsoir:

Pour effacer les espaces inutiles dans une colonne j'utilise le code VBA
suivant mais c'est très lent (environ 20 secondes)
For Each cell In Range("A1:A150")
cell.Value = WorksheetFunction.Trim(cell.Value)
Next

Est ce que le recalcul 100% en est la cause?
Est-il possible d'améliorer le code pour que la fonction TRIM s'applique


à


la plage A1:A150 en une seule fois plutot que cellule par cellule?


Sinon, est t-il possible de faire en sorte que la fonction TRIM


s'applique


directement au moment ou une valeur est saisie dans une cellule de la
colonne A?

Merci.

Christophe



For Each cell In Range("A1:A150")
cell.Value = WorksheetFunction.Trim(cell.Value)
Next