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 Fri 18 January 2008 23:06

rayer_mag
Participant occasionnel
Date d'inscription: 20 Sep 2007
Messages: 13

Récupérer en VBA les attributs d'une entité sélectionnée par la souris

Bonjour,

Pour réaliser un projet SIG (étude de l'évolution du bocage) je dois réaliser des fiches descriptives de chaque entité qu'un utilisiteur sélectionnera grâce à la souris sous ArcGis, qui s'afficheront suite à cette sélection.
Je sais bien que je dois utiliser VBA (malheureusement je n'y connais rien) mais je n'arrive pas à récupérer ma sélection (et par conséquent ses attributs).
De plus je voudrai faire apparaître dans cette "fiche" un extrait de la carte centrée sur l'élément sélectionné (je sais que je dois utiliser Envelope) mais je ne sais pas comment la faire apparaître sur cette fiche.

Est-ce que quelqu'un pourrait m'aider ? (c'est à rendre pour la semaine prochaine !!)

Merci à ceux qui s'intéresserons à mon problème (qui n'est que le premier parmi d'autres !!!)

Magalie

Hors ligne

 

#2 Sat 19 January 2008 15:52

Jeirhome
Membre
Lieu: Liverion
Date d'inscription: 22 Aug 2006
Messages: 4298
Site web

Re: Récupérer en VBA les attributs d'une entité sélectionnée par la souris

Séances de cours intensifs de programmation VB et Objets ArcGIs en progression...

Veuillez ne pas maltraitez vos ordinateurs

big_smile


Jérôme Cuinet
L'avantage de la Chine, c'est que le soleil se couche plus tard !

Hors ligne

 

#3 Mon 21 January 2008 10:01

nicolas valls
Participant assidu
Date d'inscription: 28 Oct 2005
Messages: 154

Re: Récupérer en VBA les attributs d'une entité sélectionnée par la souris

Bonjour,
Dans un premier temps il faut créer un UIToolControl. Sur l'evènement mousedown il faut rentrer le code suivant (à vous de vérifier si la couche a selectionner est bien chargé dans le document) :

Code:

Dim mondoc As IMxDocument, macarte As IMap, monpoint As IPoint, monrect As IEnvelope, macouche As ILayer
Dim monenv As ISelectionEnvironment, trouve As Boolean, i As Byte, j As Byte, matable As ITable
Dim masel As IFeatureSelection, moncurseur As ICursor, maligne As IRow, compteur_sol As Integer
Dim outil As ICommandItem, num_uc As String, mess As String
    Set mondoc = ThisDocument
    Set macarte = mondoc.Maps.Item(0)
    Set monpoint = mondoc.CurrentLocation
    For i = 0 To macarte.LayerCount - 1
        If macarte.Layer(i).Name = "MaTableASelectionner" Then
            Set macouche = macarte.Layer(i)
            Exit For
        End If
    Next i
    Set matable = macouche
    Set monrect = monpoint.Envelope
    monrect.Expand mondoc.SearchTolerance, mondoc.SearchTolerance, False
    Set monenv = New SelectionEnvironment
    monenv.AreaSelectionMethod = esriSpatialRelIntersects
    macarte.SelectByShape monrect, monenv, False
    mondoc.ActiveView.Refresh

Bon une fois que vous avez sélectionné la table il suffit de lancer une procédure qui va parcourir l'enregistrement correspondant dans la table sélectionnée. Il faut savoir que vous allez récupérer les champs 1 à 1 dans une variable (ou si vous le voulez dans un formulaire a l'aide de monfomulaire.matextbox.text=...)
voici le code de la procédure :

Code:

Dim mondoc As IMxDocument, macarte As IMap, macouche As ILayer, i As Integer
Dim moncurseur As ICursor, maligne As IRow, matable As ITable,mavariable as string

    Set mondoc = ThisDocument
    Set macarte = mondoc.Maps.Item(0)
    For i = 0 To macarte.LayerCount - 1
        If macarte.Layer(i).Name = "nom_de_ma_couche" Then Set macouche = macarte.Layer(i)
    Next i
    Set matable = macouche
    Set moncurseur = matable.Search(Nothing, False)
    Set maligne = moncurseur.NextRow
    If maligne Is Nothing Then
        MsgBox "aucun enregistrement dans la table"
    Else
        
        Do Until maligne Is Nothing
            mavariable = maligne.Fields.FindField(moncurseur.Fields.FindField("Nom_du_Champ"))
            
            Set maligne = moncurseur.NextRow
        Loop
    End If
   
End Sub

Voila en espérant que ca vous donne les bases .
bonne journée


Nicolas VALLS
Géomaticen
Cabinet Pierre GRILLET

Hors ligne

 

#4 Mon 21 January 2008 16:00

rayer_mag
Participant occasionnel
Date d'inscription: 20 Sep 2007
Messages: 13

Re: Récupérer en VBA les attributs d'une entité sélectionnée par la souris

Merci beaucoup pour vos réponses et merci pour ta patience Jérôme !

Hors ligne

 

Pied de page des forums

Powered by FluxBB