Remplacer plusieurs mots par un autre
Bonjour,
Dans mon fichier, des noms ont été mal saisis (problème d'orthographe et/ou d'accents)
Je pourrais utiliser la commande standard "rechercher/remplacer" mais, j'ai énormément de valeurs à modifier.... et je ne pourrais en conserver trace si un autre fichier me parvenait..
Je pensais utiliser un bout de macro s'appuyant sur sur la question
Sub Remplace()
Dim J As Long
With Sheets("Données")
For J = 1 To .Range("A" & Rows.Count).End(xlUp).Row
Cells.Replace what:=.Range("A" & J), replacement:=.Range("B" & J), lookat:=xlWhole
Next J
End With
End SubMon classeur xls contient un onglet "adresse_nonvalide" où la colonne B est à modifier (15600 lignes)
un autre "alias", avec en col A l'ancien texte et en colonne B le nouveau texte (104 lignes)
Totalement novice en VBA, je ne sais comment transposer le code Banzai64 pour qu'il s'applique à ma situation.
Je ne sais quoi faire.
Merci à la bonne âme qui m’aidera.
Bonjour,
Ma question n'a pas hélas été résolue de façon "VBA".
Personne n'est venu à mon aide alors j'ai poté pour la solution manuelle : Rechercher/remplacer
Tous les champs tapés en majuscules ont retrouvé une formé plus courante '1er lettre en majuscule puis le reste du texte en minuscule). Tous les prénoms ont ainsi retrouvé leur accent
RENE --> René
LEON --> Léon
et ainsi pour 164 occurences
J'espère à ne pas faire ce ceci trop souvent... car bonjour leTMS en fin de journée
ou alors tomber dans le code VBA et faire une macro salvatrice.
Merci à la bonne âme qui m’aidera à faire cette macro
(ou m'expliquer comment il faut la faire, charge à moi de trouver les syntaxes dans les nombreux exmples sur ce forum)
Corinne
Bonjour,
je reviens vers le forum car comme je le pressentais, il me faut refaire le travail ! .
cad, rajouter les accents sur TOUS les mots en majuscule, rajouter les apostrophes, les traits d'union .... et j'en passe.
Je restais sur mon idée initiale de faire dans une feuille2 une colonne du mot à changer et mot nouveau
faire un boucle VBA qui cherche dans la colonne de la feuille1, le mot à changer et recopier le contenu dans une autre cellule
mais trop dur. (trop de lacune)
alors,
je prends la solution longue et fastidieuse de tous écrire derrière un la syntaxe "feuil.Cells.Replace What:=" ancienMOT", Replacement:=" nvMOT "
Le recherche/remplacer se fixe sur des suites de caractères, cela peut entrainer des erreurs complémentaires...
exemple avec ANDRE :
prénom à lui tout seul qui doit retrouver un É final mais ..... aussi la terminaison de ALEXANDRE qui du coup, se voit orné lui aussi d'un É final. Je fais le changement dans la foulée....
certes, vous me direz, c'est du petit bricolage mais pas de TMS en fin de traitement et je peux conserver cette liste pour de nouveaux traitements
Public Sub Rempl()
'extrait .....
Dim feuil As Worksheet
For Each feuil In ThisWorkbook.Worksheets
feuil.Cells.Replace What:=" JUSSE", Replacement:=" JUSSÉ "
feuil.Cells.Replace What:=" PRE", Replacement:=" PRÉ"
feuil.Cells.Replace What:=" TIZE", Replacement:=" TIZÉ"
feuil.Cells.Replace What:=" ABBE ", Replacement:=" ABBÉ "
feuil.Cells.Replace What:="AEROPORT", Replacement:="AÉROPORT"
feuil.Cells.Replace What:="BREAL", Replacement:="BRÉAL"
feuil.Cells.Replace What:="ANDRE ", Replacement:="ANDRÉ "
feuil.Cells.Replace What:="ALEXANDRÉ ", Replacement:="ALEXANDRE "
feuil.Cells.Replace What:="ANDREE ", Replacement:="ANDRÉE "
feuil.Cells.Replace What:="ANGELE", Replacement:="ANGÈLE"
feuil.Cells.Replace What:="ANGELIQUE", Replacement:="ANGÉLIQUE"
feuil.Cells.Replace What:="EUGENE", Replacement:="EUGÈNE"
feuil.Cells.Replace What:="LA HAUTIERE", Replacement:="LA HAUTIÈRE"
feuil.Cells.Replace What:="LA MAILLARDIERE", Replacement:="LA MAILLARDIÈRE"
feuil.Cells.Replace What:="LA MANDARDIERE", Replacement:="LA MANDARDIÈRE"
feuil.Cells.Replace What:="LA MARTINIERE", Replacement:="LA MARTINIÈRE"
feuil.Cells.Replace What:="D OLIVET", Replacement:="D'OLIVET"
feuil.Cells.Replace What:="D ANJOU", Replacement:="D'ANJOU"
feuil.Cells.Replace What:="D HELSINKI", Replacement:="D'HELSINKI"
feuil.Cells.Replace What:="D IRLANDE", Replacement:="D'IRLANDE"
feuil.Cells.Replace What:="D INKERMANN", Replacement:="D'INKERMANN"
feuil.Cells.Replace What:="D ARNHEM", Replacement:="D'ARNHEM"
feuil.Cells.Replace What:="D ESPAGNE", Replacement:="D'ESPAGNE"
feuil.Cells.Replace What:="L ORME", Replacement:="L'ORME"
feuil.Cells.Replace What:="L ORSON", Replacement:="L'ORSON"
feuil.Cells.Replace What:="L HOTEL", Replacement:="L'HÔTEL"
feuil.Cells.Replace What:="L HERMINE", Replacement:="L'HERMINE"
feuil.Cells.Replace What:="SAINT MALO", Replacement:="SAINT-MALO"
feuil.Cells.Replace What:="SAINT MARTIN", Replacement:="SAINT-MARTIN"
feuil.Cells.Replace What:="SAINT MELAINE", Replacement:="SAINT-MELAINE"
feuil.Cells.Replace What:="SAINT MICHEL", Replacement:="SAINT-MICHEL"
feuil.Cells.Replace What:="ST SULPICE", Replacement:="SAINT-SULPICE"
feuil.Cells.Replace What:="ST THOMAS", Replacement:="SAINT-THOMAS"
feuil.Cells.Replace What:="ST VINCENT", Replacement:="SAINT-VINCENT"
feuil.Cells.Replace What:=" NOEL", Replacement:=" NOËL"
feuil.Cells.Replace What:="LA NOE", Replacement:="LA NOË"
feuil.Cells.Replace What:=" LAENNEC ", Replacement:=" LAENNËC "
feuil.Cells.Replace What:=" CITROEN", Replacement:=" CITROËN"
Next feuil
End SubCela a le mérite de fonctionner sur toutes les feuilles et colonnes de mon classeur (j'ai tenté de faire le remplacement sur une seule colonne d'une feuille ciblée, j'ai abandonné également...
On peut faire certainement plus simple et plus rapide mais, je fais avec mes moyens ........... et je partage la solution
Cette énumération de replace-replacement a certainement une alternative dans tout le potentiel VBA.
si l'un d'entre-vous à une réponse plus "professionnelle", je suis preneuse bien évidemment.
Cordialement
Corinne
Bonsoir Corinne,
Rassure-toi, on va pas te laisser refaire le travail plusieurs fois par jour... Mais pour répondre au plus juste à ta demande,
pourrait-on voir une partie de ton fichier ?
Ce qui m'intéresse avant tout, c'est d'analyser l'ensemble des données et d'étudier les diverses solutions envisageables et celles à éviter. A mon avis, tu n'échapperas pas à la table de conversion, mais il doit être possible de la réduire, tout dépend du type de données qu'il y a dans ta base et de la façon quelles sont structurées.
Si j'arrive à te proposer une solution il n'est pas certain qu'elle soit aussi rapide, par contre, elle devrait être plus fiable... Enfin, je l'espère.
Bonsoir,
mes données sont très simples en soit ... je reçois selon des sources très diverses, des fichiers d'adresse que je dois standardiser.
J'extrais le libellé de la voie et je tente toutes les corrections possibles avant de les exploiter par ailleurs
le problème majeur est sur la saisie en majuscule des noms des voies. On y oublie les accents, les apostrophes....
ensuite, viennent toutes les erreurs de saisies des noms en eux même et les abréviations à regarder de plus prêts.
J'ai commencé une table de correspondance "motsclés : ancien nom / nouveau nom)
et j'ajoute la ligne dans la macro
certes c'est long et répétitif mais au moins, je liste les erreurs
tout en créant d'autre 'mon exemple Andre est le plus parlant.
Si tu peux m'apporter des solutions pour alléger la tâche, pour la rendre plus fiable, je prends
Merci
Corinne
Bonsoir Corinne,
Avant de faire quoi que se soit, j'ai besoin d'avoir des informations précises sur l'origine des fichiers adresses :
On ne traite que les libellés de voie, les nom de rue ?
La feuille LibVoie est-il représentatif des fichiers que tu reçois chaque jour ? En d'autres termes, y-a-t-il qu'une seule colonne à traiter ? Est-ce toujours la même ?
Dans ton exemple tu n'as pas des adresses du type RUE DU MARECHAL FOCH ? Ce ne sont que des extraits de nom de rue ? (apparement beaucoup de nom de personne)
Sont-ils tous identiques ou bien ils sont très différents ?
Pourrais-je avoir un de tes fichiers que tu reçois ? Si tu ne souhaites pas mettre ce fichier sur le forum, Envoie-moi un message privé, je te communiquerai mon adresse électronique pour que tu puisses me le communiquer.
Si je te pose autant de questions, c'est pour la solution réponde le plus précisément au problème, prenons par exemple un des problèmes qui t'est cher : ANDRE, si tu reçois des fichiers à l'identique du fichier que tu as mis à disposition sur ce forum, on pourrait sans doute tester la position du mot ANDRE avant de le remplacer, du coup, on n'écrira jamais ALEXANDRÉ, par contre, si dans le fichier il y a RUE ANDRE GIDE, alors on pourrait tester " ANDRE" avec un espace avant.
Dans l'attente de réponse, voici le code de Banzaï64 adapté à ton fichier :
Sub Remplace()
Dim Lig As Long
With Worksheets("motscles")
For Lig = 2 To .UsedRange.Rows.Count
Worksheets("LibVoie").Cells.Replace what:=.Cells(Lig, "A"), replacement:=.Cells(Lig, "B") ' , lookat:=xlWhole
Next Lig
End With
End SubMaintenant une petite astuce pour ALEXANDRE et les cas identiques, Après avoir modifier ANDRE en ANDRÉ, ajoute une ligne ALEXANDRÉ en colonne A et ALEXANDRE en colonne B. Je suis conscient que ce n'est pas idéal, mais cela te dépannera avec l'utilisation de ce code.