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...

(...) au fait Roger, le Quai Quette, je vois à peu près où cela se situe (...)
Heureusement !

Charmant endroit... Inoubliable lorsqu'on y accède par la Rue de Monquet...

Bonne nuit !



ROGER2327
#6028


Mercredi 18 Gidouille 139 (Visitation de Mère Ubu - fête Suprême Seconde)
14 Messidor An CCXX, 7,6590h - lavande
2012-W27-1T18:22:54Z
 

nemounet11

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

Bonjour à vous ROGER2327 et david84.

Je reviens cette fois ci vers david84.
En effet, je viens de faire des test avec l'ensemble des méthodes apporté par chacun de vous.
Et je viens de modifié le dernier fichier Glossaire (Glossaire2) de david84 avec les données du dernier message posté prenant en compte les idées de ROGER2327.
Cela me donne des résultats excellents.
Voilà désormais la liste des incohérences rencontrées sur le listing des rues de ma commune :
- résidence les mas de la mer >>> (original)
--- les mas de la mer (résidence) >>> (résultat obtenu avec la formule du Glossaire2 modifié)
----- mas de la mer (résidence les) >>> (résultat souhaité)
- résidence le mail >>> (original)
--- le mail (résidence) >>> (résultat obtenu avec la formule du Glossaire2 modifié)
----- mail (résidence le) >>> (résultat souhaité)
- résidence la tonnellerie >>> (original)
--- la tonnellerie (résidence) >>> (résultat obtenu avec la formule du Glossaire2 modifié)
----- tonnellerie (résidence la) >>> (résultat souhaité)
- lotissement les amarats >>> (original)
--- les amarats (lotissement) >>> (résultat obtenu avec la formule du Glossaire2 modifié)
----- amarats (lotissement les) >>> (résultat souhaité)
- les karantes de la mer >>> (original)
--- les karantes de la mer >>> (résultat obtenu avec la formule du Glossaire2 modifié)
----- karantes de la mer (les) >>> (résultat souhaité)
- le sirius >>> (original)
--- le sirius >>> (résultat obtenu avec la formule du Glossaire2 modifié)
----- sirius (le) >>> (résultat souhaité)
- la corniche >>> (original)
--- la corniche >>> (résultat obtenu avec la formule du Glossaire2 modifié)
----- corniche (la) >>> (résultat souhaité)
Il n'y a à chaque fois qu'un seul exemple du problème rencontré.

En espérant avoir été clair, cette fois-ci, sur les résultats souhaités car a priori, je ne l'ai pas trop été jusqu'à présent.

Dans l'attente de vous lire.

Encore une fois un grand MERCI.

Cédric
 
Dernière édition:

david84

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

Bonjour,
suite à votre retour, ci-joint la fonction actualisée :
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 |LA |LES? |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

Cette fonction permet de traiter comme vous le souhaitez :
résidence les mas de la mer
résidence le mail
résidence la tonnellerie
lotissement les amarats

Par contre, ne sont pas traitées les chaînes de type :
les karantes de la mer
le sirius
la corniche

Pourquoi ?

L'écriture d'un motif est dépendant de la recherche préalable de règles communes que l'on doit retrouver dans les chaînes de caractères à traiter. En l'occurrence, le point central est la recherche initiale d'une voie de passage (rue, avenue,...) suivie éventuellement d'un ou plusieurs articles (le, la, du, de,de la,...) (on a ensuite ouvert le champ des possibles en incluant d'autres possibilités comme lotissement, square,... mais le principe reste le même).

Une fois ce point central défini, on peut ensuite délimiter ce qu'il y a avant ce point et après ce point.

Il est donc normal (et c'est même primordial) que ce qui ne relève pas de cette construction ne soit pas traité.

Il serait bien sûr possible de traiter ces données au sein de la même fonction mais :
- cela compliquerait encore plus la rédaction du motif
- la fonction n'aurait plus de sens et ne serait plus exportable telle quelle dans d'autres travaux analogues
- cela serait source d'erreur potentielle.

Je vous propose donc de rester pour cette fonction Glossaire2 dans le cadre initial que vous avez vous-même défini.

Pour régler les chaînes de caractères sortant de ce cadre suite au traitement de Glossaire2, appliquez un test avec une fonction permettant de rechercher la parenthèse ouvrante présente dans la chaîne : si elle n'existe pas c'est que Glossaire2 n'a pas modifié la chaîne initiale (logique).

Puis sur ces chaînes restantes, il sera possible d'utiliser une formule d'Excel ou d'écrire une autre fonction personnalisée qui traitera les cas ne répondant pas au motif de Glossaire2.

Qu'en pensez-vous ?
A+
 

ROGER2327

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

Bonjour à tous


Je partage l'analyse de david84. À ce niveau de complexité, il devient difficile de dégager des règles d'application générale. Ou, dit autrement, le temps de dégager ces règles et de les valider risque de devenir supérieur au temps nécessaire au traitement des cas récalcitrants.
À moins qu'il me vienne inopinément une idée, je pense en rester là.

Quoi qu'il en soit, cette discussion est intéressante. J'en tire au moins une conclusion : on ne prend jamais assez de temps avant de concevoir une base de données. Mais on en perd beaucoup à essayer de réparer les dégâts...​


Bonne soirée !


ROGER2327
#6035


Jeudi 19 Gidouille 139 (Saint Sein, tautologue - fête Suprême Quarte)
15 Messidor An CCXX, 6,2827h - chamois
2012-W27-2T15:04:43Z
 

nemounet11

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

Bonsoir à vous deux david84 et ROGER2327.
Je viens donc clôturer cette conversation qui fut très intéressante car vous avez fait un travail extraordinaire qui m'a permis aujourd'hui de terminer mon travail d'indexation.
Merci pour toute cet aide et les dernières modifications que vous avez apporté.
J'aurais en effet une ou deux choses à changer après contrôle mais vous m'avez fait gagner un temps fou.

Je penses revenir vers vous dans quelques temps pour vous faire voir un classeur excel qui permet de gérer les piquets jour et nuit des personnels de garde afin de ne pas mettre les personnels de garde trop souvent sur les mêmes piquets.
Il est en place et utilisé depuis quelques mois mais vous me direz ce que vous en pensez et m'aiderez peut être a emmener quelques améliorations comme notamment une box.

Encore une fois un très grand MERCI.

Cordialement.

Cédric
 

david84

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

Bonjour,
afin de traiter
les karantes de la mer
le sirius
la corniche
j'ai finalement inclus votre demande au sein de la fonction, non pas en l'incluant dans le motif traitant des voies de circulation, mais en incluant un autre motif à la suite.

Ainsi, il ne peut y avoir d'erreur de traitement puisque ce motif étant placé après le motif traitant des voies de circulation, les parenthèses ont déjà été incorporées à la chaîne répondant à ce motif. Le dernier motif ne prenant pas en compte les parenthèses, les chaînes traitées dans le premier motif ne peuvent de fait être traitées à nouveau.

Cette fonction étant propre à votre demande particulière et donc non transposable à un autre projet, je l'ai renommée Nemounet11 pour ne pas la confondre avec la fonction Glossaire2.

Collez-la dans un module, testez-la de votre côté et dites-nous ce qu'il en est :
Code:
Function Nemounet11(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)|MAS|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 |LA |LES? |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, " ")
    
    .Pattern = "^(les?|la)\s([ A-Z0-9]+)" 'traitement de "la corniche" ou "la corniche 11"
    If .Test(c) = True Then c = .Replace(c, "$2 ($1)")
    
End With
Nemounet11 = Trim(c)
Set oRegExp = Nothing
End Function
A+

Edit : j'ai également ajouté le terme MAS au motif initial : habitant en Provence, cet ajout me paraît indispensable...
 
Dernière édition:

nemounet11

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

C'est le top car ça marche vraiment.
Merci merci merci.
Merci de mettre à profils vos connaissances et compétences.
J'espère avoir de vos nouvelles lorsque je mettrais sur le forum mon autre fichier excel qui sert pour la gestion des piquets du personnel de garde.
D'ailleurs si j'ai un moment dans l'après-midi, je me permettrais de le mettre et expliquerais ce que j'en attends.

Encore une fois, bravo à vous.

Merci et à très bientôt.

Au plaisir de vous lire.

Cordialement.

Cédric
 

nemounet11

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

Alors, je suis de retour.
Et oui, la gestion de l'index fonctionne à merveille.
Par contre, l'enchainement de formule caché que j'avais fait pour avoir le nom abrégé des rues n'est pas au top.
Je m'explique, je pensais n'avoir besoin que de diminuer le type de voie (exemple : RUE DE LA BRIQUETTERIE >>> R DE LA BRIQUETTERIE).
Je me rends compte que cela ne s'affichera pas à certaines échelles car beaucoup trop long.
J'ai donc à nouveau besoin des lumières de DAVID 84 et ROGER2327 et tout ceux qui voudraient se joindre à nous.

Je vous explique donc ma requête.
Je souhaiterais donc que le type de voie soient diminuées mais aussi que les "de","du", "de la", "de l'", "le", "l'", "et", etc... disparaissent.
Également que les autres mots soient diminués à une seule lettre sauf le derniers mots.
Voilà quelques exemples du résultats attendus :
RUE DE LA BRIQUETTERIE >>> R BRIQUETTERIE
RUE DE LA PETITE OURSE >>> R P OURSE
RUE DE L'AGATE >>> R AGATE
RUE DE L'ANCIEN COURRIER >>> R A COURRIER
RUE DE L'ANCIENNE PORTE DE PERPIGNAN >>> R A P PERPIGNAN
RUE DE L'HÔTEL DIEU >>> R H DIEU
RUE LAURENT LAVOISIER >>> R L LAVOISIER
RUE VICTOR CONSIDERANT >>> R V CONSIDERANT
VOIE DU SILENE >>> VOI SILENE
RUE TOULOUSE-LAUTREC >>> R T-LAUTREC
RUE ROUGET DE LISLE >>> R R LISLE
RUE PIERRE ET JEAN BAPTISTE BENET >>> R P J B BENET

En fichier joint vous trouverez les derniers fichiers échangé sur le forum avec un onglet supplémentaire intitulé "Diminutifs type de voie"

Même si cela est assez dur à faire comprendre ma demande, j'espère que j'ai été clair sur le résultat attendu.

Dans l'attente de vous lire.

Cordialement

Cédric
 

Pièces jointes

  • Traitement de noms de rues (derniers echanges).xlsm
    123.6 KB · Affichages: 28
Dernière édition:

david84

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

Bonjour,
afin de gagner en temps et en efficacité, il est important de bien définir dès le départ les règles exactes.
Il faudrait donc étoffer les exemples fournis afin d'envisager les différents cas.

Vous nous parlez surtout de rue, mais qu'en est-il pour les autres types de voies de circulation (avenue, boulevard,...) et lieux (square, hameau, résidence,...) ?
Placez des exemples traitant des différents cas à traiter.

Y-a-t-il quelque chose avant la voie de circulation ou le lieu (un n° de rue par exemple) ? Si oui donnez des exemples.

D'autres part, dans les quelques cas fournis, je ne comprends pas celui-ci :
VOIE DU SILENE >>> VOI SILENE
Ne serait-ce pas plutôt V SILENE ?

Bref, soyez précis car l'élaboration de ce type de travail ne supporte pas l'approximation.

A+
 

ralph45

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

Bonjour à tous,

Je suis ce fil avec beaucoup d'intérêt (Cf. mes premiers posts sur ce forum) et constate avec plaisir que le sujet est particulièrement bien traîté. Attention, toutefois, les derniers posts prennent une direction "dangereuse" : la norme AFNOR97 qui régit la structure des adresses postales en France impose des contraintes...

Au maximum, 6 lignes de 38 caractères. Les 3 dernières doivent être saisies en majuscules, sans accent ou caractère diacritique.
Détails ici.

Et les abréviations sont acceptées, mais il ne faut pas abuser... RUE n'en a pas, étant un mot court par défaut ("R"même utilisé couramment, cela reste une aberration, comme "BLD" ou "BLVD" pour "BOULEVARD"). Et les abréviations voulues par nemounet11 dans le post #38 risquent de ne pas passer les centres de tris postaux si le fichier servait de base(s) de publipostage(s).

Il existe à "La Maison du dictionnaire" un "Dictionnaire des abréviations courantes de la langue française" où sont listées de façon exhaustive les abréviations postales. Je repasserai ultérieurement pour donner plus de détails si vous le désirez.

A+
 
Dernière édition:

david84

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

Bonjour,
Je suis ce fil avec beaucoup d'intérêt (Cf. mes premiers posts sur ce forum) et constate avec plaisir que le sujet est particulièrement bien traîté. Attention, toutefois, les derniers posts prennent une direction "dangereuse" : la norme AFNOR97 qui régit la structure des adresses postales en France impose des contraintes...

Au maximum, 6 lignes de 38 caractères. Les 3 dernières doivent être saisies en majuscules, sans accent ou caractère diacritique.
Détails ici.
D'accord sur le principe mais je ne suis pas sûr que le but de nemounet11 soit d'utiliser ce traitement à des fins d'adressage (mais peut-être ai-je mal compris).

Sinon, pour ceux que cela intéresse, ci-joint la fonction actualisée rebaptisée Nom_de_voie :
Code:
Option Explicit
'Fonction de David84 pour Excel Downloads le 12/07/2012
'http://www.excel-downloads.com/forum/187569-gestion-automatique-du-nom-des-rues-ecrit-sous-la-forme-cauquene-allee-de.html
'Cocher la référence Microsoft VBScript Regular Expressions 5.5 dans Outils=>Références
'ou utiliser un Late Binding pour déclarer l'objet :
'Dim oRegExp as Object à la place de Dim oRegExp As RegExp
'Set oRegExp=createobject("vbscript.regexp") à la place de Set oRegExp = New RegExp

Function Nom_de_voie(c As String) As String
Dim oRegExp As RegExp
Set oRegExp = New RegExp
c = Trim(c)
With oRegExp
    .Global = True 'précise si la recherche porte sur la première occurence ou sur toutes
    .IgnoreCase = True 'précise si la recherche est sensible ou non à la casse (majuscules/minuscules)
    
    .Pattern = "\s{2,}" 'épurage des espaces supérieures à 1 caractère
    If .Test(c) = True Then c = .Replace(c, " ")
    
    'Traitement de la voie
    .Pattern = "(^|.*\b)((?:ALL(?:É|E)ES?|ARCADES?|AVENUES?|BAIES?|BALCONS?|BOULEVARDS?|BUTTES?|CARREFOURS?|" _
    & "CENTRES?(?: DE FORMATIONS?)?|CHAUSS(?:É|E)ES?|CHEMINS?(?: COMMUNA(?:L|UX)| RURA(?:L|UX)| PRIV(?:É|E)S?)?|" _
    & "CIT(?:É|E)S?|(?:EN)?CLOS|COURS?|DOM(?:.|AINES?)|(?:É|E)CLUSES?|ESPACES?|ESPLANADES?|GALERIES?|GRILLES?|" _
    & "HAMEAUX?|IMPASSES?|JARDINS?|LIEUX?(?:-|\s)DITS?|LOT(?:.|ISSEMENTS?)|MA(?:S|ISONS?)|MONT(?:É|E)ES?|PARVIS|" _
    & "PASS(?:AGE|ERELLE)S?|P(?:É|E)RISTYLES?|PLACE(?:TTE)?S?|PONTS?|PROMENADES?|QUAIS?|RONDS?(?:(?:-|\s)POINTS?)?|" _
    & "PARCS?|PLANS?|PORT(?:E|IQUE)?S?|R(?:É|E)SIDENCES?|(?:AUTO)?ROUTES?|RUE(?:LLE)?S?|SENT(?:E|IER)S?|SQUARES?|" _
    & "TERRASSES?|VILLAS?|VOIES?|Z.?A.?C?.?|Z.?I.?|Z.?U.?P?.?)" _
    & "\s(?:AUX? |(?:À|A) (?:L')?|D'|DU |LA |LES? |DES? (?:LA |L')?)?)(.*)"
    
    If .Test(c) = True Then Nom_de_voie = Replace(.Replace(c, "$3 ($1$2)"), " )", ")")
End With
Set oRegExp = Nothing
End Function
On peut éventuellement factoriser plus le motif mais ce dernier perd alors en lisibilité et cela risque éventuellement d'être source d'erreur.
A+
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 492
Messages
2 088 926
Membres
103 984
dernier inscrit
maliko67