Microsoft 365 remplacer caractères

Usine à gaz

XLDnaute Barbatruc
Bonjour à toutes et à toutes,
Je vous souhaite un bon et beau WE :)

Je bute encore une fois sur un codage que je n'arrive pas à faire.
Et je me permets de vous solliciter à nouveau.
Contexte
Nos Clients ou nvx Clients nous envoient par mail des listes de communes à prospecter.
Afin de ne pas prospecter les communes pour trop de Clients, je vérifie les communes que nous avons déjà en prospection.
Pour cela j'ai un classeur, avec un code fait avec l'enregistreur de macro, pour remplacer le maximum de cas rencontrés, qui va pas trop mal lol

Les Clients m'envoient leurs communes en écritures diverses et variées LOL
Pour que je puisse vérifier dans mon classeur, il est impératif que les communes comparées soient "rigoureusement" nommées à l'identique.

Toutefois, c'est incomplet, je gère plus de 4000 communes et je suis trop souvent obligé de passer bcp de temps pour vérifier manuellement.

J'ai obtenu de je ne sais plus qui du forum un code (mes excuses pour l'avoir oublié et mes remerciements à nouveau) qui fonctionne très bien pour certains remplacements de caractères :
VB:
Function Sans_accents(chaine As Range)
   Dim T As String, A As String, B As String
   Dim i As Integer, U As String
   If chaine.Value = "" Then Exit Function
   T = chaine.Value
   'remplacement des caractères accentués
   A = "ÀÁÂÃÄÅÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåèéêëìíîïðñòóôõöùúûüýÿçÇ"
   B = "AAAAAAEEEEIIIINOOOOOUUUUYaaaaaaeeeeiiiionooooouuuuyycC"
   For i = 1 To Len(T)
      U = InStr(1, A, Mid(T, i, 1), 0)
      If U Then Mid(T, i, 1) = Mid(B, U, 1)
   Next i
   Sans_accents = T
End Function
Malheureusement, j'ai d'autres remplacements à faire et je n'arrive pas à trouver comment faire le code
exemple :
8400 ardeuil-a-montfauxelles
8400 ardeuil_a_montfauxelles

Résultats attendus
8400 ardeuil a montfauxelles
8400 ardeuil a montfauxelles

etc...

J'ai fait un fichier test dans lequel :
- en colonne A (a4 à a38) j'ai listé les noms de communes à modifier,
- en colonne D j'ai listé les résultats attendus,

Auriez-vous la solution ?
Cela me ferait gagner un temps considérable.
Je joins le fichier test,
Avec mes remerciements,
lionel,
 

Pièces jointes

  • forum_test.xlsm
    18.3 KB · Affichages: 9
Dernière édition:
Solution
C
Re,

Non le nombre de chiffres du code postal ne me pose pas de problème

Voici la dernière version avec d'autres exemples, j'ai également pensé à traiter le cas
8400 l' Espace après l'apostrophe :p

@+

Pounet95

XLDnaute Occasionnel
Bonjour,
En retour le fichier avec une fonction Sans_accents_2
En prime, une feuille avec la liste des communes françaises pour vérifier le nom exact.
La recherche sur le code INSEE donne beaucoup de réponse pour l'exemple proposé, mais avec filtre ça devrait être rapide quand même

Claude alias Pounet95
 

Pièces jointes

  • forum_test modifié Pounet95.xlsm
    944.1 KB · Affichages: 6

Pounet95

XLDnaute Occasionnel
Re,
Effectivement, il n'y a pas qu'un caractère qui doit changer ou être remplacé.
les espaces entre noms doivent rester, un espace entre une apostrophe et une autre lettre doit être effacé. De même il faut traiter les cas de st (saint) ste (sainte), s (ou / )pour sous ou sur ?
C'est bien plus complexe d'où mon idée de joindre la liste des communes avec code insee

En ce qui concerne le code, je me sers du code ASCII de chaque caractère et de son pendant CHR
Exemple pour A le code ASCII est 65 et CHR(65) donne A

Dis-moi si tu veux que j'aille plus loin ET/OU qu'un des nombreux officiants sur ce forum y mette aussi les doigts. Je n'en serais aucune vexé.

Claude
 

Usine à gaz

XLDnaute Barbatruc
Merci Pounet95 pour m'avoir répondu :)
Je crois que c'est très ardu mais ce serait super

D'une part en modifiant les caractères :
A = "ÀÁÂÃÄÅÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåèéêëìíîïðñòóôõöùúûüýÿçÇ"
remplacement :
B = "AAAAAAEEEEIIIINOOOOOUUUUYaaaaaaeeeeiiiionooooouuuuyycC"

+ tous mes cas répertoriés = Résultats souhaités en colonne D
VB:
8400 ardeuil-a-montfauxelles
8400 ardeuil_a_montfauxelles

8400 ardeuil-aux-montfauxelles
8400 ardeuil_aux_montfauxelles

8400 ardeuil d' amont
8400 ardeuil-d' amont
8400 ardeuil_d' amont

8400 ardeuil l' amont
8400 ardeuil-l'amont
8400 ardeuil_l'amont

8400 ardeuil-de-montfauxelles
8400 ardeuil_de_montfauxelles

8400 ardeuil-des-montfauxelles
8400 ardeuil_des_montfauxelles

8400 ardeuil-du-montfauxelles
8400 ardeuil_du_montfauxelles

8400 ardeuil-et-montfauxelles
8400 ardeuil_et_montfauxelles

8400 ardeuil-en-montfauxelles
8400 ardeuil_en_montfauxelles

8400 ardeuil-la-montfauxelles
8400 ardeuil_la_montfauxelles

8400 ardeuil-le-montfauxelles
8400 ardeuil_le_montfauxelles

8400 ardeuil-les-montfauxelles
8400 ardeuil_les_montfauxelles

8400 st ardeuil les montfauxelles
8400 ste ardeuil les montfauxelles

8400 ardeuil s/montfauxelles
8400 ardeuil s/ montfauxelles

8400 ardeuil-s/montfauxelles
8400 ardeuil_s/ montfauxelles

8400 ardeuil-vers-montfauxelles
8400 ardeuil_vers_montfauxelles

Je remets le fichier test que j'ai modifié,
lionel :)
 

Pièces jointes

  • forum_test.xlsm
    19.6 KB · Affichages: 5
Dernière édition:
C

Compte Supprimé 979

Guest
Bonjour le fil

Voici la fonction corrigée ;)
VB:
Function Sans_Accent(Chaine As String)
  Dim Avec As String, Sans As String
  Dim Ind As Integer, PosAcc As Integer
  If Chaine = "" Then Exit Function
  ' Liste des caractères accentués
  Avec = "ÀÁÂÃÄÅÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåèéêëìíîïðñòóôõöùúûüýÿçÇ_-/"
  ' Liste des caractères sans accent
  Sans = "AAAAAAEEEEIIIINOOOOOUUUUYaaaaaaeeeeiiiionooooouuuuyycC   "
  ' Pour toute la longueur de la chaine
  For Ind = 1 To Len(Chaine)
    ' Recherche dans la liste accentuée, le caratère de la chaine en position Ind
    PosAcc = 0: PosAcc = InStr(1, Avec, Mid(Chaine, Ind, 1))
    ' Si le caratère est trouvé
    If PosAcc > 0 Then
      ' LE remplacer par sa correspondance sans accent
      Chaine = Replace(Chaine, Mid(Avec, PosAcc, 1), Mid(Sans, PosAcc, 1))
    End If
  Next Ind
  ' Retourner la valeur de la fonction
  Sans_Accent = Chaine
End Function

@+
 

Usine à gaz

XLDnaute Barbatruc
Re, j'ai oublié de te dire que mes Clients n'envoient jamais de codes insee ... mais des codes postaux et des noms de communes provenant de toutes sources sur le net et plus bizarres les uns que les autres LOL ... mais pas drôle du tout pour travailler :)
 

Usine à gaz

XLDnaute Barbatruc
Re-Bonjour BrunoM45,

Il doit y avoir un truc que je n'ai pas compris lol
J'ai copié ton code tel quel et j'obtiens :
Sans titre.jpg

lionel,
 

Usine à gaz

XLDnaute Barbatruc
Re-Bonjour BrunoM45,
Rectification, je me suis planté j'avais pas vu que tu avais enlevé le S de "Sans_Accents".
Super, ça fonctionne nickel :)
Un très grand merci :)

Juste les :
8400 st ardeuil les montfauxelles
8400 ste ardeuil les montfauxelles
8400 ardeuil s/montfauxelles
8400 ardeuil s/ montfauxelles
8400 ardeuil-s/montfauxelles
8400 ardeuil_s/ montfauxelles
Ne sont pas traités si ce n'est pas possible de les inclure dans le code, je peux faire un second code juste pour eux avec :
Selection.Replace What:="st", Replacement:="saint", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
etc...
Lionel :)
 

Usine à gaz

XLDnaute Barbatruc
Re-Bonjour BrunoM45,

Evidemment je pige "que couic" à ton code et je me pose une question.
Si on m'invente une appellation d'une commune, par exemple :
8400 ardeuil_trou duc_montfauxelles
veux-tu me dire comment je l'ajoute dans le code ?
pour obtenir : 8400 ardeuil montfauxelles
Merci,
lionel :)
 
Dernière édition:
C

Compte Supprimé 979

Guest
Re,

Voilà le fichier modifier pour traiter les cas de ton post #12

Pour ce qui est du "_" c'est déjà traité dans la partie "Avec" et est remplacé par un espace ;)

Nota : tout caractère unique que tu ne voudrais pas, il suffit de l'ajouter à la liste "Avec" et tu mets dans la liste "Sans" le caractère de remplacement

@+
 

Pièces jointes

  • UsineAGaz_forum_test v2.xlsm
    20.2 KB · Affichages: 5

Pounet95

XLDnaute Occasionnel
Re,
Il y a, avec la liste des communes jointe, moyen de faire un filtre élaboré (avancé) et de chercher un nom de ville, commune, village au moins approchant.
Ca permettra d'éviter de tenter une "normalisation" d'un n'importe quoi ( ton exemple .. par exemple)

Au passage , merci Bruno
Par contre il y a toujours le "d' " ou le "l' " ainsi que les cas st, ste, sur !!!!!
Il va falloir autant de ligne que de communes pour traiter les cas. Compris sur la version à l'instant !
Claude
 

Discussions similaires

Statistiques des forums

Discussions
315 098
Messages
2 116 190
Membres
112 679
dernier inscrit
Yupanki