#1 Tue 24 February 2009 15:20
- jkranklader
- Participant occasionnel
- Date d'inscription: 16 Feb 2009
- Messages: 15
Arcgis 9.3 - Probleme dans l'appel d'une toolbox (VBA)
Bonjour à tous,
Je suis en cours de développement pour appeler une arctoolbox à l'aide de vba. Sur le site du support Esri, j'ai trouvé une méthode que j'ai couplée à une programmation que j'ai effectué et je n'arrive pas à bien faire fonctionner la toolbox.
La situation est la suivante : sur toute les communnes du département je veux en selectionner plusieurs, la sélection va automatiquement me retourner la requête qui sera ensuite affichée dans la toolbox.
Problème : La sélection et la concaténation pour faire la requête marche bien, mais rien ne s'affiche dans les paramètres quand la toolbox s'ouvre.
Voici mon code, la fonction Etude_auto correspond à la sélection, la fonction opengptool correspond à l'appel de la toolbox :
Code:
Dim pmxdoc As IMxDocument
Dim pmap As IMap
Dim ptable As ITable
Dim pRline As IRubberBand
Dim pLine As IGeometry
Dim pPoints As IPointCollection
Dim psfilter As ISpatialFilter
Dim pf_selec As IFeatureSelection
Dim p_selset As ISelectionSet
Dim pcursor As ICursor
Dim prow As IRow
Dim msg As String
Dim num_champ As Byte
Private Sub Etude_auto_MouseDown(ByVal Button As Long, ByVal Shift As Long, ByVal X As Long, ByVal Y As Long)
Set pmxdoc = ThisDocument
Set pmap = pmxdoc.FocusMap
Set ptable = pmap.Layer(0)
Set pRline = New RubberLine
Set pLine = pRline.TrackNew(pmxdoc.ActiveView.ScreenDisplay, Nothing)
Set pPoints = pLine
Set psfilter = New SpatialFilter
Set psfilter.Geometry = pPoints
psfilter.SpatialRel = esriSpatialRelWithin
Set pf_selec = ptable
pf_selec.Clear
pf_selec.SelectFeatures psfilter, esriSelectionResultNew, False
Dim i As Integer
For i = 1 To pPoints.PointCount
Set psfilter.Geometry = pPoints.Point(i - 1)
pf_selec.SelectFeatures psfilter, esriSelectionResultXOR, False
Next i
pmxdoc.ActiveView.Refresh
Set p_selset = pf_selec.SelectionSet
Set pcursor = ptable.Search(psfilter, False)
pf_selec.SelectionSet.Search Nothing, False, pcursor
Set prow = pcursor.NextRow
msg = ""
num_champ = ptable.FindField("INSEE")
If prow Is Nothing Then
msg = "Cliquez sur une commune svp!!"
Else
Do Until prow Is Nothing
msg = msg + " 'INSEE' = '" & prow.Value(num_champ) & "' OR "
Set prow = pcursor.NextRow
Loop
End If
If Len(msg) > 3 Then
msg = Left(msg, Len(msg) - 3)
End If
MsgBox msg
Call opengptool
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 pcommand As IGPToolCommandHelper
puid = "esrigeoprocessingui.arctoolboxextension"
Set patbext = Application.FindExtensionByCLSID(puid)
Set patb = patbext.ArcToolbox
Set ptool = patb.GetToolbyNameString("test2")
Set pparams = ptool.ParameterInfo
'premier paramètre
Set pparameter = pparams.Element(0)
Set pparamedit = pparameter
Set pdatatype = pparameter.DataType
svalue = " & msg & "
Set pparamedit.Value = pdatatype.CreateValue(svalue)
'second paramètre
Set pparameter = pparams.Element(1)
Set pparamedit = pparameter
Set pdatatype = pparameter.DataType
svalue = "'P:\COUCHES_DONNEES_SIG\CONTOUR ADMINISTRATIF.gdb\CONTOUR_ADMINISTRATIF\COMMUNE"
Set pparamedit.Value = pdatatype.CreateValue(svalue)
'troisième paramètre
Set pparameter = pparams.Element(2)
Set pparamedit = pparameter
Set pdatatype = pparameter.DataType
svalue = " & msg & "
Set pparamedit.Value = pdatatype.CreateValue(svalue)
'quatrième paramètre
Set pparameter = pparams.Element(3)
Set pparmedit = pparameter
Set pdatatype = pparameter.DataType
svalue = "P:\COUCHES_DONNEES_SIG\CADASTRE_DPT.gdb\PARCELLAIRE_CHAMPS_COMPLETS
Set pparamedit.Value = pdatatype.CreateValue(svalue)
Set pcommand = New GPToolCommandHelper
pcommand.SetTool ptool
pcommand.Invoke Nothing
End SubJe m'en remet donc à vous et j'espère que vous pourrai prendre le temps pour me répondre.
Cordialement
J-P KRANKLADER Stagiaire chambre d'agriculture de Vendée. La Roche sur Yon
Hors ligne


