Gestion automatique du nom des rues écrit sous la forme : Cauquène (allée de).

nemounet11

XLDnaute Nouveau
Bonjour à tous.
Je suis sapeur pompier professionnel, responsable d'un service cartographie sous SIG (GeoConcept).
J'ai crée sur ma commune 4800 linéaire qui représentent le réseau routier.
Pour chacun d'eux, je remplis un champs avec le nom de la rue.
J'ai ensuite exporté l'ensemble du réseau routier.
Je l'ai importé sur excel et j'ai déjà crée une chaîne de formule (colonnes cachées C à AD) pour avoir le nom abrégé de la rue.
Ceci afin de pouvoir géré l'affichage de celle-ci sur le plan selon l'échelle.
J'ai finit tout ce travail mais désormais, je dois créer l'index du plan.
Pour ceci, j'ai besoin de votre aide.
J'ai donc mes noms de rue sous la forme : Allée Ambrosia; Rue d'Amstersdam; Rue Charas.
Et je souhaiterais faire mon index sous la forme : Ambrosia (Allée); Amsterdam (Rue d'); Charas (Rue).
Ceci afin de permettre une recherche plus rapide pour départs opérationnels.
Merci d'essayer de m'apporter une solution qui m'évitera ainsi de devoir refaire toute la saisie sous excel à la main, rue par rue.
Et encore bravo pour tout ce que les utilisateurs du forum m'apportent à chacune de mes recherches.
 

Pièces jointes

  • formule abréviation réseau routier 2 envoie.xlsx
    21 KB · Affichages: 90

ROGER2327

XLDnaute Barbatruc
Re : Gestion automatique du nom des rues écrit sous la forme : Cauquène (allée de).

Re...

À Modeste geedee : merci pour le lien. Je l'avais déjà parcouru avec intérêt. Mais je ne m'y suis jamais plongé sérieusement d'où mon ignorance. Vu la puissance de la chose, il faudra que je m'y mette...

Bonjour,

Je vous lis avec intérêt Roger (si vous désirez des informations sur les expressions régulières, je suis à votre disposition bien entendu) !
(...)
Je ne dis pas non !
En comparant vos différentes versions, je pense avoir compris des choses. J'ai essayé de modifier votre dernière version pour traiter ces entrées :
Code:
SENTIER DE L'ORPHELINAT
ZI SINISTRÉE SARKOZY - MERKEL
ZAC DES CAPUCINES FANÉES
Z.U.P. PAUMÉE
ZUP PAUMÉE
Z.A. DES CAPUCINES FANÉES
ZA DES CAPUCINES FANÉES
PASSAGE A L'ACTE
J'obtiens la fonction :
VB:
Function Glossaire(c As String) As String 'Version 3.1
Dim oRegExp As New RegExp
c = Trim(c)
With oRegExp
    .Global = True
    .IgnoreCase = True
    .Pattern = "\s{2,}"
    If .Test(c) = True Then c = .Replace(c, " ")
    .Pattern = ".*\b((?:AVENUE|BOULEVARD|COURS|PASSAGE|PLACE|PROMENADE|RUE|" _
        & "(?:AUTO)?ROUTE|CARREFOUR|CHEMIN|SENTIER|ESPLANADE|IMPASSE|PONT|QUAI|" _
        & "RUELLE|ROND(?:-|\s)POINT|VOIE|Z.A.(?:C.)?|Z.I.|Z.U.P.|ZA(?:C)?|ZI|ZUP)\s" _
        & "+(?:AU(?:X)? |(?:À|A) (?:L')?|D'|DU |DE (?:LA |L')?|DES )?)(.*)"
    If .Test(c) = True Then Glossaire = Replace(.Replace(c, "$2 ($1)"), " )", ")")
End With
Set oRegExp = Nothing
End Function
Ça fonctionne. Est-ce de la chance, ou les modifications sont-elles faites dans les règles ?​



ROGER2327
#6019


Lundi 16 Gidouille 139 (Saint Inventaire, poète - fête Suprême Quarte)
12 Messidor An CCXX, 4,5053h - artichaut
2012-W26-6T10:48:45Z
 

Pièces jointes

  • XLD_187569_Traitement de noms de rues (4).xlsm
    66.8 KB · Affichages: 47

david84

XLDnaute Barbatruc
Re : Gestion automatique du nom des rues écrit sous la forme : Cauquène (allée de).

Re
Ça fonctionne. Est-ce de la chance, ou les modifications sont-elles faites dans les règles ?
Bravo Roger, a priori, c'est tout à fait cela !
Concernant les informations permettant d'apprendre à manipuler les expressions rationnelles, il y a effectivement la discussion pilotée par JNP (je pense d'ailleurs que cette discussion devrait être placée en lien sur celle dédiée au RegExp.
Je vous communique également 2 tutoriels qui m'ont permis de comprendre le mécanisme et auxquels je me réfère souvent (placés d'ailleurs sur le fil "RegExp") :

Concernant la fonction, l'utilisation des propriétés Global et IgnoreCase sont expliquées dans le tutoriel de Cafeine

Concernant le motif (pattern), on distingue en fait 3 parties :
1) ce qui est éventuellement placé avant la rue, l'avenue, ...
le point désigne n'importe quel caractère (mis à part le saut de ligne)
"*" est un quantificateur (comme + et ?, mais le point d'interrogation a également d'autres significations) qui signifie que ce qui précède se répète 0 fois ou un nombre illimité de fois (les quantificateurs sont toujours placés après le ou les caractères auxquels ils s'adressent).
\b signifie une fin de mot : si je ne l'utilise pas dans l'exemple présent AUTOROUTE A4 ramènerait A4 (ROUTE) et non A4 (AUTOROUTE) car route figure également dans le motif.
Donc, cette partie permet de rechercher tout caractère éventuellement présent avant RUE, ROUTE, AVENUE,etc, suivi d'une fin de mots. Vous remarquerez que cette partie n'est pas placée entre parenthèses car je ne veux pas la "capturer" afin de la traiter (je veux juste l'isoler de la partie Rue, AVENUE,...)

2) La partie centrale : elle est divisée en 2 sous-parties :
- RUE, AVENUE,...
- un ou plusieurs articles éventuels
Ces 2 sous-parties sont chacune délimitées par un jeu de parenthèses
(?:AVENUE|BOULEVARD|...)
comportant
- des "|" qui est un signe voulant dire "ou" (ma chaîne comporte le mot AVENUE ou BOULEVARD ou ...
- "?:" ceci permet de ne pas capturer dans les items cette sous-partie.
Vous remarquerez que ces 2 sous-parties sont elles-mêmes rassemblée au sein d'un jeu de parenthèses ne comportant pas "?:" : c'est ce qui me permet de capturer la totalité de ces 2 sous parties au sein d'un même item : ceci est important à comprendre et pour vous en rendre compte, je vous ai laissé dans la fonction la méthode Execute qui vous permet de scinder la chaîne en sous-chaînes (dont le contenu est fonction de la construction du motif).
Pour ce faire, faites apparaître la fenêtre des variables locales et une fois la partie execute passée (en mode pas à pas), déroulez l'objet Matches=>Item 1=>submatches : vous verrez alors les portions d'occurrences capturées (isolées du reste de la chaîne, celles dont j'ai besoin pour traiter la suite).
Donc, chaque sous-partie est enfermée par un jeu de parenthèses non capturantes grâce à
Code:
(?:)
, puis les 2 sont réunies au sein d'un jeu de parenthèses capturantes
Code:
((?:AVENUE|BOULEVARD|...)\s(?:DE|DU|...)?))
, le quantificateur ? placé après
Code:
(?:DE|DU|...)
parce que ces articles peuvent exister ou non (\s traite l'espace existant entre le nom et l'article éventuel).

3) Ce qui est placé après AVENUE, RUE,...
Remarquez que, contrairement au 1), là je place .* entre parenthèses puisque je veux capturer cette portion de chaîne qui correspond au nom de la rue ou avenue en question.

Je me retrouve donc dans tous les cas avec 2 items :
- la rue ou avenue
- son nom.
Il ne me reste plus qu'à traiter ces items à l'aide de la méthode .replace (à ne pas confondre avec la fonction Replace que j'utilise également pour gérer l'espace laissé entre la fin de mot et la parenthèse fermante).

Je vous laisse déjà analyser ces informations et revenir éventuellement sur certaines d'entre elles si vous le jugez utile.
Nous pourrons ensuite continuer si cela vous intéresse.

Ci-joint la fonction comportant le .execute :
Code:
Function Glossaire(c As String) As String 'Version 3.1bis
Dim oRegExp As New RegExp
c = Trim(c)
With oRegExp
    .Global = True
    .IgnoreCase = True
    .Pattern = "\s{2,}"
    If .Test(c) = True Then c = .Replace(c, " ")
    .Pattern = ".*\b((?:AVENUE|BOULEVARD|COURS|PASSAGE|PLACE|PROMENADE|RUE|" _
        & "(?:AUTO)?ROUTE|CARREFOUR|CHEMIN|SENTIER|ESPLANADE|IMPASSE|PONT|QUAI|" _
        & "RUELLE|ROND(?:-|\s)POINT|VOIE|Z.A.(?:C.)?|Z.I.|Z.U.P.|ZA(?:C)?|ZI|ZUP)\s+" _
        & "(?:AU(?:X)? |(?:À|A) (?:L')?|D'|DU |DE (?:LA |L')?|DES )?)(.*)"
    If .Test(c) = True Then
        Set matches = .Execute(c)
        Glossaire = Replace(.Replace(c, "$2 ($1)"), " )", ")") 'placer le point d'arrêt ici et dérouler matches=>Item 1=>submatches
    End If
End With
Set oRegExp = Nothing
End Function
A+
 
Dernière édition:

nemounet11

XLDnaute Nouveau
Re : Gestion automatique du nom des rues écrit sous la forme : Cauquène (allée de).

Bonsoir à tous.
Nemounet11 est là. Lol.
Alors, oui je suis entièrement satisfait de tout ce que vous me proposez.
Merci à JCGL d'avoir lancé la course aux réponses.
Un grand merci à modeste geedee, JBOBO, et surtout ROGER2327, david84 qui surenchérissent en me donnant un fichier qui correspond parfaitement à ce que je recherche.
J'ai testé vos fichier à la maison à plusieurs reprises et je vais donc n'avoir qu'à remplir tout ça lundi au boulot.
Un copier/coller de la base du nom des rues, un clic sur les macros et en une seconde, HOP le résultat final.
Je suis bluffé.
Vous êtes vraiment des experts d'EXCEL et je trouve super que vous metiez vos connaissances aux profils des gens qui ne connaissent que la partie du classeur et pas le Virtual Basic.
Vivement lundi le boulot pour le test.
Si toutefois un soucis m'interpellait, je viendrais à nouveau vous voir.
Encore une fois un grand MERCI à vous tous.
Cordialement.
Cédric
 

ROGER2327

XLDnaute Barbatruc
Re : Gestion automatique du nom des rues écrit sous la forme : Cauquène (allée de).

Bonjour à tous


Tout d'abord, heureux que nemounet11 puisse avancer dans son travail. Il y a certainement des cas qui ne sont pas bien traités par les diverses solutions, mais le boulot est dégrossi.

Ensuite, merci à david84 pour ses explications et ses liens. J'en ferai mon miel un jour ou l'autre. J'ai bien noté :
Je vous laisse déjà analyser ces informations et revenir éventuellement sur certaines d'entre elles si vous le jugez utile.
Nous pourrons ensuite continuer si cela vous intéresse.
Même si je ne m'attaque pas à cela immédiatement, je retiens la proposition pour plus tard...​


Bon dimanche.


ROGER2327
#6023


Mardi 17 Gidouille 139 (Sainte Femelle, technicienne - fête Suprême Quarte)
13 Messidor An CCXX, 0,7743h - giroflée
2012-W26-7T01:51:30Z
 

david84

XLDnaute Barbatruc
Re : Gestion automatique du nom des rues écrit sous la forme : Cauquène (allée de).

Bonjour,
Même si je ne m'attaque pas à cela immédiatement, je retiens la proposition pour plus tard...
Quand vous le voulez Roger, je suis à votre disposition.
Ci-joint la version actualisée dont le motif a été enrichi de quelques possibilités et est légèrement "factorisé" tout en restant "lisible" :
Code:
Function Glossaire(c As String) As String 'Version 3.2
Dim oRegExp As New RegExp
c = Trim(c)
With oRegExp
    .Global = True
    .IgnoreCase = True
    .Pattern = "\s{2,}"
    If .Test(c) = True Then c = .Replace(c, " ")
    
    .Pattern = "(?:^|.*\b)((?:ALL(?:É|E)E|AVENUE|BOULEVARD|CARREFOUR|CHEMIN|CIT(?:É|E)|COURS?|ESPLANADE|GALERIE|" _
    & "HAMEAU|IMPASSE|PASSAGE|PLACE(?:TTE)?|PONT|PROMENADE|QUAI|ROND(?:-|\s)POINT|RUE(?:LLE)?|(?:AUTO)?ROUTE|" _
    & "SENTIER|SQUARE|VILLA|VOIE|Z.?A.?C?.?|Z.?I.?|Z.?U.?P?.?)\s+(?:AUX? |(?:À|A) (?:L')?|D'|DU |DES? (?:LA |L')?)?)(.*)"
    
    If .Test(c) = True Then Glossaire = Replace(.Replace(c, "$2 ($1)"), " )", ")")
End With
Set oRegExp = Nothing
End Function
Une MFC colonne AO permet de repérer plus facilement les différences entre nos 2 propositions.
A+
Edit : je me suis permis de compléter la feuille paramètre mais vérifiez de votre côté s'il n'y a pas d'erreur ou d'oubli.
 

Pièces jointes

  • XLD_187569_Traitement de noms de rues (5).xlsm
    73.3 KB · Affichages: 42
Dernière édition:

david84

XLDnaute Barbatruc
Re : Gestion automatique du nom des rues écrit sous la forme : Cauquène (allée de).

Bonjour,
ci-joint une version actualisée testée sur les 6290 voies de circulation répertoriées sur Paris : seules 2 d'entre elles (Petit Pont et Grand Balcon) ne répondent pas logiquement au test puisque leur structure atypique ne correspondent pas aux règles syntaxiques définies par nemounet11.

Lorsque la rue comporte un numéro
11 rue du 11 novembre 1918
, seuls le type de voie et son nom sont ramenés
11 novembre 1918 (rue du)

Vous trouverez dans le fichier l'index des voies de circulations parisiennes : les valeurs de la colonne après traitement ont été recopiées afin de ne pas ralentir les tests éventuels car le défaut principal du RegExp (il faut bien qu'il y en ai un !) est sa vitesse de traitement sur les plages importantes (4 secondes environ pour traiter les 6290 données : j'ai connu pire mais lorsque l'on fait des tests, cela finit par être un peu longuet).

J'ai placé certains exemples dans la feuille calcul pour test comparatif.

Il faudra sûrement compléter le motif avec les intitulés que l'on retrouvent dans des lieux autres que des villes (j'ai pensé à hameau par exemple mais il y en a d'autres).

Code:
Function Glossaire(c As String) As String 'Version 3.2
Dim oRegExp As RegExp
Set oRegExp = New RegExp
c = Trim(c)
With oRegExp
    .Global = True
    .IgnoreCase = True
    .Pattern = "\s{2,}"
    If .Test(c) = True Then c = .Replace(c, " ")
    
    .Pattern = "(?:^|.*\b)((?:ALL(?:É|E)E|ARCADES?|AVENUE|BALCON|BOULEVARD|BUTTE|CARREFOUR|CHAUSS(?:É|E)E|" _
    & "CHEMIN|CIT(?:É|E)|COURS?|ESPLANADE|GALERIE|GRILLE|HAMEAU|IMPASSE|PARVIS|PASS(?:AGE|ERELLE)|" _
    & "P(?:É|E)RISTYLE|PLACE(?:TTE)?|PONT|PROMENADE|QUAI|ROND(?:(?:-|\s)POINT)?|PORT(?:E|IQUES?)?|" _
    & "RUE(?:LLE)?|(?:AUTO)?ROUTE|SENT(?:E|IER)|SQUARE|TERRASSE|VILLA|VOIE|Z.?A.?C?.?|Z.?I.?|Z.?U.?P?.?)\s+" _
    & "(?:AUX? |(?:À|A) (?:L')?|D'|DU |DES? (?:LA |L')?)?)(.*)"
    
    If .Test(c) = True Then Glossaire = Trim(Replace(.Replace(c, "$2 ($1)"), " )", ")"))
End With
Set oRegExp = Nothing
End Function
A+
 

Pièces jointes

  • XLD_187569_Traitement de noms de rues (6).xlsm
    282.9 KB · Affichages: 366
  • XLD_187569_Traitement de noms de rues (6).xlsm
    282.9 KB · Affichages: 372
  • XLD_187569_Traitement de noms de rues (6).xlsm
    282.9 KB · Affichages: 381
Dernière édition:

nemounet11

XLDnaute Nouveau
Re : Gestion automatique du nom des rues écrit sous la forme : Cauquène (allée de).

Bonjour à tous,
Je reviens vous voir car je viens de faire des essais avec le fichier.
J'ai plusieurs petits problèmes.
Voilà quelques exemples : - LE CLOS DE LIVIERE >>> DE LIVIERE (CLOS DE)
- LE HAMEAU DE LA PLAGE >>> LA PLAGE (HAMEAU DE LA)
- IMPASSE CLOS SAINT-ANDRE >>> SSE CLOS SAINT-ANDRE (CLOS)
- CHEMIN RURAL GLEIZES AUX PRAIRIES >>> RURAL GLEIZES AUX PRAIRIES (CHEMIN)
- CHEMIN COMMUNAL DE SAINT-CHARLES >>> COMMUNAL DE SAINT-CHARLES (CHEMIN)
- LIEU-DIT DOMAINE DE BELLEVUE >>> T DOMAINE BELLEVUE (DOMAINE)
- LIEU-DIT DOMAINE D'ARMENVILLE >>> DOMAINE D'ARMENVILLE (DOMAINE)
- LIEU-DIT DOMAINE DE BALISTE >>> OMAINE DE BALISTE (DOMAINE DE)
- LIEU-DIT DOMAINE LES POUZETS >>> MAINE LES POUZETS (DOMAINE LES).
En fait un soucis avec les associations de mots suivants : lieu-dit domaine de, lieu-dit dom. de, le hameau de la, le clos de, impasse clos, chemin rural, chemin privé, chemin communal.
En fichier joint, le fichier XLD_187569_Traitement de noms de rues (4) envoie.
J'ai donc rajouté dans les paramètres les types de voies qu'ils manquaient.
Et dans la feuille calcul, à partir de la ligne 80 jusqu'à la ligne 4062, l'ensemble des voies nommées de ma commune.
Je pense, peut-être, que le problème vient des paramètres car dans la colonne A, j'ai rajouté des données qui parfois contiennent 2 mots (ex : chemin communal, chemin privé, chemin rural, etc...).
Ce qui est bizarre c'est que certains termes contenant 2 mots fonctionnent.
Dans la feuille calcul, les cellules en oranges montrent les endroits qui posent problème.

Merci à ROGER2327 et à david84 d'y jeter un oeil et d'essayer de me donner la réponse.

Par contre, une dernière question à ROGER2327, quelle est la différences entre la macro tata et tutu ?

Et encore une fois merci pour ce que vous avez déjà fait pour moi.

Au plaisir de vous lire.

Cordialement.
Cédric
 

Pièces jointes

  • XLD_187569_Traitement de noms de rues (4) envoie.xlsm
    161.3 KB · Affichages: 39
Dernière édition:

david84

XLDnaute Barbatruc
Re : Gestion automatique du nom des rues écrit sous la forme : Cauquène (allée de).

Bonjour nemounet11,
une question préalable : as-tu testé ma fonction ?
Si tu préfères le mode de traitement proposé par Roger2327, pas de souci mais précise-le que je le sache.
Ton retour manque de précision : tu dis ce qui ne te convient pas sans préciser ce que tu voudrais obtenir.
Je te conseille de noter manuellement sur le fichier les résultats attendus lorsque le résultat actuel ne convient pas.
A+
 

Modeste geedee

XLDnaute Barbatruc
Re : Gestion automatique du nom des rues écrit sous la forme : Cauquène (allée de).

Bonsour®
Bonjour nemounet11,
une question préalable : as-tu testé ma fonction ?
Si tu préfères le mode de traitement proposé par Roger2327, pas de souci mais précise-le que je le sache.
Ton retour manque de précision : tu dis ce qui ne te convient pas sans préciser ce que tu voudrais obtenir.
Je te conseille de noter manuellement sur le fichier les résultats attendus lorsque le résultat actuel ne convient pas.
A+

m'étant autorisé à verifier le message précédent :
- le glossaire ne prend pas en compte plusieurs termes
dont Clos , Chemin rural, chemin privé,chemin communal

mes tentatives de prise en compte de ces termes ont réussi à l'exception que "Chemin" seul n'est plus reconnu...

:cool:
@+
 

nemounet11

XLDnaute Nouveau
Re : Gestion automatique du nom des rues écrit sous la forme : Cauquène (allée de).

Bonjour david84.
Désolé mais je n'avais pas vraiment fait attention mais jusqu'à présent, il me semble que c'est les fichiers de ROGER2327 avec les macros intitulés tata, tutu et toto que j'exécute.
Par contre je vois dans ces fichiers joints qu'il y a un comparatif avec votre méthode mais je ne sais pas comment la mettre en pratique.
Vos résultats ont l'ait très très biens.

Pourriez-vous me faire un fichier joints avec la démarche à suivre (exécution de telle ou telle macro) ou autres afin que je sache comment tester vos méthodes.

Encore une fois désolé de ne pas avoir porté plus d'attention à vos solutions.

Dans l'attente de vous lire.

Cordialement.

Cédric
 

david84

XLDnaute Barbatruc
Re : Gestion automatique du nom des rues écrit sous la forme : Cauquène (allée de).

Re

m'étant autorisé à verifier le message précédent :
- le glossaire ne prend pas en compte plusieurs termes
dont Clos , Chemin rural, chemin privé,chemin communal

mes tentatives de prise en compte de ces termes ont réussi à l'exception que "Chemin" seul n'est plus reconnu...
Il faut prévoir la possibilité d'exlure privé, rural, communal en utilisant le ? après la parenthèse fermante contenant les différentes possibilités : l'utilisation du quantificateur ? veut dire "présent 0 ou 1 fois"=>prise en compte de chemin seul ou suivi des alternatives précisées dans le masque placé après chemin :
Code:
Function Glossaire(c As String) As String 'Version 3.3
Dim oRegExp As RegExp
Set oRegExp = New RegExp
c = Trim(c)
With oRegExp
    .Global = True
    .IgnoreCase = True
    .Pattern = "\s{2,}"
    If .Test(c) = True Then c = .Replace(c, " ")
    
    .Pattern = "(?:^|.*\b)((?:ALL(?:É|E)E|ARCADES?|AVENUE|BALCON|BOULEVARD|BUTTE|CARREFOUR|CHAUSS(?:É|E)E|" _
    & "CHEMIN(?: COMMUNAL| RURAL| PRIV(?:É|E))?|CIT(?:É|E)|CLOS|COURS?|ESPLANADE|GALERIE|GRILLE|HAMEAU|IMPASSE|" _
    & "LIEU(?:-|\s)DIT|PARVIS|PASS(?:AGE|ERELLE)|P(?:É|E)RISTYLE|PLACE(?:TTE)?|PONT|PROMENADE|QUAI|" _
    & "ROND(?:(?:-|\s)POINT)?|PORT(?:E|IQUES?)?|RUE(?:LLE)?|(?:AUTO)?ROUTE|SENT(?:E|IER)|SQUARE|TERRASSE|VILLA|" _
    & "VOIE|Z.?A.?C?.?|Z.?I.?|Z.?U.?P?.?)\s+(?:AUX? |(?:À|A) (?:L')?|D'|DU |DES? (?:LA |L')?)?)(.*)"
    
    If .Test(c) = True Then Glossaire = Trim(Replace(.Replace(c, "$2 ($1)"), " )", ")"))
End With
Set oRegExp = Nothing
End Function

Pourriez-vous me faire un fichier joints avec la démarche à suivre (exécution de telle ou telle macro) ou autres afin que je sache comment tester vos méthodes.

Encore une fois désolé de ne pas avoir porté plus d'attention à vos solutions.

Comme je l'avais précisé, pas de souci : je voulais simplement savoir si je continuais dans le développement de la fonction ou si cette solution ne vous intéressait pas.

Ci-joint le fichier avec comparatif des résultats (ceux de Roger en AI et AJ et les mien en AK) mais comme je ne sais toujours pas avec précision les résultats que vous attendez, je pilote à vue...
A+
 

Pièces jointes

  • XLD_187569_Traitement de noms de rues (6).xlsm
    270.7 KB · Affichages: 65
  • XLD_187569_Traitement de noms de rues (6).xlsm
    270.7 KB · Affichages: 98
  • XLD_187569_Traitement de noms de rues (6).xlsm
    270.7 KB · Affichages: 76
Dernière édition:

nemounet11

XLDnaute Nouveau
Re : Gestion automatique du nom des rues écrit sous la forme : Cauquène (allée de).

Merci à David84.
Je viens de comprendre qu'il fallait copier/coller la cellule AK vers le bas afin de voir les résultats.
Je pensais qu'il fallait exécuter une macro comme ROGER2327.
Désolé de ne pas l'avoir vu avant.
Par contre, je suis d'un naturel assez curieux.
Si j'ai bien compris, il s'agit bien d'une macro qui s'appelle glossaire mais qui s'exécute automatiquement dans la colonne AK ?
L'onglet paramètres crée par ROGER2327 ne sert donc à rien dans votre fichier ?

Par contre, pour modifier certains termes, comment faut-il faire ?

J'ai notamment remarqué le soucis avec le terme ancien placé avant le mot chemin.
Voilà le résultat avec votre formule pour quelques exemples :
- ANCIEN CHEMIN DE BAGES >>> BAGES (CHEMIN DE)
- ANCIEN CHEMIN DE COURSAN >>> COURSAN (CHEMIN DE)
- ANCIEN CHEMIN DE LA CAFFORTE >>> CAFFORTE (CHEMIN DE LA)
- ANCIEN CHEMIN DE NEVIAN >>> NEVIAN (CHEMIN DE)
- ANCIEN CHEMIN FONTFROIDE JONQUIER >>> FONTFROIDE JONQUIER (CHEMIN).

Il manque donc le mot ancien entre les paranthèses.

Comment faut-il faire pour résoudre ce problème ?

Et en ce qui concerne les résultats, vous devez avoir une très bonne vue (Lol) car pour quelqu'un qui pilote à l'aveugle, c'est bien ce type de résultat que j'attendais.

Merci encore.

Dans l'attente de vous lire une fois de plus.

Cordialement.

Cédric
 

david84

XLDnaute Barbatruc
Re : Gestion automatique du nom des rues écrit sous la forme : Cauquène (allée de).

Re
Si j'ai bien compris, il s'agit bien d'une macro qui s'appelle glossaire mais qui s'exécute automatiquement dans la colonne AK ?
C'est une fonction personnalisée que l'on copie dans un module et qui s'utilise comme une fonction classique d'Excel.

L'onglet paramètres crée par ROGER2327 ne sert donc à rien dans votre fichier ?
Non, c'est la macro de Roger qui utilise cette feuille. Les 2 propositions sont indépendantes.

J'ai notamment remarqué le soucis avec le terme ancien placé avant le mot chemin.
Cette syntaxe n'est pas traitée car votre définition de vos attentes du départ ne le prévoyait pas (relisez-vous vous verrez) donc si vous changez les "règles du jeu", cela devient vite problématique pour une demande comme la vôtre qui est complexe.

Je vous ai placé votre liste dans la feuille nommée "test" et ai modifié la fonction (appelée Glosssaire2 pour l'instant) :
Code:
Function Glossaire2(c As String) As String
Dim oRegExp As RegExp
Set oRegExp = New RegExp
c = Trim(c)
With oRegExp
    .Global = True
    .IgnoreCase = True
    
    .Pattern = "(^|.*\b)((?:ALL(?:É|E)E|ARCADES?|AVENUE|BALCON|BOULEVARD|BUTTE|CARREFOUR|CHAUSS(?:É|E)E|" _
    & "CHEMIN(?: COMMUNAL| RURAL| PRIV(?:É|E))?|CIT(?:É|E)|CLOS|COURS?|ESPLANADE|GALERIE|GRILLE|HAMEAU|IMPASSE|" _
    & "LIEU(?:-|\s)DIT|PARVIS|PASS(?:AGE|ERELLE)|P(?:É|E)RISTYLE|PLACE(?:TTE)?|PONT|PROMENADE|QUAI|" _
    & "ROND(?:(?:-|\s)POINT)?|PORT(?:E|IQUES?)?|RUE(?:LLE)?|(?:AUTO)?ROUTE|SENT(?:E|IER)|SQUARE|TERRASSE|VILLA|" _
    & "VOIE|Z.?A.?C?.?|Z.?I.?|Z.?U.?P?.?)\s+(?:AUX? |(?:À|A) (?:L')?|D'|DU |DES? (?:LA |L')?)?)(.*)"
    
    If .Test(c) = True Then c = Replace(Replace(.Replace(c, "$3 ($1 $2)"), " ( ", " ("), " )", ")")

    .Pattern = "\s{2,}"
    If .Test(c) = True Then c = .Replace(c, " ")
End With
Glossaire2 = Trim(c)
Set oRegExp = Nothing
End Function

Comme je l'ai modifié, il vous appartient maintenant de vérifier tous les résultats pour voir s'ils sont bons.
Pour ceux dont ce n'est pas le cas, notez manuellement le résultat attendu en colonne C.
A+
 

Pièces jointes

  • XLD_187569_Traitement de noms de rues (6) (2).xlsm
    118.3 KB · Affichages: 69

ROGER2327

XLDnaute Barbatruc
Re : Gestion automatique du nom des rues écrit sous la forme : Cauquène (allée de).

Bonjour à tous


À nemounet11.

Sûr que le travail de david84 (salutations !) vaut le déplacement !

Pour ce qui est de ma proposition, voici quelques explications :
  1. Comme dit au message #11, la procédure tata ne peut opérer que si la procédure toto a été préalablement exécutée, tandis que la procédure tutu est autonome ; on l'exécute même si toto n'a pas été exécutée ; elle fonctionne même si la colonne voie + attribut de l'onglet Paramètres est vide.
  2. Les contraintes que vous posez deviennent de plus en plus nombreuses : le tableau de paramètres se complique d'autant.
Je joins un classeur différent des précédents : je n'y ai conservé que ce qui utile à ma proposition en éliminant les comparaisons avec le travail des autres contributeurs. De cette façon, vous verrez mieux ce qui est nécessaire aux différentes solutions. (Au moins, je l'espère...)

J'ai ajouté les données fournies par david84 ainsi que les vôtres.
Pour les résultats non conformes à votre attente (il y en a nécessairement), merci de les signaler en indiquant précisément les résultats souhaités.


Bon courage.



ROGER2327
#6024


Mercredi 18 Gidouille 139 (Visitation de Mère Ubu - fête Suprême Seconde)
14 Messidor An CCXX, 6,4294h - lavande
2012-W27-1T15:25:50Z
 

Pièces jointes

  • XLD_187569_Traitement de noms de rues (6.2).xlsm
    408.4 KB · Affichages: 585

david84

XLDnaute Barbatruc
Re : Gestion automatique du nom des rues écrit sous la forme : Cauquène (allée de).

Bonsoir,
fonction Glossaire2 actualisée suite aux trouvailles de Roger comportant notamment une gestion "basique" des pluriels permettant néanmoins de ne pas surcharger le motif (au fait Roger, le Quai Quette, je vois à peu près où cela se situe. Par contre, les Karantes de la Mer, je ne situe pas vraiment...).
Les résultats divergent par endroit (notamment les informations liées aux lieux-dits) mais sans information supplémentaire, je préfère attendre :
Code:
Function Glossaire2(c As String) As String
Dim oRegExp As RegExp
Set oRegExp = New RegExp
c = Trim(c)
With oRegExp
    .Global = True
    .IgnoreCase = True
    
    .Pattern = "(^|.*\b)((?:(?:ALL(?:É|E)E|ARCADE|AVENUE|BAIE|BALCON|BOULEVARD|BUTTE|CARREFOUR|CENTRE(?: DE FORMATION)?|" _
    & "CHAUSS(?:É|E)E|CHEMIN(?: COMMUNAL| RURAL| PRIV(?:É|E))?|CIT(?:É|E)|(?:EN)?CLOS|COUR|DOM(?:.|AINE)|(?:É|E)CLUSE|" _
    & "ESPACE|ESPLANADE|GALERIE|GRILLE|HAMEAU|IMPASSE|JARDIN|LIEU(?:-|\s)DIT|LOT(?:.|ISSEMENT)|MAISON|MONT(?:É|E)E|PARVIS|" _
    & "PASS(?:AGE|ERELLE)|P(?:É|E)RISTYLE|PLACE(?:TTE)?|PONT|PROMENADE|QUAI|ROND(?:(?:-|\s)POINT)?|PARC|PLAN|PORT(?:E|IQUE)?|" _
    & "R(?:É|E)SIDENCE|(?:AUTO)?ROUTE|RUE(?:LLE)?|SENT(?:E|IER)|SQUARE|TERRASSE|VILLA|VOIE|Z.?A.?C?.?|Z.?I.?|Z.?U.?P?.?)(?:S|X)?)" _
    & "\s+(?:AUX? |(?:À|A) (?:L')?|D'|DU |DES? (?:LA |L')?)?)(.*)"
    
    If .Test(c) = True Then c = Replace(Replace(.Replace(c, "$3 ($1 $2)"), " ( ", " ("), " )", ")")
    
    .Pattern = "\s{2,}"
    If .Test(c) = True Then c = .Replace(c, " ")
End With
Glossaire2 = Trim(c)
Set oRegExp = Nothing
End Function
A+
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 504
Messages
2 089 070
Membres
104 018
dernier inscrit
Mzghal