Harmoniser les noms des communes

Bonjour à toutes et à tous,

Je vous souhaite une belle journée :)

Je viens vers vous car j'ai un codage que je ne sais pas faire, malgré mes recherches et tentatives, je n'ai pas trouvé.

Vous le verrez dans le fichier joint, je modifie les noms des communes pour qu'ils soient écrits de façon identique pour faire ensuite des comparaisons dans un autre onglet de mon fichier de travail.

Le code basique que j'ai fait est le suivant :

Sub ModifNomsCommunes()
    Sheets("Vérifie secteur").Select
    Range("z2", Range("z2").End(xlDown)).Select

    Selection.Replace What:="les ", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="le ", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="la ", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="s/", Replacement:="s ", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="é", Replacement:="e", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="è", Replacement:="e", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="ë", Replacement:="e", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="ê", Replacement:="e", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="-", Replacement:=" ", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="_", Replacement:=" ", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="ste ", Replacement:="sainte ", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="'", Replacement:=" ", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="ô", Replacement:="o", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="ù", Replacement:="u", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="ï", Replacement:="i", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="î", Replacement:="i", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="î", Replacement:="i", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="st ", Replacement:="saint ", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="'", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="â", Replacement:="a", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Range("c1").Select
End Sub

Globalement, il fonctionne bien mais il y a un souci :

à l'exécution, notamment au remplacement des "la " - "le " - "les "

Tous sont remplacés, quelque soit leur emplacement dans le nom de la commune et ça donne :

roquefort pins au lieu de roquefort les pins,

colsur loup au lieu de colle sur loup

Il faudrait que je puisse coder pour que la modif soit faite uniquement sur les 3 ou 4 1er caractères "blanc" inclu.

Auriez-vous la solution ?

6remplace-test.xlsm (19.61 Ko)

Je joins le fichier test,

Avec mes remerciements,

Amicalement,

lionel,

bonjour,

une proposition

12remplace-test.xlsm (21.22 Ko)

Bonjour h2so4,

Merci pour la réponse et pour le code ... et ça marche merci vraiment :)

ça s'écrit en colonne AA et je n'arrive pas à modifier le code pour que ce soit bien la colonne Z qui soit remplacer.

Je continue à voir ...

lionel,

bonjour,

code adapté pour résultat en colonne Z

Bonjour à tous

Une proposition par PowerQuery intégré à Excel avec une table des remplacements : soit au début (on indique l'espace après l'article) soit autant de fois que trouvé dans le texte

7remplace-text.xlsx (28.81 Ko)

Actualisation par Données, Actualiser Tout

Re-Bonjour h2so4,

Merci pour la modification

Mais ça passe quand même par la colonne AA et dans mon fichier de travail, cette colonne est occupée.

Il faudrait que "ça aille direct" en colonne "Z".

Je continue à chercher de mon côté ...

lionel,

Bonjour 78chris,

Merci pour m'avoir répondu et fait ce fichier.

Malheureusement, je ne sais pas me servir de PowerQuery qui ne répônd pas à mes besoins (du moins pour ce que j'en connais).

De plus, toutes les colonnes utilisées dans ton classeur sont déjà occupée dans mon fichier de travail.

Un grand merci

Je continue mes recherches ...

lionel,

Bonjour,

Je continue mes recherches ...

L'adaptation que je t'ai proposée ne te convient-elle pas ?

Malheureusement non et j'en suis désolé parce que le code fonctionne super bien.

Mais la colonne AA est déjà utilisée dans mon fichier de travail et ça supprime les infos de la colonne.

Je vais voir en utilisant une colonne plus loin par exemple A C ... je vais tester tout à l'heure et je te dis

lionel

re-bonjour,

la colonne AA n'est pas effacée. As-tu testé ? la macro insère une nouvelle colonne, recopie son contenu en colonne Z, puis l'efface, sans toucher aux autres colonnes

OUI j'ai vu et j'essai de voir ce que "ça fait" dans mon fichier lol mais ça coince :

sans titre

lionel

efface la macro de ton fichier et fait un copier/coller de la mienne.

Re

Bonjour 78chris,

Merci pour m'avoir répondu et fait ce fichier.

Malheureusement, je ne sais pas me servir de PowerQuery qui ne répônd pas à mes besoins (du moins pour ce que j'en connais).

De plus, toutes les colonnes utilisées dans ton classeur sont déjà occupée dans mon fichier de travail.

PowerQuery répond à tellement de besoins que ta méconnaissance t'induit en erreur...

On met la table de paramètres et le résultat où on veut donc ton histoire de colonnes déjà occupées n'a pas de sens...

Je vois que tu ne sembles même pas connaître et utiliser les tableaux structurés qui existent depuis 17 ans qui simplifient, et l'utilisation de listes, et le code (plus de

Range("z2", Range("z2").End(xlDown))

J'ai toujours du mal à comprendre qu'on ne veuille pas apprendre à tirer profit des nouveautés Excel surtout quand on a 365...

Re-Bonjour 78chris,

lol Tu viens de me décider à étudier PowerQuery

C'est vrai que ça fonctionne super bien déjà pour ma question posée.

Merci !

lionel,

Re-Bonjour h2so4,

J'ai effacé et re-copié ton code.

J'ai toujours le même souci.

Dans l'urgence du besoin, je vais faire avec le fichier de 78chris.

Mais je n'abandonne pas quand j'aurai un moment, certainement ce WE, je reviendrai dessus.

Bonne fin de journée,

lionel,

Re-Bonjour 78chris,
Encore une fois,
C'est vrai, ça fonctionne mais je viens de tester en réel et j'ai souvent une liste de plus de 600 communes à nettoyer.
J'ai augmenté les plages jusqu'à la ligne 800 et là, c'est pas terrible.
Durée de traitement de plus d'1 minute et quand on a besoin de le faire entre 25 et 50 fois par jour et d'aller vite ... c'est trop long.
Dommage, ça fonctionne bien.
lionel,

Re-Bonjour h2so4,

J'ai enfin compris comment fonctionne ton code (enfin ... à peu près) lol

Et ça fonctionne super bien.

Merci à toi

Bonne fin de soirée,

lionel,

Par contre, je n'ai pas compris pourquoi ton code remplace les premiers caractères ?

C'est pour cela que je ne peux le modifier car ça ne fonctionne pas pour "les ".

Voudrais-tu m'expliquer quand tu aura un petit moment ?

Je te remercie,

lionel,

bonsoir,

C'est pour cela que je ne peux le modifier car ça ne fonctionne pas pour "les ".

au temps pour moi, il y a un espace de trop dans " [les " (en première position) qui fait que cela ne fonctionne pas, il suffit de l'enlever et cela devrait le faire.

ceci dit, pour pouvoir identifier les séquences en début de chaîne de caractère, j'insère en première position de tous les noms de commune le caractère [.

après je remplace toutes les occurrences de [les ,[la ou [le par du vide, Ainsi seuls les les,la, le en début de chaine sont éliminés. Quand tous les remplacements sont terminés, je me débarrasse du caractère [ pour remettre les noms de communes sous la forme qui convient.

Re

Merci de me répondre aussi tard.

"au temps pour moi, il y a un espace de trop dans " [les" (en première position) qui fait que cela ne fonctionne pas, il suffit de l'enlever et cela devrait le faire."

Je ne pense pas pas car il doit trouver le "les+son espace" sinon il ne le trouve pas et il doit remplacer le "les et son espace" par "rien".

On verra ça demain si tu veux bien car je dois me reposer commençant tôt demain.

Merci encore pour ta gentillesse

lionel,

Rechercher des sujets similaires à "harmoniser noms communes"