Fonction Substitue en chaine

Fermé
alain.terieur12 - 26 juin 2014 à 19:11
 alain.terieur12 - 27 juin 2014 à 14:27
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 mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247
26 juin 2014 à 19:41
Bonjour,

Si tu expliquais ton besoin ?
Joindre un fichier de travail.
eric
0
alain.terieur12
26 juin 2014 à 20:37
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 14502 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 9 décembre 2024 2 737
26 juin 2014 à 21:34
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
26 juin 2014 à 22:00
@via55 : merci de ta réponse. Je testerai cela demain au bureau.
Cordialement,
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247
26 juin 2014 à 23:49
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
27 juin 2014 à 07:28
@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
@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 mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247
27 juin 2014 à 11:38
Bonjour,

via ayant maladroitement cassé sa boule de cristal tu devrais déposer un fichier exemple.
eric
0
alain.terieur12
27 juin 2014 à 11:44
En ajoutant un espace avant et après les mots dans Feuil1, ça fonctionne.
0
via55 Messages postés 14502 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 9 décembre 2024 2 737
27 juin 2014 à 11:47
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
27 juin 2014 à 14:27
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