elen Posté(e) le 15 juin 2010 Posté(e) le 15 juin 2010 Bonjour à tous, Je commence tout juste la programmation VBA et j'aurai besoin d'un peu d'aide.Je vous explique mon programme: Je crée une icône avec AutoCAD Lorsque l'on clique dessus, une message box s'ouvre et nous demande de " sélectionner un bassin" qui est un objet sur le plan. PS: nous ne nous occuperons que du nom du calque du bassin et non de savoir si le bassin est une polyligne,.. Boule 1: SI je clique sur rien: une message box s'ouvre pour dire "Aucune sélection, sélectionner un bassin"On re-sélectionne un objet. Boule 2: SI je clique sur un objet qui n'a pas le calque "BASSIN", une message box s'ouvre pour dire "Sélectionner un bassin"On re-sélectionne un objet. Boule 3: Si je clique sur un bassin qui a pour calque "BASSIN", alors on continu et on ouvre une boite de dialogue. Mes questions:Lorsque je sélectionne mon bassin, je ne veux pouvoir sélectionner qu'un seul objet contrairement à mon programme dont voici le début: Sub ProgSIG() MsgBox "Sélectionner un bassin" Dim SelectionObj1 As AcadSelectionSetDim FilterType(0) As Integer Dim FilterData(0) As VariantSet SelectionObj1 = ThisDrawing.SelectionSets.Add("SO1")FilterType(0) = 8FilterData(0) = "BASSIN"SelectionObj1.SelectOnScreen FilterType, FilterData MsgBox "Vous avez sélectionner un bassin" End Sub De plus, je ne sais pas comment faire pour qu'une fois ma sélection faite, je puisse ouvrir ma boite de dialogue. J'espère que je n'ai pas trop mal expliquer.Merci
(gile) Posté(e) le 15 juin 2010 Posté(e) le 15 juin 2010 Salut, Tout d'abord, je ne suis pas sûr que ce soit une bonne idée de commencer à apprendre VBA aujourd'hui.Ce langage ne devrait plus être supporté par les prochaines versions d'AutoCAD (de même pour les applications Microsoft).Si c'est juste pour programmer AutoCAD, le LISP reste une valeur sure, relativement simple d'accès et complètement intégré à AutoCAD.Si tu ne veux pas te limiter à AutoCAD, regarde du côté de .NET qui semble avoir un avenir prometteur, mais l'apprentissage sera plus long et plus ardu. Dans tout les cas, il y a en gros deux modes de sélection des entités AutoCAD : - la sélection classique qui permet, quelque soit le langage d'utiliser un filtre, mais la méthode VBA SelectOnScreen ne permet pas, à ma connaissance, de forcer la sélection d'une entité unique (ce que permettent la fonction LISP ssget et la méthode .NET GetSelection avec PromptSelectionOptions.SingleOnly). - la sélection d'une entité unique avec la méthode Utility.GetEntity ne permet pas, quant à elle, de filtrer la sélection (la fonction LISP entget ne le permet pas non plus, seule la méthode .NET GetEntiy permet de filtrer sur le type d'entité avec PromptEntityOptions.AddAllowedClass).Dans ce cas c'est au programme d'évaluer si le type d'entité et ses propriétés correspondent à ceux recherchés et d'agir en conséquence. Personnellement, dans ton cas, j'utiliserais la seconde méthode pour sélectionner l'entité et vérifierais ensuite si les propriétés ObjectName et Layer sont bien celles recherchées. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
elen Posté(e) le 15 juin 2010 Auteur Posté(e) le 15 juin 2010 J'ai bien compris que le VBA n'est pas le meilleur langage surtout pour commencer. Le problème c'est que je réalise un projet (pas compliqué à ce qu'il paraît mais je galère) pour lancer des PDF, des fichier Excel et des photos par la création de boite de dialogue (qui seront nombreuses dans mon programme). Ceci est le tout premier programme que j'essaie et donc je n'est pas tous compris ce qu'il fallais que je rajoute à mon programme pour qu'il ne séletionne qu'un éléments. Sub ProgSIG() MsgBox "Sélectionner un bassin" Dim SelectionObj1 As AcadSelectionSetDim FilterType(0) As IntegerDim FilterData(0) As VariantSet SelectionObj1 = ThisDrawing.SelectionSets.Add("SO1")FilterType(0) = 8FilterData(0) = "BASSIN"SelectionObj1.SelectOnScreen FilterType, FilterData MsgBox "Vous avez sélectionner un bassin" End Sub Merci de ton explication sinon
(gile) Posté(e) le 15 juin 2010 Posté(e) le 15 juin 2010 Re, Je ne suis vraiment pas un spécialiste du VBA (il manque certainement une gestion des erreurs), mais ça peut-être un truc de ce genre : Sub ProgSIG() Dim obj As AcadObject Dim pt As Variant ThisDrawing.Utility.GetEntity obj, pt, "Sélectionnez un bassin: " If obj.objectName 0 "AcDbPolyline" MsgBox "L'objet sélectionné n'est pas une polyligne" Exit Sub End If If obj.Layer "Bassin" MsgBox "L'objet sélectionné n'est pas sur le calque BASSIN'" Exit Sub End If MsgBox "Vous avez sélectionner un bassin" End sub Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
elen Posté(e) le 15 juin 2010 Auteur Posté(e) le 15 juin 2010 Merci je vais regarder sa et essayer de comprendre.
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant