XL 2019 Trouver l'espace ou le blanc dans le texte de chaque cellule

bauerjackob

XLDnaute Junior
bonjour
comment faire pour trouver et supprimer le blanc( les blancs) ou l espace (les espaces ) devant un texte dans une cellulle. merci
 
Solution
Re bonjour,
Si c'est un "one shot" le plus simple à mes yeux est de faire un remplacer.
Vous sélectionner votre zone à traiter, vous faites Remplacer par avec Espace dans Rechercher puis valider.

20220611_105257.gif

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour bauerjackob,
Un petit fichier test aurait été le bienvenu.
Ensuite, que voulez vous ?
1- Obtenir le contenu de cellule sans le blanc ?
2- Supprimer le premier blanc dans toutes les cellules ?
Le premier point peut être fait avec :
VB:
=STXT(A1;2;NBCAR(A1))
ou plus simple si on est sur que la chaine à moins de 1000 caractères :
=STXT(A1;2;1000)
mais demande une cellule pour le calcul. Ne peut pas être fait dans la cellule elle même.
Le second point peut être fait en VBA avec :
Code:
Sub SupEspace1()
    For Each c In [A1:B20]  ' à adapter
        If Left(c.Value, 1) = " " Then c.Value = Mid(c.Value, 2)
    Next c
End Sub
ou encore
Sub SupEspace2()
    For Each c In [A1:B20]  ' à adapter
        c.Value = Trim(c.Value)
    Next c
End Sub
Le premier module supprime un espace avant le mot.
Le second module supprime tous les espaces avant le mot.
Une troisième solution. Sélectionner la Plage puis faire Remplacer " " par rien.
Tout dépend de votre contexte.
 

patricktoulon

XLDnaute Barbatruc
bonjour
on fait toute la plage d'un coup
VB:
Function TrimLeftAllCellsInRange(ByRef RnG As Range)
'supprime les espace devant le premier caracteres equivalent de "Ltrim" in one shoot
    With RnG
    TrimLeftAllCellsInRange = Evaluate("IF(ISTEXT(" & .Address & "),MID(" & .Address & ",FIND(MID(TRIM(" & .Address & "),1,2)," & .Address & ",1),LEN(" & .Address & ")),REPT(" & .Address & ",1))")
End With
End Function

la sub pour appeler la fonction
VB:
Sub test()    'trim les valeurs dans la plage gauche et droite
    Dim DL, RnG As Range, tim&
     DL = Cells(Rows.Count, 3).End(xlUp).Row
    Set RnG = Sheets(1).Range("C1:C" & DL)
    tim = Timer 'on capture le time avant la modif
   RnG.Value = TrimLeftAllCellsInRange(RnG)
    MsgBox Format(Timer - tim, "#0.00") 'message du temps passé a réguler les espace 
End Sub

si tu veux :
j'ai aussi pour supprimer avant et après
j'ai aussi la régulation des espace avant /pendant et après
 

bauerjackob

XLDnaute Junior
Bonjour bauerjackob,
Un petit fichier test aurait été le bienvenu.
Ensuite, que voulez vous ?
1- Obtenir le contenu de cellule sans le blanc ?
2- Supprimer le premier blanc dans toutes les cellules ?
Le premier point peut être fait avec :
VB:
=STXT(A1;2;NBCAR(A1))
ou plus simple si on est sur que la chaine à moins de 1000 caractères :
=STXT(A1;2;1000)
mais demande une cellule pour le calcul. Ne peut pas être fait dans la cellule elle même.
Le second point peut être fait en VBA avec :
Code:
Sub SupEspace1()
    For Each c In [A1:B20]  ' à adapter
        If Left(c.Value, 1) = " " Then c.Value = Mid(c.Value, 2)
    Next c
End Sub
ou encore
Sub SupEspace2()
    For Each c In [A1:B20]  ' à adapter
        c.Value = Trim(c.Value)
    Next c
End Sub
Le premier module supprime un espace avant le mot.
Le second module supprime tous les espaces avant le mot.
Une troisième solution. Sélectionner la Plage puis faire Remplacer " " par rien.
Tout dépend de votre contexte.
bonjour Sylvanu et Patricktoulon
Comme ma BDD a 12000 lignes et 14 colonnes, l'opérateur de saisie a fait beaucoup d 'erreur en mettant des espaces max 3 devant les textes et je veux rectifier ces erreurs d'un coup. A noter que Ma base des donné est déjà régit par VBA.
 

bauerjackob

XLDnaute Junior
bonjour
on fait toute la plage d'un coup
VB:
Function TrimLeftAllCellsInRange(ByRef RnG As Range)
'supprime les espace devant le premier caracteres equivalent de "Ltrim" in one shoot
    With RnG
    TrimLeftAllCellsInRange = Evaluate("IF(ISTEXT(" & .Address & "),MID(" & .Address & ",FIND(MID(TRIM(" & .Address & "),1,2)," & .Address & ",1),LEN(" & .Address & ")),REPT(" & .Address & ",1))")
End With
End Function

la sub pour appeler la fonction
VB:
Sub test()    'trim les valeurs dans la plage gauche et droite
    Dim DL, RnG As Range, tim&
     DL = Cells(Rows.Count, 3).End(xlUp).Row
    Set RnG = Sheets(1).Range("C1:C" & DL)
    tim = Timer 'on capture le time avant la modif
   RnG.Value = TrimLeftAllCellsInRange(RnG)
    MsgBox Format(Timer - tim, "#0.00") 'message du temps passé a réguler les espace
End Sub

si tu veux :
j'ai aussi pour supprimer avant et après
j'ai aussi la régulation des espace avant /pendant et après
Bjr veux tu rectifier mon code dans ce fichier
 

Pièces jointes

  • linge.xlsx
    10.5 KB · Affichages: 0

Discussions similaires

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 461
dernier inscrit
dams94