banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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.refresh

Donc 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 !


Nicolas VALLS
Géomaticen
Cabinet Pierre GRILLET

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.refresh

Y 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 if

Attention cependant car si votre champ CODEID est de type texte, il faut que votre ensemble de définition soit : "[CODEID]='" & mavaleur &"'"


Nicolas VALLS
Géomaticen
Cabinet Pierre GRILLET

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 Sub

Derniè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


Nicolas VALLS
Géomaticen
Cabinet Pierre GRILLET

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 ... hmm
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 Sub

Par 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


Nicolas VALLS
Géomaticen
Cabinet Pierre GRILLET

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

 

Pied de page des forums

Powered by FluxBB