Fonction Substitue en chaine

Fermé
alain.terieur12 -  
 alain.terieur12 -
Bonjour,

J'ai trouvé ceci pour l'utilisation Substitue :
https://forums.commentcamarche.net/forum/affich-17553174-excel-fonction-substitue

Le problème est la restriction sur le nombre car j'ai beaucoup plus de de 7 mots à changer dans mon fichier. Existe-t-il une macro avec un tableau qui permettrait cela ?

J'ai aussi trouvé ceci (qui je pense correspond à ma recherche), mais je ne suis pas capable d'adapter le code :

Option Explicit
Option Base 1

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Abbrev
Dim changed As Range, c As Range
Dim m As Variant

Const AbbrevCol As String = "B"

Set changed = Intersect(Target, Columns(AbbrevCol))
If Not changed Is Nothing Then
Abbrev = Array("g", "grams", "ts", "teaspoons", "tb", "tablespoons", "c", "cups", "m", "mls")
Application.EnableEvents = False
For Each c In changed
m = Application.Match(c.Value, Abbrev, False)
If IsNumeric(m) Then
If m Mod 2 = 1 Then
c.Value = Abbrev(m + 1)
End If
End If
Next c
Application.EnableEvents = True
End If
End Sub

A voir également:

6 réponses

eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Bonjour,

Si tu expliquais ton besoin ?
Joindre un fichier de travail.
eric
0
alain.terieur12
 
Bonsoir,
Désolé pour ce manque d'explication.
J'ai un fichier d'adresse. J'ai réussi jusqu'ici à séparer le numéro du reste de l'adresse. J'ai donc désormais des cellules avec par exemple :
- RUE DES FLEURS
- ALLEE CONDORCET
- AVENUE DE LA REPUBLIQUE...
Je dois désormais remplacer toutes les RUE du fichier par R, les ALLEE par ALL...etc
La fonction SUBSTITUE répond à ma demande mais elle est limitée en nombre car j'ai bien plus de 7 ou 10 abréviations à remplacer dans mon fichier (AVE, ROUTE, RTE, COURS, IMPASSE, IMP...).
J'ai déjà utilisé une macro qu'un forumeur m'a gentiment fourni, dans laquelle il utilisait un tableau pour stocker les valeurs recherchées. J'imagine qu'il doit être possible de faire un tableau pour recencer mes RUE, ALLEE, AVENUE et un tableau de correspondance R, ALL, AV... pour faire les changements. Malheureusement, je n'ai pas les compétences requises en programmation.
0
via55 Messages postés 14512 Date d'inscription   Statut Membre Dernière intervention   2 746
 
Bonsoir alain

Une possibilité avec une macro simple :

1° Etablir sur une Feuil1 en colonne A la liste des types de voie et en colonne B la liste des abreviations correspondantes

2° Ouvrir l'éditeur VBA (Alt F11) et Insertion Module puis copier coller la fonction suivante :

Function remplacement(chaine)
For n = 1 To 10 'boucle sur 10 premieres lignes
typevoie = Sheets("Feuil1").Range("A" & n) ' lit le type de voie dans la cellule An de Feuil 1
abrev = Sheets("Feuil1").Range("B" & n) ' lit l'abrevation dans la cellule Bn de Feuil 1
' si le type de voie est trouvé dans chaine (l'adresse en A de Feuil 2) on remplace le type de voie par l'abrev et on sort de la sub
If InStr(chaine, typevoie) > 0 Then remplacement = Replace(chaine, typevoie, abrev): Exit For
Next n
End Function

Modifier la longueur de la boucle si necessaire (elle ne va que jusqu'à 10 lignes dans mon ex)
Modifier le nom de la feuille dans les 2 lignes suivantes si autre que Feuil1

3° Dans l'autre feuille de ton fichier où est la liste de tes adresses tu peux utiliser n'importe où la fonction remplacement (accessible comme toute autre fonction d'Excel)
en tapant en B5 par ex =remplacement(A2) tu auras r des Fleurs en B5 si tu avais rue des Fleurs en A2 de ta feuille (si dans bien sur dans ton tableau de correpondance sur la 1ere feuille tu avais mis rue en 1ere colonne et r en 2eme colonne)

Voilà je ne pense pas qu'on puisse faire bien plus simple

Cdlmnt
0
alain.terieur12
 
@via55 : merci de ta réponse. Je testerai cela demain au bureau.
Cordialement,
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Re,

Comme il s'agit d'adresses, pour les abréviation tu devrais te baser sur celles officielles pour les type de voie.
Rue ne s'abrège pas R par exemple.

Un guide avec les principales :
http://www.sirene.fr/sirene/public/variable/typvoie
Et un document plus complet : http://www.dsi.cnrs.fr/conduite-projet/phasedeveloppement/technique/etude-detaillee/modele-de-donnees/regles-enregistrement-adresses-postales.doc
Avec les bis etc en p6, et le types de voies à la fin.

eric
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
alain.terieur12
 
@Eriic : merci pour cette précision, mais les données que je dois traiter seront couplées à des données de l'IGN, qui, entre autre, utilise R pour abrévier RUE.
0
alain.terieur12
 
@via55 : merci cela fonctionne assez bien. Néanmoins, malgré la présence de certains mots dans la feuil1 associés à une abréviation, ils ne sont pas traiter dans le fichier. Une idée de la raison ?
Ex : IMPASSE reste IMPASSE au lieu de IMP, idem pour LOTISSEMENT ou ROND POINT
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Bonjour,

via ayant maladroitement cassé sa boule de cristal tu devrais déposer un fichier exemple.
eric
0
alain.terieur12
 
En ajoutant un espace avant et après les mots dans Feuil1, ça fonctionne.
0
via55 Messages postés 14512 Date d'inscription   Statut Membre Dernière intervention   2 746
 
Bonjour

Salut à Eric au passage ;)

Comme le dit bien Eric, sans fichier exemple posté sur cjoint.com avec indication ici ensuite du lien fourni impossible de deviner ce qui cloche

Post un court extrait du fichier avec seulement quelques lignes, 2/3 qui fonctionnent et 2/3 qui ne fonctionnent pas et la macro

Dans l'attente
0
alain.terieur12
 
Comme je vous le disais précédemment, il m'a suffit de rajouter un espace avant et après chaque mot pour que cela fonctionne. Merci à tous de votre aide.
0