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 Mon 09 June 2008 23:58

calito
Participant actif
Date d'inscription: 2 Jun 2008
Messages: 112

programmation ArcObjet avec VBA

Bonjour,

J'ai réaliser un p'tit programme qui me permet de passer des requêtes par attribut sur une couche, Je n'sais pas comment utiliser 'query deff' en VBA pour que je puisse voir seulement les entitées sélectionnées sur la carte.

Merci pour votre aide.

Hors ligne

 

#2 Tue 10 June 2008 09:05

Tnarbiv
Participant assidu
Lieu: Véretz
Date d'inscription: 5 Sep 2005
Messages: 392

Re: programmation ArcObjet avec VBA

Bonjour,

peut être que cela pourra t'aider :

Code:

' Get a reference to the first layer in the map
Dim pMxDoc As IMxDocument
Set pMxDoc = ThisDocument
Dim pMap As IMap
Set pMap = pMxDoc.FocusMap
Dim pFLayer As IFeatureLayer
Set pFLayer = pMap.Layer(0)
' Set the definition query of the layer
Dim pFLDef As IFeatureLayerDefinition
Set pFLDef = pFLayer
' QI from the FeatureLayer
pFLDef.DefinitionExpression = "SUB_REGION = 'Pacific'"
' set the definition expression
pMxDoc.ActiveView.Refresh

Je pense qu'il ne te reste plus qu'à mettre ta requête attributaire à la place de "SUB_REGION = 'Pacific'"

Dernière modification par Tnarbiv (Tue 10 June 2008 09:06)


Ayez le réflexe "Développement Durable": N'imprimez ce message que si nécessaire.

Hors ligne

 

#3 Wed 11 June 2008 12:11

calito
Participant actif
Date d'inscription: 2 Jun 2008
Messages: 112

Re: programmation ArcObjet avec VBA

Merci infiniment, c'est correct.
J'ai deux question:
1- Est-ce que vous pouvez me fournir un lien ou un doc numerique qui explique tres tres bien le modele ArcObjet (les schemas)?

2- J'ai fait une petite application dans laquelle j'ai passe une requête, et que j'aimerais changer la couleur des entités sélectionnées, je n'arrive pas à le faire. j'ai toujour cette erreur:Invalde use property (j'ai mal utilisé la propriété).

Voici le code:

Dim Doc As IMxDocument
Set Doc = ThisDocument
Dim mMap As IMap
Set mMap = Doc.FocusMap
Dim lLayer As IFeatureLayer
Set lLayer = mMap.Layer(0)
Dim pActiveView As IActiveView
Set pActiveView = mMap

'variable d'objet pour la couleur de selection
Dim sColor As IColor
Set sColor = New RgbColor
sColor.RGB = RGB(140, 255, 122)



Dim qQuery As IQueryFilter
Dim sSelection As IFeatureSelection
'prepare a query filter
Set qQuery = New QueryFilter
qQuery.WhereClause = "years<=" & UserForm.Slider1.Value & ""
'refresh the old selection
pActiveView.PartialRefresh esriViewGeoSelection, Nothing, Nothing
'select feautures
Set sSelection = lLayer

sSelection.SelectFeatures qQuery, esriSelectionResultNew, False

'couleur de selection
sSelection.SelectionColor.RGB


'refresh
pActiveView.PartialRefresh esriViewGeoSelection, Nothing, Nothing
--------------------------------------------------------------------------------------

Merci deja.
A+

Hors ligne

 

#4 Wed 11 June 2008 13:09

Tnarbiv
Participant assidu
Lieu: Véretz
Date d'inscription: 5 Sep 2005
Messages: 392

Re: programmation ArcObjet avec VBA

bonjour,

1
si tu es en 9.1 voici le modèle objet http://edndoc.esri.com/arcobjects/9.1/A … opOMDs.pdf
Normalement quand tu installes arcgis tu peux si tu veux installer le developer kit et à ce moment là tu as un répertoire qui se créé C:\Program Files\ArcGIS\DeveloperKit\Diagrams dans lequel tu dois pouvoir trouver un modèle objet AllDesktopOMDs.pdf

2
peux tu utiliser le deboggeur pour voir où ça plante réellement.
peux tu également vérifier ta conditon qQuery.WhereClause = "years<=" & UserForm.Slider1.Value & ""


Ayez le réflexe "Développement Durable": N'imprimez ce message que si nécessaire.

Hors ligne

 

#5 Wed 11 June 2008 13:17

Tnarbiv
Participant assidu
Lieu: Véretz
Date d'inscription: 5 Sep 2005
Messages: 392

Re: programmation ArcObjet avec VBA

la propriété SelectionColor est affectée par référence
en gros tu dois utiliser le mot clé Set devant la ligne

'couleur de selection
Set sSelection.SelectionColor.RGB

peux tu essayer ceci :
sSelection.SetSelectionSymbol = FALSE
Set sSelection.SelectionColor = sColor.RGB


Ayez le réflexe "Développement Durable": N'imprimez ce message que si nécessaire.

Hors ligne

 

#6 Wed 11 June 2008 14:15

calito
Participant actif
Date d'inscription: 2 Jun 2008
Messages: 112

Re: programmation ArcObjet avec VBA

J'ai essayé, ca'n marche pas

premierement j'ai declaré ma variable d'objet
Dim sColor As IColor
Set sColor = New RgbColor
sColor.RGB = RGB(140, 255, 122)

deuxiement, j'ai ajouter ce que tu m'avais dit:
sSelection.SetSelectionSymbol = False
Set sSelection.SelectionColor.RGB = sColor.RGB

Toujour la meme erreur: invalid use property(en selectionnant RGB)

Hors ligne

 

#7 Wed 11 June 2008 15:24

Tnarbiv
Participant assidu
Lieu: Véretz
Date d'inscription: 5 Sep 2005
Messages: 392

Re: programmation ArcObjet avec VBA

peux tu essayer ça
le fichier sur lequel je travaille est stocké au sein d'une géodatabase et ça marche alors que si le fichier est un fichier de forme cela ne marche pas

Code:

Public Sub SelectMapFeaturesAndRefresh()
    Dim pMxDoc As IMxDocument
    Dim pMap As IMap
    Dim pActiveView As IActiveView
    Dim pFeatureLayer As IFeatureLayer
    Dim pFeatureSelection As IFeatureSelection
    Dim pQueryFilter As IQueryFilter
    
    Set pMxDoc = ThisDocument
    Set pMap = pMxDoc.FocusMap
    Set pActiveView = pMap
    
    'For simplicity sake let's use the first layer in the map
    If Not TypeOf pMap.Layer(0) Is IFeatureLayer Then Exit Sub
    
    Set pFeatureLayer = pMap.Layer(0)
    Set pFeatureSelection = pFeatureLayer 'QI
    
    'Create the query filter
    Set pQueryFilter = New QueryFilter

    pQueryFilter.WhereClause = "years<=" & UserForm.Slider1.Value & ""
    
    'Invalidate only the selection cache
    'Flag the original selection
    pActiveView.PartialRefresh esriViewGeoSelection, Nothing, Nothing

    Dim pColor As IColor
    Set pColor = New RgbColor
    pColor.RGB = RGB(140, 255, 122)
    Set pFeatureSelection.SelectionColor = pColor
    
    'Perform the selection
    pFeatureSelection.SelectFeatures pQueryFilter, esriSelectionResultNew, False
    
    'Flag the new selection
    pActiveView.PartialRefresh esriViewGeoSelection, Nothing, Nothing
    
End Sub

Dernière modification par Tnarbiv (Wed 11 June 2008 15:24)


Ayez le réflexe "Développement Durable": N'imprimez ce message que si nécessaire.

Hors ligne

 

#8 Wed 11 June 2008 23:23

calito
Participant actif
Date d'inscription: 2 Jun 2008
Messages: 112

Re: programmation ArcObjet avec VBA

j'utilise un fichier de forme. Il n'est pas stocké dans une geodatabase.

Hors ligne

 

#9 Wed 11 June 2008 23:39

calito
Participant actif
Date d'inscription: 2 Jun 2008
Messages: 112

Re: programmation ArcObjet avec VBA

Oui, je viens de le faire lorsque j'utilise une geodatabase mais, je voulais le faire sans utiliser une geodatabase.

Hors ligne

 

#10 Wed 11 June 2008 23:47

calito
Participant actif
Date d'inscription: 2 Jun 2008
Messages: 112

Re: programmation ArcObjet avec VBA

OKEY OKEY, c'est bon maintenant, je viens de le faire sans intégrer le fichier de forme dans une géodatabase.

Merci infiniment.

Hors ligne

 

#11 Thu 12 June 2008 09:01

Tnarbiv
Participant assidu
Lieu: Véretz
Date d'inscription: 5 Sep 2005
Messages: 392

Re: programmation ArcObjet avec VBA

peux tu nous dire comment tu as fait ?


Ayez le réflexe "Développement Durable": N'imprimez ce message que si nécessaire.

Hors ligne

 

#12 Thu 12 June 2008 13:23

calito
Participant actif
Date d'inscription: 2 Jun 2008
Messages: 112

Re: programmation ArcObjet avec VBA

J'ai fait ce que vous m'aviez dit, mais je n'ai pas utiliser de geodatabase. J'ai ajouter une couche, et sur cette couche j'ai appliqué ma requête.
Lorsque je suis sur Windows XP, ça'n fonctionne pas, mais avec Vista ça marche
voici les codes:

Code:

Private Sub CommandButton1_Click()

Dim Doc As IMxDocument
Set Doc = ThisDocument
Dim mMap As IMap
Set mMap = Doc.FocusMap
Dim lLayer As IFeatureLayer
Set lLayer = mMap.Layer(0)
Dim pActiveView As IActiveView
Set pActiveView = mMap

Dim qQuery As IQueryFilter
Dim sSelection As IFeatureSelection

Set qQuery = New QueryFilter
qQuery.WhereClause = "Population<=100000"
    

Set sSelection = lLayer

    Dim pColor As IColor
    Set pColor = New RgbColor
    pColor.RGB = RGB(255, 10, 10)
    Set sSelection.SelectionColor = pColor

sSelection.SelectFeatures qQuery, esriSelectionResultAdd, False

pActiveView.PartialRefresh esriViewGeoSelection, Nothing, Nothing


End Sub

Je voulais l'utiliser dans une boucle. A chaque lecture d'un champ je vois que les entités selectionés avant clignote. Je crois que c'est à cause du "RFRESH". Comment je peut eviter le raffraichissement de la carte apres chaque requete?

Dernière modification par calito (Thu 12 June 2008 13:30)

Hors ligne

 

Pied de page des forums

Powered by FluxBB