#1 Fri 07 June 2013 15:55
- Meums
- Participant actif
- Lieu: Bordeaux
- Date d'inscription: 26 Mar 2009
- Messages: 98
Mise à jour VBA sur entités annotations
Bonjour,
Je cherche à corriger des noms sans accents par des noms avec accents.
J'utilise pour cela un code allègrement pompé sur ce forum...
Le pbl c'est qu'il ne fonctionne pas et j'ai bien l'impression que c'est en raison de la géodatabase d'annotations sur laquelle j'agis.
La fonction replace fonctionne mais je ne sais pas comment faire pour l'utiliser en une seule fois pour plusieurs corrections (il y en a tellement).
ex : replace([TextString], "marecageuse", "marécageuse")
Quelqu'un aurait-il une explication ou un début de solution (ou une confirmation de ma déprime) !
Merci (et bon WE)
Emeric
Code:
---------exemple de code (non exhaustif...)------------------------------------------------------- Dim var1, var2, var3 var1 = [TextString] var2 = Len(var1) + 1 var3 = 1 While var3 <> var2 Dim var4, var5, var6 var4 = Mid(var1, var3, 1) If var4 = "ibero" Then var5 = Mid(var1, 1, var3 - 1) var6 = Mid(var1, var3 + 1, var2 - var3 ) var1 = var5 + "ibéro" + var6 var3 = var3 + 1 ElseIf var4 = "perenne" Then var5 = Mid(var1, 1, var3 - 1) var6 = Mid(var1, var3 + 1, var2 - var3 ) var1 = var5 + "pérenne" + var6 var3 = var3 + 1 Else var3 = var3 + 1 End If Wend --------------------------------------------------------------------
Hors ligne
#2 Sat 08 June 2013 11:42
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: Mise à jour VBA sur entités annotations
Salut,
Celà me rappelle quelque chose
---> http://www.forumsig.org/showthread.php/ … ht=routine
Ce code ne permets le remplacement que d'un caractère.
Une solution possible à ton problème.
Exportation en .txt de ta table puis renommer le contenu de ton champ avec un éditeur de texte.
Un petit outil bien sympathique ---> http://www.emurasoft.com/replall/detail.htm
A+
Joël
Dernière modification par Spacejo (Sat 08 June 2013 12:26)
Hors ligne
#3 Mon 10 June 2013 09:04
- Kevin Jousseaume
- Participant assidu
- Lieu: Nanterre, région parisienne
- Date d'inscription: 20 Mar 2006
- Messages: 217
Re: Mise à jour VBA sur entités annotations
Bonjour,
Il vous "suffit" d'enchaîner les remplacements de caractères :
Code:
newValue = [CHAMP] '--> récupération de la valeur du champ newValue = replace(newValue, "marecageuse", "marécageuse") '--> remplacement de "marecageuse" par "marécageuse" newValue = replace(newValue, "appetit", "appétit") '--> remplacement de "appetit" par "appétit" [...]
Si vous possédiez une table de transformation, vous pourriez envisager un code un peu plus "joli" en effectuant une boucle sur les mots à remplacer, mais le principe resterait le même. Le post suivant vous donne une méthode en Python : http://gomputor.wordpress.com/2008/09/2 … th-python/
Je vous invite également à lire le post suivant (qui fait quelque chose de similaire tout en mettant des majuscules à chaque mot) : http://www.forumsig.org/showthread.php/ … ntu%C3%A9s
Bonne journée,
Kevin
Hors ligne
#4 Mon 10 June 2013 09:45
- Meums
- Participant actif
- Lieu: Bordeaux
- Date d'inscription: 26 Mar 2009
- Messages: 98
Re: Mise à jour VBA sur entités annotations
Bonjour Joël, bjr Kevin,
Merci pour vos réponses, je savais que ça intéresserait même le pbl est basique (c'est aussi que j'en suis là)
Je teste et vous tiens au courant
Emeric
Hors ligne
#5 Mon 10 June 2013 11:07
- Meums
- Participant actif
- Lieu: Bordeaux
- Date d'inscription: 26 Mar 2009
- Messages: 98
Re: Mise à jour VBA sur entités annotations
Re,
Joël, j'ai bien testé ReplaceInFiles mais il ne s'applique que mot par mot (ou bien j'ai raté une étape)
Kevin,
Si j'écris ce code
newValue = replace(newValue, "inioptere", "inioptère")
newValue = replace(newValue, "hiroptere", "hiroptère")
avec newValue =[TextString]
Mais, il se trouve qu'il efface tout... (heureusement que j'étais en sessionMAJ)
Si tu trouves une solution qui fonctionne et qui soit capable de prendre en compte les valeurs non traitées sans tout effacer (ex : pas d'accent sur "Barbastelle" ou "Pipistrelle commune") je suis preneur.
Merci
Emeric
Pour explication :
à la base, j'ai des suites d'espèces séparées par une virgule dans un shape. J'ai appliqué un VbNewline en remplacement des virgules sur tous les champs ce qui fait un retour ligne à chaque noms d'espèce. Je crée ensuite les étiquettes, les transforme en annotations...
Et me retrouve avec ce pbl de nom application des codes : est-ce du au VbNewline ? est-ce du à la géodatabase ?
Pour le Python, il faudrait que ce soit moins urgent pour moi pour m'y plonger (je suis sur 9.3.1)...
Hors ligne
#6 Mon 10 June 2013 11:21
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: Mise à jour VBA sur entités annotations
Salut,
Oui ReplaceinFiles ne fonctionne que sur un nom à la fois .
Par contre je ne comprends pas ton "Pour Explication".
Pourquoi travailler avec un VbNewline sur ta table?
C'est lors de la création d'étiquettes (fonction FindLabel) que tu appliques le VbNewline.
C'est dans cette manip que tu perds tes accents?
A+
Joël
Dernière modification par Spacejo (Mon 10 June 2013 11:23)
Hors ligne
#7 Mon 10 June 2013 11:42
- Kevin Jousseaume
- Participant assidu
- Lieu: Nanterre, région parisienne
- Date d'inscription: 20 Mar 2006
- Messages: 217
Re: Mise à jour VBA sur entités annotations
Emeric a écrit:
Mais, il se trouve qu'il efface tout... (heureusement que j'étais en sessionMAJ)
Si tu trouves une solution qui fonctionne et qui soit capable de prendre en compte les valeurs non traitées sans tout effacer (ex : pas d'accent sur "Barbastelle" ou "Pipistrelle commune") je suis preneur.
Je pense que tu as dû faire une erreur dans ta formule. Tu trouveras en pièce jointe une image d'une formule que j'ai testée avec succès à l'instant.
Pour "l'explication", je suis aussi interrogatif que Joël
Kevin
Hors ligne
#8 Mon 10 June 2013 12:35
- Meums
- Participant actif
- Lieu: Bordeaux
- Date d'inscription: 26 Mar 2009
- Messages: 98
Re: Mise à jour VBA sur entités annotations
Je perd les accents avant cette manip : lorsque je suis en tables de liens, j'utilise un outil (ConcateneRowValue) qui ne fonctionne qu'avec des noms sans accents, afin de récupérer une liste de nom séparé par "," dans ma table carto.
C'était un bricolage qui a ses limites (destiné à pallier un manque de compétences sous access ou autres requêtes - maintenant je sais qu'il y aurait bien mieux à faire même si je ne sais pas encore comment...) mais qui m'a permis de gagner du temps :
1 - concaténer les données des tables de liens
2 - récup par jointure de la liste des données concaténées
3 - étiquetage après passage du VbNewline
4 - transf en annotation...
Le résultat est que j'ai des classes d'annots sans accents sur pas mal d'atlas. Les principaux rendus (officiels) sont passés comme cela mais j'aimerais quand même écrire comme il faut sur mes prochains projets...
Merci à vous
E
Hors ligne
#9 Mon 10 June 2013 13:32
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: Mise à jour VBA sur entités annotations
Peux tu créer un nouveau champ dans ta geodatabase?
Tu aurais un champ avec accents et un sans.
Ton outil posant problème interviendrait sur le champ sans accents.
Hors ligne
#10 Mon 10 June 2013 14:55
- Kevin Jousseaume
- Participant assidu
- Lieu: Nanterre, région parisienne
- Date d'inscription: 20 Mar 2006
- Messages: 217
Re: Mise à jour VBA sur entités annotations
Je perd les accents avant cette manip : lorsque je suis en tables de liens, j'utilise un outil (ConcateneRowValue) qui ne fonctionne qu'avec des noms sans accents, afin de récupérer une liste de nom séparé par "," dans ma table carto.
Je ne connais pas cet outil mais je viens de le télécharger. A mon avis, le mieux serait de l'améliorer afin qu'il puisse traiter les accents. J'ai déjà été confronté à ce problème lié à l'encodage, je ne garantie pas de trouver une solution mais je peux toujours essayer.
Emeric, pourriez-vous me transmettre un extrait de vos données avec des valeurs accentuées afin que je puisse faire des tests ?
Kevin
Hors ligne
#11 Mon 10 June 2013 16:03
- Meums
- Participant actif
- Lieu: Bordeaux
- Date d'inscription: 26 Mar 2009
- Messages: 98
Re: Mise à jour VBA sur entités annotations
Merci Kevin,
Modifier l'outil pourrait servir à la communauté (de mon coté, nous allons l'abandonner, mais il a bien servi*)
Le ConcateneRowValue que tu as téléchargé est développé pour la V10. FranckB (modérateur georezo l'avait adapté pour nos besoin sur la V9.3 : http://georezo.net/forum/viewtopic.php?id=76700).
Pour info, cet outil bloque sur les caractères spéciaux (j'ignore lesquels car nous avons opté pour une écriture la plus lisse possible...). Un autre défaut est qu'il ne corrige pas les doublons.
* Concernant l'adaptation de l'outil, ça pourrait répondre à des projets dans un futur proche mais pour l'avenir, il y aurait mieux à utiliser dès que l'on est en géodatabase (je suis en shp actuellement) : un collègue a développé un outil sous access mais il n'est pas encore publié...
Pour les données, je peux faire ça par mail : une géodata d'annotations, un extrait de table de liens et un shape... mais ce sera pour demain.
Le mieux pour le moment est donc de réparer le mal qui est déjà fait : corriger les fautes d'accents sur mes géodatabases d'annotations... ce que je n'arrive pas à faire (à part mot par mot avec la fonction replace).
Merci à toi et à Joël de vous pencher sur le pbl (j'envoie un extrait demain matin)
Emeric
Hors ligne
#12 Mon 10 June 2013 17:03
- Kevin Jousseaume
- Participant assidu
- Lieu: Nanterre, région parisienne
- Date d'inscription: 20 Mar 2006
- Messages: 217
Re: Mise à jour VBA sur entités annotations
Ok
Hors ligne