Aller au contenu

INSERTION DE BLOC AVEC OU SAN ATTRIBUT


Messages recommandés

Posté(e)

Bonjours, je voudrais créer une petite routine en VBA qui insererrais (par exemple des cadres) des blocs avec ou sans attributs.

Je suis débutant en VBA et me suis procurer un livre mais meme avec le livre et l'aide de autocad 2004 je ne trouve pas comment faire.

Merci d'avance pour vos réponses.

Posté(e)

regarde ici http://www.cadxp.com/sujetXForum-17368.htm

 

Pour insérer un bloc, le plus simple c'est que le bloc soit dans un fichier, que le fichier ne contienne que ce bloc. Il faut également que le fichier soit dans un dossier support (un dossier dans lequel autocad cherche). Pour les attribut, le plus simple c'est que ton bloc contienne des attributs vides et que par la suite, tu viennes les remplir. La démarche est la suivante :

-Insertion du bloc avec une échelle et une direction

-recherche dans le bloc les attribut qu'il peut contenir et les renseigner (attetion 2 méthode différente si le bloc possède des attribut "CONSTANT" ou classique

-update du bloc.

 

Voilà pour l'algorithme, si tu as besoin d'un coup de main....

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

J'ai essayer ton code et il me dit comme erreur

Une erreur inconnue est survenue, veuillez contacter le développeur.

 

par contre, je ne sais pas par ou je doit commencer mon code

Posté(e)

Bon, au point de vue insertblock, j'ai trouvé mais ça fonctionne uniquement si le bloc existe déjà dans le dessin.

Moi je voudrais pouvoir l'insserer meme s'il n'existe pas encore dans le dessin.

 

Voici le code que j'ai actuellement

 

Private Sub CmdA0_Click()

Dim BlocObj As AcadBlockReference

Dim Pins(0 To 2) As Double

 

Pins(0) = 10

Pins(1) = 10

Pins(2) = 0

 

Set BlocObj = ThisDrawing.PaperSpace.InsertBlock(Pins, "A0.dwg", 1#, 1#, 1#, 0)

BlocObj.Update

'on explose les blocs pour que le texte des cotations soient de meme taille

BlocObj.Explode

'il faut l'effacer car sinon on a 2 blocs superposés

BlocObj.Delete

End Sub

Posté(e)

si tu veux insérer un bloc, il faut qu'il existe dans le fichier sur lequel tu travailles, où qu'il soit contenu dans un dossier dans lequel autocad cherche.

 

pour mon code, le bloc est dans un fichier dans un dossier dans lequel autocad fouille... le bloc est disponible dans http://cjoint.com/?lbmhZvwIsw

 

Si tu souhaite que ton bloc arrive avec une échelle précise et dépendante des unités de dessin de ton plan, tu dois commencer par faire :

Sub Insertion_de_bloc()

'pour préparer les calques
Dim strCalqueActive As String
Dim newlayer As AcadLayer

'pour préparer les unités
Dim strUnitvar As String
Dim sngCoef As Single

'pour l'insertion du bloc
Dim dblDiametre As Double
Dim objBloc As AcadBlockReference
Dim varPins As Variant
Dim dblteta As Double
Dim dbldiamech As Double

'si erreur : on se retourve dans la partie "Gestion" (en fin de procédure)
On Error GoTo Gestion

'on enregistre la valeur de l'unité de dessin dans la variable "strUnitvar"
strUnitvar = ThisDrawing.GetVariable("INSUNITS")


'on teste la valeur de la variable "strUnitvar"
Select Case strUnitvar
Case 4
'(millimètre)
sngCoef = 1
Case 5
'(centimètre)
sngCoef = 0.1
Case 6
'(mètre)
sngCoef = 0.001
End Select



varPins = ThisDrawing.Utility.GetPoint(, "Veuillez choisir un point : ")

dblteta = 0

dbldiamech = sngCoef

Set objBloc = ThisDrawing.ModelSpace.InsertBlock(varPins, "Sect_circ_bloc.dwg", dbldiamech#, dbldiamech#, dbldiamech#, dblteta)

Dim explodedObjects As Variant
'décomposition du fichier bloc pour avoir le bloc et le fichier bloc distinct
explodedObjects = objBloc.Explode

'suppression du fichier bloc pour ne garder que le bloc qui possède la bonne unité...
objBloc.Delete


Exit Sub
Gestion:

Select Case Err.Number
Case "-2147352567"
ThisDrawing.Utility.Prompt "Annulée par l'utilisateur."
Case Else
Debug.Print Err.Number, Err.Description
ThisDrawing.Utility.Prompt "Une erreur inconnue est survenue, veuillez contacter le développeur."
End Select

End Sub

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

Ok, j'ai mis mon fichier dans la recherche de autocad et ça marche meme si le bloc n'est pas dans le dessin.

Mais maintenenat j'aimerrais a partir de mon code, qu'il demande a l'utilisateur le point d'insertion car pour l'instant, il les mets tous au point 10,10,0 comme tu peus le constater par se morceau du code repris ci-dessus

 

Pins(0) = 10

Pins(1) = 10

Pins(2) = 0

 

Posté(e)

Pour demander à l'utilisateur de donner le point il faut la methode utiliy.getpoint, ça devrait donc donner :

dim pins as variant
Pins = ThisDrawing.Utility.GetPoint(, "Veuillez choisir un point : ")

 

P.S. tu as vu mon sujet http://www.cadxp.com/sujetXForum-17369.htm? Car j'ai un problème dessus et je ne comprends pas où et même si tu es débutant (et je me considère comme débutant ça fait pas 1 an que je programme), tu verras peut-être. J'arrive pas à décomposer mon bloc et je ne vois pas d'où ça vient puisque j'ai utilisé la même méthode pour le code http://www.cadxp.com/sujetXForum-17368.htm

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

en fait sur mon fichier source, j'ai crée un bloc pour qu'il ait le bon nom, une bonne unité échelle. Lorsque je l'insère, VBA, créer un bloc avec le fichier, et comme je ne suis pas fan des blocs imbriqués (puisque qu'après pour fouiller dedans pour changer des entité de calque avec VBA faut faire 2 boucles imbriquées c'est chiant quoi) alors je veux faire comme dans mon code pour l'impact circulaire, je veux le décomposer et supprimer le bloc créé par VBA... mais là je ne sais pas pourquoi, je me retrouve avec une erreur et je ne comprends pas pourquoi elle survient... alors, je ne sais pas comment la gérer...

 

En plus pour l'instant, je n'ai pas de bloc dynamique ou avec attribut mais quand ça arrivera, il faudra bien que je n'ai qu'un seul bloc, le bloc que j'ai crée pas celui de VBA car je ne pourrais pas facilement gérer les propriétés dynamiques car elle ne sont gérable que dans l'éditeur de bloc, alors le mieux c'est que le bloc natif les possède.... Les fabriquer avec VBA !! aie aie!!!

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

Les blocs dynamique, je ne connais pas car jetravaille essentiellement avec autocad2004 (et oui, je suis en retard) mais quand une version tourne bien on ne change pas.

 

Posté(e)

nous on est pas prets à changer vu les problèmes sur les nouvelles versions. Déjà ici j'entends que du mal de 2007 et 2008 mep

 

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

essaie de lancer la commande depuis autocad en faisant ALT+F8 et en sélectionnant ta macro.

 

Si tu lances ta macro depuis une userform, oublie pas de mettre userformX.hide où userformX est le nom de ta feuille....

 

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

alors je veux faire comme dans mon code pour l'impact circulaire, je veux le décomposer et supprimer le bloc créé par VBA... mais là je ne sais pas pourquoi, je me retrouve avec une erreur et je ne comprends pas pourquoi elle survient... alors, je ne sais pas comment la gérer...

 

Je veux pas faire le malin, mais ton fichier de bloc a 4 blocs dont 3 sont identiques à part le nom.

Si ce sont des résidus de test, ça amène des résidus dans les autres fichiers.

Bloc1 est dans un fichier, tu insères le fichier en tant que bloc, forcément t'auras des blocs imbriqués, tu pensais avoir quoi ? Un nouveau pc dernier cri ?

ou alors je n'ai rien compris :P

Nous n’ héritons pas de la terre de nos ancêtres.Nous l’empruntons à nos enfants.

Posté(e)

Nul besoin de me prendre pour un lapin de 3 semaines pour tenter de m'expliquer des choses dans l'espace du forum qui ne concerne pas vraiment mon problème. J'avais juste expliquer mon problème ici pour demander à formula1 de chercher l'erreur. Mais l'espace approprié est le suivant: http://www.cadxp.com/sujetXForum-17369.htm

 

Si tu veux m'aider, me donner un conseil, je pense qu'il y a bien d'autre manière de me expliquer cordialement

une autre méthode sans parler de

tu pensais avoir quoi ? Un nouveau pc dernier cri ?
qui intervient ici comme un cheveux sur la soupe. Je me trompe ?

 

Les blocs que je veux insérer vont devenir dynamiques alors si tu as une autre solution... je suis preneur. Avec VBA, je ne vois pas comment je peux déclarer les unités de mon bloc lorsque je l'insère c'est pour ça que j'ai créer un bloc dans un fichier que j'insère le bloc-fichier et que le décompose puis je supprime le bloc fichier ...

Regarde mon code pour l'impact circulaire tu comprendras mieux...

Je viens de réouvrir mon fichier bloc "Sect_rect_bloc.dwg" et pour moi il contient 1 bloc et uniquement 1 bloc. Ce bloc appelé "Section_rectangulaire" contient 2 ploylignes. Le reste ce sont des éléments purgeables... je ne vois pas où est le problème ? J'ai même téléchargé l'élément que j'avais envoyé pour être sur de ne pas avoir fait la même erreur que pour le sujet http://www.cadxp.com/sujetXForum-17368.htm

 

Bonne journée à tous

 

P.S. winfield et Messieurs les modérateurs, nul besoin de reparler de ce message, il n'est aucunement enclin à une violence verbale. Pour moi l'incident est clos, et je suis toujours aussi calme en peignoir devant mon PC.[Edité le 3/11/2007 par sechanbask]

 

[Edité le 3/11/2007 par sechanbask]

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

formula1> il faut que tu mette userformX.hide juste avant la commande pour demander à l'utilisateur d'indiquer le point... comme ça le programme "cache" la fenêtre et l'utilisateur peut sélectionner le point d'insertion du bloc.

 

Bon courage

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

ça dépend de la construction de ton code.

 

est-ce que tu a une userform = fenêtre qui s'ouvre devant autocad lorsque tu lance ton programme ?

-sinon oublie ce que j'ai dis et reposte l'ensemble de ton code pour que j'essaie de comprendre d'où vient le problème

-si oui, comment tu lance ta userform, via un module ? as tu des boutons sur ta userform pour lancer une autre partie de ton code?

-si tu as un bouton pour lancer commande pour l'insertion de ton il faut que tu mettes dans le code du bouton (normalement dans le code de la userform) le code me.hide avant que tu lances la commande pour demander à l'utilisateur d'indiquer le point.

-si tu lances ton code et qu'il continue du un module, il faut que tu mettes le code userformX.hide dans le code du module avant que tu lances la commande pour demander à l'utilisateur d'indiquer le point

 

 

Mais tu sais parler de code sans voir le code c'est comme danser à propos d'architecture [citation du film "Playing by heart"] "Parler d'amour c'est comme de danser à propos d'architecture[..]"

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité