VBA Tableau Objet

Signaler
Messages postés
926
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
10 septembre 2010
-
Messages postés
926
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
10 septembre 2010
-
Bonjour j'ai fais un Post dans un autre sujet mais je crois que j'arrive à mettre mon problème dans le sujet VBA.

Je ne réussi pas à récupérer une information d'un Tableau qui est déclaré Objet. J'ai mis un Espion sur mon Tableau. Je dois récupérer la valeur EndPoint(0)

À noter que je réussi à récupérer les information qui sont dans le premiere branche du Tableau (Angle - Color) mais se qui se retrouve dans la seconde branche (EndPoint(0) - EndPoint(1) - EndPoint(2)) je n'y arrive pas.

tblsel(i) 
  Angle 
  Color 
  EndPoint 
    EndPoint(0) 
    EndPoint(1) 
    EndPoint(2) 
...



si je code
msgbox tblsel(i).Angle = 4.052
msgbox tblsel(i).Color= 2552
msgbox tblsel(i).EndPoint(0) = Erreur

Erreur d'exécution 451
La procédure Property Let n'est pas définie et la Procédure Property Get n'a pas renvoyé un objet




Cette erreur vient de ce code

For i = 0 To Cpt1 - 1
        Set tblsel(i) = ssetobj.Item(i)
        MsgBox tblsel(i).EndPoint(0)
    Next


merci de votre aide

5 réponses

Messages postés
926
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
10 septembre 2010
3
J'AI TROUVÉ


Mon msgbox étant douteux... héhéhé

MsgBox StartPoint(0) & " " & StartPoint(1)

Alors Voila je mets le code si ca peut aider quelqu'un

SÉLECTIONNER DES LIGNES DANS AUTOCAD POUR POUVOIR RÉCUPÉRER LES COORDONNÉES DE CES LIGNES

Le code n'est pas terminé mais peux donner une idée...

    Dim Obj1 As Object
    Dim BaSelect As Variant
    Dim Pt1 As Variant
    Dim Entite(0) As Object
    Dim RegionSel As Variant
    Dim Resultat As Double
    Dim Cpt1, I As Integer
    Dim ssetobj As AcadSelectionSet
   

    'If ssetobj with the name mentioned above already exists - delete it
    For Each ssetobj In ActiveDocument.SelectionSets
        If ssetobj.Name = "1" Then
            ssetobj.Delete
            Exit For
        End If
    Next ssetobj

    'aAd new ssetobj
    Set ssetobj = ActiveDocument.SelectionSets.Add("1")
    Call ssetobj.SelectOnScreen

       'Si aucun Objet sélectionné
    If ssetobj.count = 0 Then
        MsgBox "You have not selected any object.", , "Error"
        ssetobj.Delete
        Exit Sub
    End If

    Dim AcadObj As Variant
    Dim StartPoint As Variant
    Dim EndPoint As Variant

    For Each AcadObj In ssetobj
        
        Select Case AcadObj.ObjectName
        Case "AcDbLine"
            StartPoint = AcadObj.StartPoint
            EndPoint = AcadObj.EndPoint
            
            MsgBox StartPoint(0) & "   " & StartPoint(1)
        End Select
    Next AcadObj
Messages postés
1263
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
24 juillet 2013
6
A tout hasard as-tu essayé MsgBox tblsel(i).EndPoint.EndPoint(0) (sans conviction car VBa et moi ?????)



La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
Messages postés
926
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
10 septembre 2010
3
Oui j'ai essayé :( Ca donne un autre sorte d'erreur.

merci quand même d'avoir essayé...
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
es tu sûr que l'objet en question a bien la propriété endpoint ?
tu devrais peut être faire un:
 For i = 0 To Cpt1 - 1
        if ssetobj.Item(i).entityname l_objet_qui_va_bien then Set tblsel(i) ssetobj.Item(i)
        MsgBox tblsel(i).EndPoint(0)
    Next

pour sélectionner le type d'objet
car endpoint n'existe que pour les arcs ellipses et lignes

si c'est la solution, penser : REPONSE ACCEPTEE
Messages postés
926
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
10 septembre 2010
3
Rebonjour

J'ai trouvé un autre code qui me montre bel et bien que le StartPoint et le EndPoint existe. Si je fais un Espion je vois leur valeur.

Voici le code que j'utilise

    Dim StartPoint As Variant
    Dim EndPoint As Variant


    For Each AcadObj In ssetobj
        
        Select Case AcadObj.ObjectName
        Case "AcDbLine"
            StartPoint = AcadObj.StartPoint
            EndPoint = AcadObj.EndPoint
            MsgBox StartPoint & "   " & EndPoint
        End Select
    Next AcadObj


Si je mets un espion sur cette "variable" - AcadObj.StartPoint

AcadObj.StartPoint :  : Variant/Double(0 to 2) : 
   AcadObj.StartPoint(0) : 1194.13739858333 : Double : ...
   AcadObj.StartPoint(1) : 1087.71978604706 : Double : ...
   AcadObj.StartPoint(2) : 0 : Double : ...


J'ai toujours le message d'erreur pour le messagebox.

Enfin si vous voyer un truc que j'oublie

Je ne croyais pas que ca pouvais être autant complexe de récupérer une variable visible avec un espion.


P.S. Mon erreur pourrait-elle venir du fait que AcadObj.StartPoint est un tableau et que ma variable StartPoint et EndPoint sont variant ?

merci encore d'avance