Rajouter espace entre 2 lettres dans une même cellule

raphael.werding

XLDnaute Nouveau
J'ai une base de données énorme et je voudrais rajouter d'une manière automatique un espace entre nom et prénom (collés dans la même cellule).

HubertDawagne => Hubert Dawagne

Est-ce que quelqu'un peut m'aider?
 

natorp

XLDnaute Accro
Re : Rajouter espace entre 2 lettres dans une même cellule

Bjr Raphael,

cela ne serait possible de manière automatique que si le prénom est tjrs situé en premier et fait tjrs 6 caractères comme dans ton exemple...

désolé...
cordialement, Gérard
 

Sofhy

XLDnaute Occasionnel
Re : Rajouter espace entre 2 lettres dans une même cellule

Bonjour raphael.werding,

Est-ce que l'on peut prendre comme condition que les seules lettres qui sont en majuscules sont les initiales du prénom et du nom de famille ?

A++
Sofhy
 

Sofhy

XLDnaute Occasionnel
Re : Rajouter espace entre 2 lettres dans une même cellule

Oui, c'est effectivement la seule condition.
A+

Alors peut être qu'il est possible de faire un code qui pourrait dissocier à chaque lettre en majuscule ? Car c'est possible lorsqu'il y a un espace, alors ...

J'ai essayé quelque chose avec les formules et la fonction "majuscule", mais ce n'est pas probant.

Avis aux pros du codes ...

A++
Sophie
 
Dernière édition:

natorp

XLDnaute Accro
Re : Rajouter espace entre 2 lettres dans une même cellule

Re,
Bjr Sofhy.. question à raphael :
pour être sûr de ne pas faire chercher pour rien :

Il n'y a pas de prénom composé s'écrivant JeanPierreMarielle ??

Cordialement, Gérard
 

pierrejean

XLDnaute Barbatruc
Re : Rajouter espace entre 2 lettres dans une même cellule

Bonjour a tous

Un essai
 

Pièces jointes

  • Raphael.zip
    13.2 KB · Affichages: 366
  • Raphael.zip
    13.2 KB · Affichages: 373
  • Raphael.zip
    13.2 KB · Affichages: 370
Dernière édition:

Tibo

XLDnaute Barbatruc
Re : Rajouter espace entre 2 lettres dans une même cellule

Bonjour le fil,

Une solution avec une formule matricielle :

Code:
=GAUCHE(A1;EQUIV(VRAI;CODE(STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1))<97)-1)
&" "&STXT(A1;EQUIV(VRAI;CODE(STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1))<97);99)

Formule matricielle à valider par CTRL + MAJ + ENTREE

Fonctionne pour les prénoms simples : 1ère majuscule = Initiale du prénom, Majuscules suivantes = Initiales du nom

@+
 

raphael.werding

XLDnaute Nouveau
Re : Rajouter espace entre 2 lettres dans une même cellule

Un tout grand merci pour le fichier. Ca marche superbien. A part que dans ma liste j'avais pas mal de nom écrit entièrement en lettres majuscules. J'ai donc d'abord modifié tous ces noms: HUBERTDAWAGNE => HubertDawagne.
Mais, bon maintenant c'est fait et ma liste est parfaite. Merci.
 

Staple1600

XLDnaute Barbatruc
Re : Rajouter espace entre 2 lettres dans une même cellule

Bonjour à tous

Une proposition incomplète avec RegExp

EDITION
: en biaisant c'est un peu mieux (désormais cela fonctionne avec un prénom composé)
(mais toujours pas trouvé le bon pattern ;) )
Code:
Sub test_feuillev2()
Dim r As Range, a$
ActiveSheet.Cells.Clear
[A1] = "hubertDewagne"
[A2] = "HubertDewagne"
[A3] = "Eric-HubertDewagne"
[A4] = "eric-hubertDewagne"
With CreateObject("vbscript.regexp")
   .Pattern = "([a-z])([A-Z])"
    .Global = True
    For Each r In [A1].CurrentRegion
    If .Execute(r).Count Then
    a = Application.Proper(Split(.Replace(r, "$1 $2"))(0))
    r.Offset(, 1) = _
    a & " " & Split(.Replace(r, "$1 $2"))(1)
    End If
    Next r
End With
End Sub
PS: JNP ;) si tu passes par ici et que tu as une idée de pattern pour le cas du prénom composé (sans oublier le cas d'un nom composé comme DE LA TOUR par exemple) car pour le moment après plusieurs essais, je sèche :(
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Rajouter espace entre 2 lettres dans une même cellule

Bonjour à tous
  1. Code:
    [COLOR="DarkSlateGray"][B]Sub insertion_espace_1()
    Dim oCel As Range, i&
       With Selection [COLOR="Olive"]'ou tout autre plage qu'on voudra...[/COLOR]
          For Each oCel In .Cells
             If VarType(oCel) = vbString Then
                For i = Len(oCel.Value) To 2 Step -1
                   If Mid$(oCel.Value, i, 1) = UCase(Mid$(oCel.Value, i, 1)) Then
                      oCel.Value = WorksheetFunction.Trim(Left$(oCel.Value, i - 1) & Space(1) & Right$(oCel.Value, Len(oCel.Value) + 1 - i))
                   End If
                Next i
             End If
          Next oCel
       End With
    End Sub[/B][/COLOR]
    Ne fonctionne pas avec HUBERTDAWAGNE ou hubertdawagne ou HubertDAWAGNE ou DAWAGNEHubert.

  2. Code:
    [COLOR="DarkSlateGray"][B]Sub insertion_espace_2()
    Dim oCel As Range, tmp$, i&
       With Selection [COLOR="Olive"]'ou tout autre plage qu'on voudra...[/COLOR]
          For Each oCel In .Cells
             If VarType(oCel) = vbString Then
                tmp = oCel.Value
                For i = Len(tmp) To 2 Step -1
                   If Mid$(tmp, i, 1) = UCase(Mid$(tmp, i, 1)) And Mid$(tmp, i, 1) <> "-" Then
                      If (Mid$(tmp, i + 1, 1) <> UCase(Mid$(tmp, i + 1, 1)) Or Mid$(tmp, i - 1, 1) <> UCase(Mid$(tmp, i - 1, 1))) And Mid$(tmp, i - 1, 1) <> "-" Then
                         tmp = Left$(tmp, i - 1) & Space(1) & Right$(tmp, Len(tmp) + 1 - i)
                      End If
                   End If
                Next i
                oCel.Value = WorksheetFunction.Trim(tmp)
             End If
          Next oCel
       End With
    End Sub[/B][/COLOR]
    Ne fonctionne toujours pas avec HUBERTDAWAGNE ou hubertdawagne, mais fonctionne avec HubertDAWAGNE ou DAWAGNEHubert.

Les deux fonctionnent avec PierreJeanDeLimasDansLeBeaujolais.​
ROGER2327
#4115


Jeudi 5 Absolu 138 (Saint Bardamu, voyageur, SQ)
26 Fructidor An CCXVIII
2010-W36-7T16:00:10Z
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Rajouter espace entre 2 lettres dans une même cellule

Bonjour le fil :),
PS: JNP ;) si tu passes par ici et que tu as une idée de pattern pour le cas du prénom composé (sans oublier le cas d'un nom composé comme DE LA TOUR par exemple) car pour le moment après plusieurs essais, je sèche :(
Et bien, je proposerais une petite fonction
Code:
Function AjouteBlanc(ATester As String) As String
Dim Match, Matches, I As Integer
Application.Volatile
With CreateObject("vbscript.regexp")
    .Global = True
    .Pattern = "(^[a-z]+(?=[A-Z]))|(^[a-z]+\-[a-z]+(?=[A-Z]))|" _
        & "([A-Z][a-z]+\-[A-Z][a-z]+)|([A-Z][a-z]+|[A-Z]+$)|([A-Z]+(?=[A-Z]))"
    Set Matches = .Execute(ATester)
    If Matches.Count = 0 Then
        AjouteBlanc = ""
    Else
        For Each Match In Matches
            AjouteBlanc = AjouteBlanc & " " & Application.Proper(Match)
        Next
        AjouteBlanc = Right(AjouteBlanc, Len(AjouteBlanc) - 1)
    End If
End With
End Function
Fonctionne avec :
HubertDawagne
JeanPierreMarielle
PierreJeanDeLimasDansLeBeaujolais
HubertDAWAGNE
HUBERTDawagne
PierreJEANDeLIMASDansLEBeaujolais
Jean-PierreMarielle
Pierre-JeanDeLimasDANSLeBeaujolais
pierre-jeanDeLimasDansLeBeaujolais
pierre-jeanDe-LimasDansLeBeaujolais
Ne fonctionne pas :
Mot en minuscules en dehors de début de chaine
2 mots en majuscules consécutifs
Bonne journée :cool:
PS à JM : DeLaTour est OK, DE-LA-TOUR aussi, mais pour DELATOUR, je ne vois pas sur quoi me baser :rolleyes:
 

ROGER2327

XLDnaute Barbatruc
Re : Rajouter espace entre 2 lettres dans une même cellule

Re...
(...)
Fonctionne avec :
HubertDawagne
JeanPierreMarielle
PierreJeanDeLimasDansLeBeaujolais
HubertDAWAGNE
HUBERTDawagne
PierreJEANDeLIMASDansLEBeaujolais
Jean-PierreMarielle
Pierre-JeanDeLimasDANSLeBeaujolais
pierre-jeanDeLimasDansLeBeaujolais
pierre-jeanDe-LimasDansLeBeaujolais
Ne fonctionne pas :
(...)
Bien vu !

Ma procédure insertion_espace_2 donne, à la casse près, le même résultat sur ces exemples.
Pour obtenir exactement le même résultat (modification éventuelles de la casse), remplacer la ligne
Code:
[COLOR="DarkSlateGray"][B]            oCel.Value = WorksheetFunction.Trim(tmp)
[/B][/COLOR]
par
Code:
[COLOR="DarkSlateGray"][B]            With WorksheetFunction: oCel.Value = .Proper(.Trim(tmp)): End With[/B][/COLOR]
ROGER2327
#4118


Vendredi 6 Absolu 138 (Sainte Vérola, assistante sociale, SQ)
27 Fructidor An CCXVIII
2010-W37-1T12:47:02Z
 

Discussions similaires

Statistiques des forums

Discussions
312 189
Messages
2 086 033
Membres
103 102
dernier inscrit
nath34490