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 16 February 2009 16:40

jkranklader
Participant occasionnel
Date d'inscription: 16 Feb 2009
Messages: 15

arcgis 9.3 arcview Appel d'une Arctoolbox dans une fonction vba.

Bonjour à tous,



je vous envois un appel à l'aide au niveau de la programmation vba. Voila je cherche à développer une application qui à partir d'une sélection graphique me permet de retourner automatiquement mes code INSEE de communes dans une requête SQL. Jusque là rien de compliqué sauf que les requêtes SQL en question doivent être automatiquement ajoutée dans une toolbox que j'ai crée au préalable. Voici mes deux fonctions:



Code:

Private Sub Etude_auto_MouseDown(ByVal button As Long, ByVal shift As Long, ByVal x As Long, ByVal y As Long)



Dim pmxdoc As IMxDocument
Set pmxdoc = ThisDocument



Dim pmap As IMap
Set pmap = pmxdoc.FocusMap



Dim ptable As ITable
Set ptable = pmap.Layer(0)



Dim psfilter As ISpatialFilter
Set psfilter = New SpatialFilter
Set psfilter.Geometry = pmxdoc.CurrentLocation
psfilter.SpatialRel = esriSpatialRelWithin



Dim pf_selec As IFeatureSelection
Set pf_selec = ptable

pf_selec.SelectFeatures psfilter, esriSelectionResultNew, False
pmxdoc.ActiveView.Refresh



Dim p_selset As ISelectionSet
Set p_selset = pf_selec.SelectionSet



Dim pcursor As ICursor
Set pcursor = ptable.Search(psfilter, False)



Dim prow As IRow
Set prow = pcursor.NextRow



Dim msg As String
msg = ""



Dim num_champ As Byte
num_champ = ptable.FindField("INSEE")



If prow Is Nothing Then
    msg = "Cliquez sur une commune svp!!"
Else
    Call opengptool
End If



MsgBox msg, , "selection"



End Sub






Sub opengptool()



Dim puid As New UID
Dim patbext As iarctoolboxextension
Dim patb As IArcToolbox
Dim ptool As IGPTool
Dim pparams As IArray
Dim pparameter As IGPParameter
Dim pparamedit As IGPParameterEdit
Dim pdatatype As IGPDataType
Dim svalue As String
Dim trackcancel As ITrackCancel
Dim penvmgr As IGPEnvironmentManager
Dim pmess As IGPMessages



puid = "esrigeoprocessingui.arctoolboxextension"



Set patbext = Application.FindExtensionByCLSID(puid)
Set patb = patbext.arctoolbox
Set ptool = patb.gettoolbynamestring("Etude_auto")
Set params = ptool.ParameterInfo



'premier paramètre

Set pparameter = pparams.Element(0)
Set pparamedit = pparameter
Set DataType = pparameter.DataType
svalue = ""
Set pparamedit.Value = pdatatype.CreateValue(svalue)



'second paramètre

Set pparameter = pparams.Element(1)
Set pparmedit = IGPParameter
Set DataType = pparameter.DataType
svalue = ""
Set pparamedit.Value = pdatatype.CreateValue(svalue)



Set ptrackcancel = New CancelTracker
Set penvmgr = New GPEnvironmentManager
Set pmess = ptool.Validate(pparams, False, penvmgr)
ptool.Execute pparams, ptrackcancel, penvmgr, pmess



End Sub

Mon problème est le suivant:



Le vba de mon arcview ne me reconnaît pas les caractéristiques de certaines variables (en rouge) en gros elles ne sont pas disponibles dans ma liste déroulante lorsque je tape mon code.



Je vous remercie d'avance. Sivous trouvez d'autres problèmes veuillez me le signifier...JE SUIS ENCORE NOVICE DANS LA MATIERE...



cordialement jkranklader.


[edit modération : Utilisez la balise "code"]

Hors ligne

 

#2 Tue 17 February 2009 11:19

jkranklader
Participant occasionnel
Date d'inscription: 16 Feb 2009
Messages: 15

Re: arcgis 9.3 arcview Appel d'une Arctoolbox dans une fonction vba.

C'est encore moi!!!! dsl les couleurs ne se sont pas affichées,. Mon premier problème a été résolu, il s'agissait d'une référence qui n'était pas activée!! (ESRI GeopocessingUI Object Library)

Je suis entrer maintenant dans une phase de débugage. désormais l'erreur se situe dans :

set ptool = patb.gettoolbynamestring(Etude_auto) 

le message d'erreur est : automation erreur.

Est-il possible que je n'ai pas bien bien placée ma toolbox lors de sa création ou faut-il que j'ajoute des informations supplémentaires pour la située (un chemin de référence par exemple)? cordialement jkranklader

Hors ligne

 

#3 Thu 19 February 2009 08:42

jkranklader
Participant occasionnel
Date d'inscription: 16 Feb 2009
Messages: 15

Re: arcgis 9.3 arcview Appel d'une Arctoolbox dans une fonction vba.

Tous les problèmes ayant été résolu voici la suite :

Maintenant le problème le plus interessant va faire son apparition, La toolbox ouvre une boîte de dialogue contenant quatre paramètres. Dans l'ordre on obtient:

1 - Une requête sql.
2 - Un chemin de réference à inscrire.
3 - Une requête sql.
4 - Un Chemin de référence.

Sur le code de base que j'ai fourni sur le forum, la fonction permettant d'executer la toolbox est appeler par une fonction de sélection. L'outil devrait dans l'ideal selectionner plusieurs entités d'une couche et donner une valeur de chacune des selections (le code_INSEE de chaque communne par exemple) puis en suite répercuté ces valeurs dans les selections SQL de la toolbox (d'où le challenge pour un novice).

l'Environnement dans le quel je me trouve pour le moment est le suivant, il y à une couche de contour de commune dans laquelle je dois faire mes sélections.  Ma programmation me permet pour l'instant de sélectionner une seule commune est de lancer la procédure d'appel de la toolbox (qui bugue car je n'ai pas rempli les lignes svalue correspondant au requêtes SQL)

Je m'explique, l'outil nous permettra de retourner une ou plusieurs communes dans une requête SQL qui devra donc s'allonger ou se raccourcir en conséquence voila tout le problème!! La programmation devra comprendre des boucles while une dans la sélection pour retourner plusieurs communes et une à chaque requêtes SQL. (les requêtes sont presque les mêmes). La valeur que l'on cherche à renvoyer est le code_INSEE des communnes.

voici un exemple de requête SQL :

"INSEE"= '85001' AND "INSEE"= '85002' AND "INSEE" = '85003'

la deuxième requête sera:

"INSEE2"= '85001' AND "INSEE2"= '85002' AND "INSEE2" = '85003'

voila je pense que je peux me mettre à réflechir intensémment sur le problème, ma première difficulté va être de sélectionner plusieurs communes dans mon mousedown sans que l'outil s'éxecute à chaque communne sélectionnée. 

cordialement jkranklader.

Hors ligne

 

Pied de page des forums

Powered by FluxBB