• Initiateur de la discussion Initiateur de la discussion pattie1505
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

pattie1505

XLDnaute Junior
Bonjour à tous,

J'ai dans une colonne environ 2000 adresses comme ceci:

127 RUE DU MARECHAL LECLERC (d'autres avec un ou deux numéros ex: 1 RUE OU 45 RUE etc..)

Je souhaite insérer une virgule après les numéros et en même temps passer tout au minuscule sauf la première lettre après les numéros et celles des noms propres (MARECHAL LECLERC => 127, rue Marechal Leclerc)

Pouvez-vous m'aider svp.
Ca fait 2 jours que je cherche et je ne suis pas parvenu.

Merci par avance.
 
Re : inserer virgule

Bonjour,

Gérer des adresses n'est pas chose aisée.

La virgule doit être placée après le numéro : ok, mais s'il y a un bis ou un ter ou ...

Autre point : comment repérer un nom propre d'un nom commun

Reviens en nous donnant dans un fichier un échantillon d'une cinquantaine (si possible) d'adresse.

A te (re)lire

@+
 
Re : inserer virgule

Merci Tibo de ta réponse rapide,
Je joins un echantillon sous xls pour les régles de forum mais moi je travaille sous xlsx.
Quant à bis ou ter, étant peu nombreux à revenir je peux les gérer manuellement s'il n'y a pas de solution.
Merci encore
 
Re : inserer virgule

Merci Tibo de ta réponse rapide,
Je joins un echantillon sous xls pour les régles de forum mais moi je travaille sous xlsx.
Quant à bis ou ter, étant peu nombreux à revenir je peux les gérer manuellement s'il n'y a pas de solution.
Merci encore
 

Pièces jointes

Re : inserer virgule

re,

J'ai tenté de traiter le sujet par formule, mais sans succès.

Compte tenu des critères à prendre en compte, seul un traitement par macro me paraît approprié.

Les critères seraient, selon moi, les suivants :

- Le mot qui suit le n° correspond au type de voie, donc minuscule.

- parmi les mots qui suivent, les mots de 3 lettres ou moins correspondraient à des articles, donc minuscule

- donc seuls les mots de 4 lettres et plus devraient avoir une majuscule.

Il n'est pas dit que ça donnerait un résultat correct à 100 %

Comme indiqué plus haut, je ne vois pas comment faire par formule, reste le VBA que je ne maîtrise pas.

Donc, si un Vbaïste passait par ici ...

@+
 
Re : inserer virgule

Bonjour mexcellent, Tibo, le fil, le forum

mexcellent:
Cherche ton bonheur du côté des expressions régulières (regexp)

Illustration dans ce fil (très intéressant à mon sens) et en plus relatif à ta problématique
 
Dernière édition:
Re : inserer virgule

Bonjour mexcellent, salut Tibo, Staple,

J'ai suivi les directives de Tibo et traité aussi les "bis" et les "ter" pour la virgule.

Mais les noms "Impasse" "Avenue" "Boulevard" etc sont considérés comme noms propres :

Code:
Sub NomPropre()
Dim t, i As Long, s, j As Byte, txt$, x$
t = Application.Transpose(Range("A1", Range("A65536").End(xlUp)))
For i = 1 To UBound(t)
  s = Split(t(i), " ")
  t(i) = ""
  For j = 0 To UBound(s)
    txt = LCase(s(j))
    If j = 0 And Val(txt) Then 'on traite seulement le n° en tête
      x = LCase(s(j + 1))
      If x = "bis" Or x = "ter" Then s(j + 1) = x & "," Else txt = UCase(txt) & ","
    ElseIf Len(Replace(txt, ",", "")) > 3 Then txt = Application.Proper(txt)
    End If
    t(i) = t(i) & IIf(t(i) = "", "", " ") & txt
  Next
Next
Range("B1:B65536").ClearContents 'on peut aussi écrire directement à partir de A1
Range("B1").Resize(UBound(t)) = Application.Transpose(t)
End Sub

A+
 

Pièces jointes

Re : inserer virgule

Re,

Une solution pour les noms de voies, ce n'est pas absolument parfait (serge) mais c'est pas mal :

Code:
Sub NomPropre()
Dim t, i As Long, s, j As Byte, txt$, x$
t = Application.Transpose(Range("A1", Range("A65536").End(xlUp)))
For i = 1 To UBound(t)
  s = Split(t(i), " ")
  t(i) = ""
  For j = 0 To UBound(s)
    txt = LCase(s(j))
    If j = 0 And Val(txt) Then 'on traite seulement le n° en tête
      x = LCase(s(j + 1))
      If x = "bis" Or x = "ter" Then s(j + 1) = x & "," Else txt = UCase(txt) & ","
    ElseIf [COLOR="Red"]Right(t(i), 1) <> "," And[/COLOR] Len(Replace(txt, ",", "")) > 3 Then txt = Application.Proper(txt)
    End If
    t(i) = t(i) & IIf(t(i) = "", "", " ") & txt
  Next
Next
Range("B1:B65536").ClearContents 'on peut aussi écrire directement à partir de A1
Range("B1").Resize(UBound(t)) = Application.Transpose(t)
End Sub

A+
 

Pièces jointes

Re : inserer virgule

Bonjour Job,

Beau travail, j'ai fait un test sur un fichier que j'avais chez moi. Ca donne un bon résultat.

Il reste quelques adresses à traiter manuellement, ce qui est normal. On ne saurait effectuer via Excel une analyse syntaxique détaillée.

Bravo à toi

@+
 
Re : inserer virgule

Bonjour le fil, le forum,

Une macro un peu plus simple, donc plus rapide :

Code:
Sub NomPropre()
Dim t, i As Long, s, j As Byte, txt$, x$
t = Application.Transpose(Range("A1", Range("A65536").End(xlUp)))
For i = 1 To UBound(t)
  s = Split(Application.Proper(LCase(t(i))), " ")
  t(i) = ""
  For j = 0 To UBound(s)
    txt = s(j)
    If j = 0 And Val(txt) Then 'on traite seulement le n° en tête
      x = LCase(s(1))
      If x = "bis" Or x = "ter" Then s(1) = x & "," Else txt = UCase(txt) & ","
    ElseIf Right(t(i), 1) = "," Or Len(txt) < 4 Then txt = LCase(txt)
    End If
    t(i) = Trim(t(i) & " " & txt)
  Next
Next
Range("B1:B65536").ClearContents 'on peut aussi écrire directement à partir de A1
Range("B1").Resize(UBound(t)) = Application.Transpose(t)
End Sub

Edit : j'ai testé avec 50000 lignes => 2,4 s au lieu de 3,1 s pour la version (2)

A+
 

Pièces jointes

Dernière édition:
Re : inserer virgule

Bonjour à tous


Juste une question qui trotte dans ma tête depuis quelques temps:
Sur plusieurs fils relatifs, aux adresses, code postal, extraction de prénom et noms, je cite régulièrement la puissance de traitement qu'offre l'utilisation des expressions régulières (regexp), et je m'aperçois au fil des réponses que je peux lire sur XLD, que peu d'entre vous, parmi les "pointures" d'XLD en VBA ne semble intéressé par la chose.

Pouvez-vous me dire pourquoi?

Pour mémoire, un des premiers fils que j'ai initié quand je suis arrivé sur XLD (en 2005) traitait de ce qu'on appelle la RNVP (d'où mon intérêt pour ce type de posts)

PS: j'en profite pour remercier à nouveau même si désormais certains d'entre eux se font rare sur XLD, les membres du forum qui m'aidèrent à l'époque:
• Tibo (😉 , bonjour ) pour ses formules pointues
• MyDearFriend pour son code VBA efficace et agréable à lire
 
Re : inserer virgule

Salut Staple,

Perso Staple je n'y connais rien dans les "expressions régulières" car je n'en ai jamais eu besoin.

Il me semble que ce n'est pas très évident.

Pourquoi n'utilises-tu pas ce fil pour nous montrer comment on s'en sert ??

A+
 
Re : inserer virgule

Bonjour Job75

Pourquoi n'utilises-tu pas ce fil pour nous montrer comment on s'en sert ??
Je pense le faire

Mais j'aime bien l'émulation qui règne sur XLD.
Or comme peu de monde est enclin à me suivre sur le chemin de regexp
(ca refroidit un peu ma motivation, car la difficulté principale est de trouver le bon Pattern, et c'est là que j'aurai besoin de vos apports , les amis 😉 )

Job75:
As-tu le vu le lien que citait plus bas ? (Lien supprimé)

PS: il semble que mexcellent n'est pas été voir ce lien car je n'ai pas eu de retour
(ce refroidit un peu plus la motivation évoquée plus haut 😉 )
 
Dernière édition:
Re : inserer virgule

Re Staple,

Job75:
As-tu le vu le lien que citait plus bas ? (Lien supprimé)

PS: il semble que mexcellent n'est pas été voir ce lien car je n'ai pas eu de retour

J'ai été voir le lien mais je n'ai pas vu d'utilisation des "expressions régulières", peut-être mes lunettes 😕

mexcellent n'est pas encore revenu, moi non plus je n'ai pas de retour 🙂

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

T
  • Question Question
Réponses
125
Affichages
14 K
M
Réponses
12
Affichages
5 K
T
M
Réponses
3
Affichages
1 K
M
I
Réponses
10
Affichages
1 K
Ivan91
I
Retour