Afficher une fenêtre

Signaler
Messages postés
30
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
13 juin 2008
-
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
-
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.

Merci d'avance

21 réponses

Messages postés
1229
Date d'inscription
vendredi 16 novembre 2007
Statut
Membre
Dernière intervention
16 juin 2009
1
Bonjour,

C'est quoi le lien avec vb6???
Messages postés
30
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
13 juin 2008

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
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
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.

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
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
Messages postés
30
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
13 juin 2008

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
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
si tu n'as pas Acad dans ton environnement excel dis moi comment tu fais alors pour dessiner dedans ? car là je ne comprends plus !

[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
Messages postés
30
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
13 juin 2008

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)....
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
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
Messages postés
30
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
13 juin 2008

ca marche
en fait c'est surrement due à ma version, car je l'ai trouvé et c'est :

AutoCAD.Application.Visible = True

merci pour tout

PS : t'aurais un truc pour récupérer les coordonnées des points meme avec ta syntaxe j'aurais au moin une piste
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
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
Messages postés
30
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
13 juin 2008

jvé voir se que je peux faire avec ça en tout cas se sera surrement utile

par contre, j'aurais aimer le faire aussi de façon automatique. Merci
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
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
Messages postés
30
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
13 juin 2008

g un gros problème.
A chaques fois que j'utilise une des fonction que tu m'as décrite, ça ralenti puis j'ais la fenètre:

Microsoft Office Excl attend la fin de l'éxécution d'une action OLE d'une autre application

c'est du chinois pour moi. J'ai due oublier une action dans autocad. Peut etre de parametrer le chemin....

HELP
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
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
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
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
Messages postés
30
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
13 juin 2008

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....

Encore merci je te recontacte si il y à un prob
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
rassures toi j'ai passé plus d'un mois à chercher cette solution à l'époque !!!

[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
Messages postés
30
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
13 juin 2008

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
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
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
Messages postés
30
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
13 juin 2008

c pa 1 souci justement, je veux pouvoir cliquer sur un point dans le dessin et que mon excel détecte cette action pour pouvoir revenir en arrière

quand à créer un historique, j'y avais pensé, mais je savais, pas comment faire quand je fait une erreur alors j'ai abandonné