#1 Fri 08 August 2008 10:14
- GeoMax
- Participant occasionnel
- Lieu: Toulouse
- Date d'inscription: 15 Feb 2006
- Messages: 21
Définir un ensemble de définition de façon automatique
Bonjour à tous,
Je cherche depuis un bon moment à définir de façon automatique les ensembles de définition de toutes les couches d'un projet donné...
Je dispose d'un projet "modèle" dans lequel j'ai prédéfini l'ensemble de mes couches et leur symbologie.
Lorsque je commence un nouveau projet je copie ce "modèle" (mxd) et j'applique sur chacune des couches un ensemble de définition.
Toutes les couche dispose d'un champ "CODEID" sur lequel j'applique le filtre.
Je cherche à réaliser un script qui listerait les couches de mon projet et appliquerait sur chacunes d'elles le même ensemble de définition.
J'ai cherché à partir des différent outils disponible pour Arctoolbox mais je n'ai rien trouvé...
J'ai recherché sur ce forum mais peu de sujets parlent des ensembles de définition... et aucun d'un automatisme possible...
Quelqu'un aurait-il une piste pour m'orienter ? Un bout de code a adapter ?
Faut-il passer par du VB ?
Merci d'avance :-)
Dernière modification par GeoMax (Tue 21 December 2010 22:35)
Hors ligne
#2 Fri 08 August 2008 11:34
- nicolas valls
- Participant assidu
- Date d'inscription: 28 Oct 2005
- Messages: 154
Re: Définir un ensemble de définition de façon automatique
Bonjour,
Par vba ca devrait donner quelque chose comme :
Code:
Dim mondoc As IMxDocument, i As Integer
dim monensemblededefinition as iFeatureLayerDefinition
Set mondoc = ThisDocument
for i=0 to mondoc.FocusMap.LayerCount -1
set monensemblededefinition = mondoc.FocusMap.layer(i)
monensemblededefinition.DefinitionExpression="[CODEID]=14" 'c'est un exempl, il faut copier coller votre ensemble de definition
Next i
mondeoc.activeview.refreshDonc après il suffit de créer un bouton dans le normal.mxt (pour qu'il soit accessible par défaut dans arcmap) qui lance cette procédure.
En espérant que cela vous aide !
Hors ligne
#3 Fri 08 August 2008 11:41
- GeoMax
- Participant occasionnel
- Lieu: Toulouse
- Date d'inscription: 15 Feb 2006
- Messages: 21
Re: Définir un ensemble de définition de façon automatique
Merci beaucoup pour cette réponse très rapide et très claire !!
Je vais tester ça au plus vite.
Merci
Hors ligne
#4 Fri 08 August 2008 12:34
- GeoMax
- Participant occasionnel
- Lieu: Toulouse
- Date d'inscription: 15 Feb 2006
- Messages: 21
Re: Définir un ensemble de définition de façon automatique
Le script marche parfaitement !
il y a juste un "e" qui s'est glissé dans le dernier "mondoc"
Code:
Dim mondoc As IMxDocument, i As Integer
dim monensemblededefinition as iFeatureLayerDefinition
Set mondoc = ThisDocument
for i=0 to mondoc.FocusMap.LayerCount -1
set monensemblededefinition = mondoc.FocusMap.layer(i)
monensemblededefinition.DefinitionExpression="[CODEID]=14" 'c'est un exempl, il faut copier coller votre ensemble de definition
Next i
mondoc.activeview.refreshY aurait-il par hasard un moyen pour que la valeur de l'ensemble de définition, ici "14" soit saisie par l'utilisateur ...? :-)
Merci encore ;-)
Dernière modification par GeoMax (Tue 21 December 2010 22:36)
Hors ligne
#5 Fri 08 August 2008 12:44
- nicolas valls
- Participant assidu
- Date d'inscription: 28 Oct 2005
- Messages: 154
Re: Définir un ensemble de définition de façon automatique
Oui en faisant comme ca :
je remets tout le code
Code:
Dim mondoc As IMxDocument, i As Integer
dim monensemblededefinition as iFeatureLayerDefinition
dim mavaleur as string 'si la valeur est un chiffre il faut mettre as integer
mavaleur = InputBox("Quelle valeur voulez vous ?", "Ensemble de définition", "valeur par défaut")
if mavaleur<>"" then
Set mondoc = ThisDocument
for i=0 to mondoc.FocusMap.LayerCount -1
set monensemblededefinition = mondoc.FocusMap.layer(i)
monensemblededefinition.DefinitionExpression="[CODEID]=" & mavaleur & "" 'c'est un exempl, il faut copier coller votre ensemble de definition
Next i
mondoc.activeview.refresh
else
Msgbox "Vous avez annulé"
end ifAttention cependant car si votre champ CODEID est de type texte, il faut que votre ensemble de définition soit : "[CODEID]='" & mavaleur &"'"
Hors ligne
#6 Fri 08 August 2008 12:46
- GeoMax
- Participant occasionnel
- Lieu: Toulouse
- Date d'inscription: 15 Feb 2006
- Messages: 21
Re: Définir un ensemble de définition de façon automatique
J'ai trouvé, je poste ici pour en faire profiter les autres ^^
Code:
Private Sub UIButtonControl1_Click()
Dim mondoc As IMxDocument, i As Integer
Dim monensemblededefinition As IFeatureLayerDefinition
Dim message, title, defaultvalue As String
Dim saisie As String
message = "Code ID ?"
title = "Assisant carto"
defaultvalue = "ID"
saisie = InputBox(message, title, defaultvalue)
Set mondoc = ThisDocument
For i = 0 To mondoc.FocusMap.LayerCount - 1
Set monensemblededefinition = mondoc.FocusMap.Layer(i)
monensemblededefinition.DefinitionExpression = "[CODEID]='" + saisie + "'"
Next i
mondoc.ActiveView.Refresh
End SubDernière modification par GeoMax (Tue 21 December 2010 22:36)
Hors ligne
#7 Fri 08 August 2008 14:03
- nicolas valls
- Participant assidu
- Date d'inscription: 28 Oct 2005
- Messages: 154
Re: Définir un ensemble de définition de façon automatique
La réponse que j'ai faite au dessus de la votre permet d'avoir un code plus propre et de pouvoir contrôler la saisie de l'utilisateur
Hors ligne
#8 Fri 08 August 2008 14:08
- GeoMax
- Participant occasionnel
- Lieu: Toulouse
- Date d'inscription: 15 Feb 2006
- Messages: 21
Re: Définir un ensemble de définition de façon automatique
Merci !
J'ai également corrigé le précédent
[EDIT]
Ce script bug lorsque l'on utilise des groupes de couche apparemment ... ![]()
On obtient le message d'erreur suivant :
Run-time error '13':
Type mismatch
Y-a-t'il un moyen de pallier a ça ...?
Dernière modification par GeoMax (Tue 21 December 2010 22:36)
Hors ligne
#9 Fri 08 August 2008 14:56
- nicolas valls
- Participant assidu
- Date d'inscription: 28 Oct 2005
- Messages: 154
Re: Définir un ensemble de définition de façon automatique
Effectivement quand les couches sont groupées ca ne marche pas donc voila le nouveau code :
Code:
Sub test()
Dim mondoc As IMxDocument, i As Integer
Dim monensemblededefinition As IFeatureLayerDefinition
Dim message, title, defaultvalue As String
Dim saisie As String
Dim macarte As IMap, macouche As ILayer
Dim identifiant As New UID
Dim collection_couche As IEnumLayer
message = "Code ID ?"
title = "Assisant carto"
defaultvalue = "ID"
saisie = InputBox(message, title, defaultvalue)
Set mondoc = ThisDocument
Set macarte = mondoc.FocusMap
identifiant = "{E156D7E5-22AF-11D3-9F99-00C04F6BC78E}"
Set collection_couche = macarte.Layers(identifiant, True)
collection_couche.Reset
Set macouche = collection_couche.Next
Do While Not macouche Is Nothing
Set monensemblededefinition = macouche
monensemblededefinition.DefinitionExpression = "[CODEID]='" & saisie & "'"
Set macouche = collection_couche.Next
Loop
mondoc.ActiveView.Refresh
End SubPar contre attention ça ne mettra une ensemble de définition qu'aux couches carto (pas aux tables de géodatabase ni Dbase).
Voila, tenez moi au courant si ça fonctionne
Hors ligne
#10 Fri 08 August 2008 15:12
- GeoMax
- Participant occasionnel
- Lieu: Toulouse
- Date d'inscription: 15 Feb 2006
- Messages: 21
Re: Définir un ensemble de définition de façon automatique
Ça marche parfaitement bien !
Merci beaucoup pour votre aide
Dernière modification par GeoMax (Tue 21 December 2010 22:36)
Hors ligne


