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

Je 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

 

Pied de page des forums

Powered by FluxBB