Fonction Substitue en chaine
Fermé
alain.terieur12
-
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
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:
- Fonction Substitue en chaine
- Fonction si et - Guide
- Chaine tnt gratuite sur mobile - Guide
- Chaine radio - Télécharger - Médias et Actualité
- Plus de chaine tv - Guide
- Chaine musique bouygues - Accueil - Guide TV et vidéo
6 réponses
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.
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.
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
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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
@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.
@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
Ex : IMPASSE reste IMPASSE au lieu de IMP, idem pour LOTISSEMENT ou ROND POINT
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
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