Supprimer un espace qui n'est pas reconnu comme un espace

mdidish

XLDnaute Junior
Bonjour
Le titre de mon sujet est bizarre mais je ne comprends pas ce qui se passe.
J'ai un classeur qui contient des données copiées/collées d'un site internet, avec des espaces inutiles.
Dans la colonne A, chaque cellule contient un nom et prénom ; parfois il n'y a pas d'espace avant le nom, parfois il y en a un, parfois il y en a deux, etc.

OBJECTIF : supprimer les espaces en début de cellule, sans supprimer les autres espaces (présents entre le nom et le prénom, ou entre les noms/prénoms composés).
J'avais pensé à (code adapté au fichier joint) :
Code:
While (Left(Cells(1, 1), 1) = " ")
    Cells(1, 1) = Right(Cells(1, 1), Len(Cells(1, 1)) - 1)
Wend

PROBLEME : ce code ne fait rien. J'ai l'impression que les espaces présents ne sont pas reconnus comme des espaces (si je me sers de la fonction remplacer d'Excel, en remplaçant les espaces par rien, rien ne se passe).
D'où vient ce problème ? Comment le résoudre ?

J'ai mis un exemple en pièce jointe.

Merci par avance.
 

Pièces jointes

  • Test espace.xlsx
    7.8 KB · Affichages: 47
  • Test espace.xlsx
    7.8 KB · Affichages: 50
  • Test espace.xlsx
    7.8 KB · Affichages: 47

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Supprimer un espace qui n'est pas reconnu comme un espace

Bonsoir mdidish,

Il s'agit du fameux caractère de code 0160 dit "espace insécable" et non pas de l'espace classique de code 32. Il provient bien souvent de la copie de texte depuis un navigateur web vers Excel.

Pour le remplacer par un espace classique:
  • se placer dans une cellule contenant un espace insécable, sélectionner cet espace et copier le (Ctrl+C)
  • sélectionner la zone de texte concernée
  • tapez Ctrl+H (boîte de dialogue "remplacer")
  • dans la zone du "Rechercher" coller l'espace insécable précédemment copié
  • dans la zone du "remplacer par" saisir un espace classique
  • puis remplacer tout.

nota: l’espace insécable peut aussi être saisi en maintenant la touche Alt enfoncée, puis en tapant 0160 sur le pavé numérique, et en relâchant la touche Alt.
 
Dernière édition:

mdidish

XLDnaute Junior
Re : Supprimer un espace qui n'est pas reconnu comme un espace

Super merci pour ta réponse, ça m'a permis d'adapter mon code :
Code:
While (Left(Cells(1, 1), 1) = Chr(160) Or Left(Cells(1, 1), 1) = " ")
    Cells(1, 1) = Right(Cells(1, 1), Len(Cells(1, 1)) - 1)
Wend

Je profite pour une autre question : à chaque fois il y a deux espaces entre le nom (début de cellule) et le prénom (fin de cellule) ; il n'y a jamais deux espaces ailleurs dans la cellule (sauf au début mais je les supprime en premier).
QUESTION : est-il possible de transformer le prénom (donc le texte après les deux espaces) en minuscule avec une majuscule pour la première lettre ? Sachant qu'il peut y avoir des prénoms composés avec ou sans tiret (j'ai modifié le fichier joint pour un exemple plus parlant).
(j'aurais au préalable remplacé tous les Chr(160) par un espace, et supprimé les espaces en début de cellule).

EXEMPLES (il y a toujours deux espaces après MARTIN
MARTIN MICHEL --> MARTIN Michel
MARTIN MICHEL JACQUES --> MARTIN Michel Jacques
MARTIN MICHEL-JACQUES --> MARTIN Michel-Jacques

Merci
 

Pièces jointes

  • Test espace.xlsx
    8 KB · Affichages: 35
  • Test espace.xlsx
    8 KB · Affichages: 38
  • Test espace.xlsx
    8 KB · Affichages: 42
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Supprimer un espace qui n'est pas reconnu comme un espace

(re)

Je profite pour une autre question : à chaque fois il y a deux espaces entre le nom (début de cellule) et le prénom (fin de cellule) ; il n'y a jamais deux espaces ailleurs dans la cellule (sauf au début mais je les supprime en premier).
QUESTION : est-il possible de transformer le prénom (donc le texte après les deux espaces) en minuscule avec une majuscule pour la première lettre ? Sachant qu'il peut y avoir des prénoms composés avec ou sans tiret (j'ai modifié le fichier joint pour un exemple plus parlant).
(j'aurais au préalable remplacé tous les Chr(160) par un espace, et supprimé les espaces en début de cellule).

Essayer ce bout de code dans le module de code de la feuille "Feuil1" (si il n'y a qu'une fois la séquence de deux espaces consécutifs):
VB:
Sub test()
Dim xcell As Range
  For Each xcell In Range("a1:a3")
    xcell.Offset(, 1) = Split(xcell, "  ")(0) & " " & Application.WorksheetFunction.Proper(Split(xcell, "  ")(1))
  Next xcell
End Sub

ou bien
VB:
Sub test1()
Dim xcell As Range
  For Each xcell In Range("a1:a3")
    xcell.Offset(, 1) = Left(xcell, InStr(xcell, "  ") - 1) & _
      Application.WorksheetFunction.Proper(Mid(xcell, InStr(xcell, "  ") + 1))
  Next xcell
End Sub
 

Pièces jointes

  • Test espace v1.xlsm
    15.7 KB · Affichages: 47
Dernière édition:

Modeste geedee

XLDnaute Barbatruc
Re : Supprimer un espace qui n'est pas reconnu comme un espace

Bonsour® mapomme

:cool:
attention parfois les caractères "Espace Insécable" remplacent tous les caractères "Espace"
(c'est le cas dans l'exemple fourni)
un remplacement radical peut être trop brutal et irréversible

VB:
Sub Nettoyage()
Dim cellule As Range
For Each cellule In Range("A1:A20")
'on utilise ici la fonction de feuille de calcul TRIM (Suppression espace avant, redondant, après)
'en lieu et place de la fonction VBA TRIM (suppression espace avant et aprés)
'la fonction Clean (EPURAGE) supprime les caractères de contrôles : tab,LF,CR
'la fonction Substitute (SUBSTITUE) remplace ici les caractères "Espace insécable" par le caractère "Espace"
cellule = Application.Trim(Application.Substitute(Application.Clean(cellule), Chr(160), Chr(32)))
Next
End Sub
 

mdidish

XLDnaute Junior
Re : Supprimer un espace qui n'est pas reconnu comme un espace

@ Modeste geedee
Merci pour ton code que je garde de côté.
En fait dans le cas présent, je remplace tous les Chr(160) par un espace, et après je retire les espaces en début de cellule. Pour diverses raisons j'ai besoin de conserver les deux espaces entre le nom et le prénom.
Bonne soirée.
 

Modeste geedee

XLDnaute Barbatruc
Re : Supprimer un espace qui n'est pas reconnu comme un espace

@ Modeste geedee
Merci pour ton code que je garde de côté.
En fait dans le cas présent, je remplace tous les Chr(160) par un espace, et après je retire les espaces en début de cellule. Pour diverses raisons j'ai besoin de conserver les deux espaces entre le nom et le prénom.
Bonne soirée.
dans ce cas

utiliser la fonction VBA Trim
au lieu de :
cellule = Application.Trim(Application.Substitute(Application.Clean(cellule), Chr(160), Chr(32)))
utiliser :
cellule =Trim(Application.Substitute(Application.Clean(cellule), Chr(160), Chr(32)))
 

Dan13008

XLDnaute Nouveau
Re : Supprimer un espace qui n'est pas reconnu comme un espace

Bonsoir mdidish,

Il s'agit du fameux caractère de code 0160 dit "espace insécable" et non pas de l'espace classique de code 32. Il provient bien souvent de la copie de texte dans un navigateur web vers Excel.

Pour le remplacer par un espace classique:
  • se placer dans une cellule contenant un espace insécable, sélectionner cet espace et copier le (Ctrl+C)
  • sélectionner la zone de texte concernée
  • tapez Ctrl+H (boîte de dialogue "remplacer")
  • dans la zone du "Rechercher" coller l'espace insécable précédemment copié
  • dans la zone du "remplacer par" saisir un espace classique
  • puis remplacer tout.

nota: l’espace insécable peut aussi être saisi en maintenant la touche Alt enfoncée, puis en tapant 0160 sur le pavé numérique, et en relâchant la touche Alt.
Merci pour cette info !! ça faisait un moment que je galérais et impossible de trouver la réponse sur les aides microsoft
 

Discussions similaires

Réponses
22
Affichages
782

Statistiques des forums

Discussions
312 231
Messages
2 086 457
Membres
103 217
dernier inscrit
LoshR7