autocad53
Messages postés30Date d'inscriptionmercredi 16 avril 2008StatutMembreDernière intervention13 juin 2008
-
22 avril 2008 à 13:27
pile_poil
Messages postés682Date d'inscriptionvendredi 6 avril 2007StatutMembreDernière intervention 4 août 2012
-
8 mai 2008 à 09:20
bonjours
j'ai créer un code VBAexcel qui me permet de traçer une ligne brisé sur autocad à partir d'une interface excel, mais j'ais un couac:
comment afficher mon interface en mème temps que autocad, sinon mon code perd tout son interet (faciliter le dessin) car il faut sans cesse réduire excel puis autocad.......C'est infenal.
autocad53
Messages postés30Date d'inscriptionmercredi 16 avril 2008StatutMembreDernière intervention13 juin 2008 22 avril 2008 à 13:45
désolé je sais pas vraiment où mettre ma question, vu que je n'utilise ni vb6 ni VBnet, alors j'ais mis au pif si tu sais ou mettre ma question, je suis preneur
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 22 avril 2008 à 13:57
Salut,
>[auteur/AUTOCAD53/1371857.aspx autocad53] : en regardant mieux la liste des thèmes tu aurais vu que VBA a sa propre section ( [infomsg.aspx Thèmes]
/ [infomsgf_VISUAL-BASIC_1.aspx Visual Basic 6] / [infomsgt_LANGAGES-DERIVES_287.aspx Langages dérivés] / [infomsgt_VBA_244.aspx VBA]). Mais inutile de reposter un Admin Bienveillant et plein de bonne volonté déplacera.
pile_poil
Messages postés682Date d'inscriptionvendredi 6 avril 2007StatutMembreDernière intervention 4 août 20126 22 avril 2008 à 16:58
mets dans ton code à l'endroit qui va bien des "WorkBooks.visible = False ou True pour masquer Excel ou pas
de meme pour AutoCAD des Acad.application.visible = False ou True pour le masque ou l'afficher
[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
Vous n’avez pas trouvé la réponse que vous recherchez ?
autocad53
Messages postés30Date d'inscriptionmercredi 16 avril 2008StatutMembreDernière intervention13 juin 2008 6 mai 2008 à 12:02
acad n'existe pas dans mon environnement vba excel
Faut-il importer une référence ou librairie d'autocad pour définir acad et si oui comment faire?
Merci
autocad53
Messages postés30Date d'inscriptionmercredi 16 avril 2008StatutMembreDernière intervention13 juin 2008 6 mai 2008 à 13:22
c'est la fonction que tu me cite que je ne possède pas. Quand à mes dessin, je les réalises grace à une source de ld40. Je vien de trouver à l'instant la biblioteque coorespondante (je n'y avais pas pensé avant). Mais c'est peut etre due à la version que j'utilise (autoCAD LT 2005)....
pile_poil
Messages postés682Date d'inscriptionvendredi 6 avril 2007StatutMembreDernière intervention 4 août 20126 6 mai 2008 à 13:38
pour dessiner depuis excel dans autocad tu as forcément quelque part quelques lignes de code pour ouvrir le dessin autocad du genre:
Set acadApp = GetObject(, "AutoCAD.Application.17")
ou encore :
Set acadApp = CreateObject("AutoCAD.Application.17")
donc dans cet exemple( tiré d'un code perso)
acadApp.Visible = True
rend autocad visible
et
acadApp.Visible = False
le masque
a toi de mettre le bon mot suivant ce que tu as dans ton code à la place de ce que je t'ai mis en bleu
si tu ne piges pas mets moi ton code ici que je vois comment tu dois l'écrire pour que ça marche
[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
pile_poil
Messages postés682Date d'inscriptionvendredi 6 avril 2007StatutMembreDernière intervention 4 août 20126 6 mai 2008 à 14:52
basepnt = ThisDrawing.Utility.GetPoint
cette ligne attend un click dans le dessin et mets dans la variable basepnt les coordonnées du point clické
elle est valable dans le VBA de autocad
pour du VBA Excel il faut remplacer "ThisDrawing" par ta syntaxe à toi qui doit être quelque chose comme
"autocad.application.activedocument"
basepoint doit être déclaré comme Variant
le résultat te donnera basepoint(0) pour l'axe X , basepoint(1) pour l'axe Y , basepoint(2) pour l'axe Z ( en principe sous LT il n'y a pas d'axe Z puisque autant que je me souvienne LT ne travaille qu'en deux dimmensions)
ThisDrawing.Utility.GetEntity ACADobj, basepnt
te donne le point d'insertion de l'objet sélectionné sous la meme forme que précédamment
ACADobj est une variable déclarée "As Object" apres le click elle te donnera le nom de l'objet sélectionné
pour "ThisDrawing" meme chose que dans le premier cas , idem pour basepnt
[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
pile_poil
Messages postés682Date d'inscriptionvendredi 6 avril 2007StatutMembreDernière intervention 4 août 20126 7 mai 2008 à 11:16
salut
le bout de macro autocad si dessous extrait d'un dessin tous les blocs qui se nomment "jarretiere" et les mets dans un tableau pour pouvoir ensuite travailler dessus
dim tabapp( ) as variant
ReDim tabapp(25, 0)
Set toto = ThisDrawing.ModelSpace
For Each ACADobj In toto
With ACADobj
If StrComp(.EntityName, "AcDbBlockReference", 1) = 0 Then
If LCase(.Name) = "jarretiere" Then
ObjData = .GetAttributes 'ici je récupere les attributs de mon bloc pour les mettres dans mon 'tableau par la boucle de la ligne suivante
For I = LBound(ObjData) To UBound(ObjData)
tabapp(I, Y) = ObjData(I).TextString
Next I
tabapp(21, Y) = .Handle ' ici je mets le Handle de l'objet dans mon tableau qui est un 'identifiant unique et permanent dans la base de donnée interne du dessin autocad
tabapp(22, Y) = .InsertionPoint 'ici je mets dans mon tableau le point d'insertion de l'objet
Y = Y + 1
ReDim Preserve tabapp(25, Y)
End If
End If
End With
Next ACADobj
ReDim Preserve tabapp(25, Y - 1)
apres traitement du tableau je peux mettre dans le dessin les modifications
For I = 0 To UBound(tabapp, 2)
Set ACADobj = ThisDrawing.HandleToObject(tabapp(21, I)) 'grace à cette ligne je peux adresser un objet précis dans la base de donnée du dessin
ObjData = ACADobj.GetAttributes
ObjData(1).TextString = tabapp(1, I)
ObjData(2).TextString = tabapp(2, I)
ACADobj.Update
Next I
il ne me reste plus qu'à te souhaiter bon courage pour adapter ça à tes besoins !
[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
pile_poil
Messages postés682Date d'inscriptionvendredi 6 avril 2007StatutMembreDernière intervention 4 août 20126 7 mai 2008 à 12:05
c'est hélas normal !!!!
la solution c'est de mettre en une fois tous les parametres dans excel puis de lancer la macro et attendre que ce soit fini!
en fait j'avais ce probleme et je l'ai solutionné en faisant dans excel le tableau de touts les parametres dont j'ai besoin puis dans autocad je fais une macro qui récupère toutes les données de excel pour les mettres dans un tableau VBA d'autocad et je fais mon dessin avec
ainsi j'ai une seule opération entre excel et autocad
Sub Import()
Dim extrtab2 As Variant
Dim zone As Object
Dim max As Integer
Dim I As Integer
Dim colones As Integer
Dim J As Integer
On Error Resume Next
Set ExcelApp = GetObject(, "Excel.Application")
If Err.Number <> 0 Then
Err.Clear
Set ExcelApp = CreateObject("Excel.Application")
End If
If ExcelApp Is Nothing Then Beep: exit sub
Set feuille = ExcelApp.Sheets("EXTRACT")
feuille.Cells(1, 1).Select
max = 0
colones = 0
'attention les trois lignes qui suivent ne sont valables que si toutes les cellules du tableau excel sont renseignées ce qui est le cas dans mon application
Set zone = feuille.Range(feuille.Cells(1), feuille.Cells(feuille.Cells.Count))
max = zone.CurrentRegion.Rows.Count
colones = zone.CurrentRegion.Columns.Count
extrtab2 = feuille.Range(feuille.Cells(2, 1), feuille.Cells(max, colones))
' la boucle qui suit est en fait le traitement que je fais à partir du tableau de données excel que j'ai récupéré en un seul bloc par la ligne précédente
For I = 1 To UBound(extrtab2, 1)
Set ACADobj = ThisDrawing.HandleToObject(extrtab2(I, colones))
ObjData = ACADobj.GetAttributes
For J = 0 To UBound(ObjData)
ObjData(J).TextString = extrtab2(I, J + 1)
Next J
ACADobj.Layer = extrtab2(I, J + 1)
Next I
ACADobj.Update
Beep ' pour savoir qu'il a fini car dans mon appli le tableau excel peut avoir jusqu'à 29 999 lignes pour 'une vingtaine de colonnes ça prends donc quand meme du temps
End Sub
[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
pile_poil
Messages postés682Date d'inscriptionvendredi 6 avril 2007StatutMembreDernière intervention 4 août 20126 7 mai 2008 à 12:08
pour info le code que je viens de te donner me fait le traitement des 29 999 lignes en une quarantaine de secondes alors qu'en traitant cellule par cellule il fallait environ 2 heures sur la meme machine !
[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
autocad53
Messages postés30Date d'inscriptionmercredi 16 avril 2008StatutMembreDernière intervention13 juin 2008 7 mai 2008 à 12:25
C'est dense tout ça.... Je vais voir se que je peux faire
en tout cas merci infiniment pour ton aide je crois que tu me sauve la vie (j'éxagère un peu, juste mon stage de fin d'étude)
je cherche un truc du genre depuis deux semaine....
autocad53
Messages postés30Date d'inscriptionmercredi 16 avril 2008StatutMembreDernière intervention13 juin 2008 7 mai 2008 à 15:38
j'ai un problème je n'ai pas qu'une seule oppération entre excel et autoCAD.
je doit d'abord créer mon dessin, pour cela j'ai créer une interface sous excel...
pour l'instant j'arrive à créer des réseaux linéaires, mais parfois il me faudrais les coordonnées d'un point que je sélectionne..dans un envirronnement excel.
je ne sais pas trop comment procéder...
par contre tes renseignement me srons surrement utiles quand je devrais tout exporter vers excel
pile_poil
Messages postés682Date d'inscriptionvendredi 6 avril 2007StatutMembreDernière intervention 4 août 20126 7 mai 2008 à 18:22
tu ne peux pas selectionner un point dans le dessin autocad sans etre dans ce dessin
par contre comme dans un dessin autocad tous les objets sont placés à des coordonnées par rapport au point 0,0 (en 2D) ou 0,0,0 (en 3D) tu peux placer tout ce que tu veux où tu veux à condition de toujours te référencer par rapport a ce point ZERO
ce qui veut dire que tu dois garder dans ton fichier excel absolument toute l'historique de ton dessin pour pouvoir déterminer par calcul le point suivant en fonction de ce qui est déja dessiné
cela va vite devenir très lour à gérer et surtout pas tres souple à utiliser !
[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE