Pages: 1
- Sujet précédent - arcgis 9.3 arcview Appel d'une Arctoolbox dans une fonction vba. - Sujet suivant
#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 SubMon 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
Pages: 1
- Sujet précédent - arcgis 9.3 arcview Appel d'une Arctoolbox dans une fonction vba. - Sujet suivant

