Je ne dis pas non !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) !
(...)
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
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
Bravo Roger, a priori, c'est tout à fait cela !Ça fonctionne. Est-ce de la chance, ou les modifications sont-elles faites dans les règles ?
le point désigne n'importe quel caractère (mis à part le saut de ligne)
comportant(?:AVENUE|BOULEVARD|...)
(?:)
((?:AVENUE|BOULEVARD|...)\s(?:DE|DU|...)?))
(?:DE|DU|...)
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.
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
Même si je ne m'attaque pas à cela immédiatement, je retiens la proposition pour plus tard...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.
Quand vous le voulez Roger, je suis à votre disposition.Même si je ne m'attaque pas à cela immédiatement, je retiens la proposition pour plus tard...
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
, seuls le type de voie et son nom sont ramenés11 rue du 11 novembre 1918
11 novembre 1918 (rue du)
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
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+
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 :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...
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.
C'est une fonction personnalisée que l'on copie dans un module et qui s'utilise comme une fonction classique d'Excel.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 ?
Non, c'est la macro de Roger qui utilise cette feuille. Les 2 propositions sont indépendantes.L'onglet paramètres crée par ROGER2327 ne sert donc à rien dans votre fichier ?
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.J'ai notamment remarqué le soucis avec le terme ancien placé avant le mot chemin.
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
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