Extraction d'attributs Acad vers ...

comurhex11 Messages postés 3 Date d'inscription lundi 15 juin 2009 Statut Membre Dernière intervention 17 juin 2009 - 15 juin 2009 à 17:19
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 - 19 juin 2009 à 06:47
Voila ma problematique:
Après ouverture d'un fichier Autocad (manuellement ou via un script).
Je souhaiterais "récupérer" les informations contenu dans un ou plusieurs Blocs (dénommés "cart_1, cart_2, etc...)
situé dans un ou plusieurs onglets (Objet, Présentation1 ou Presentation2).
Ces blocs (des cartouches donc ...) sont composés d'attibuts (homogénéité des noms des attributs quelque soit le nom du bloc).
L'extraction de ces Informations pourrait se faire vers Access ou Excel (peu importe), dans un seul et unique fichier (par exemple: ListeDesPlans.*).
Dans la mesure du possible, il y aurait dans ce fichier les noms des fichiers autocad (dwgname) suivi eventuellement du ou des noms des blocs, mais surtout des attributs de ces blocs...

Merci par avance


Ps: Je suis débutant en VB. Utilisateur d'Autocad depuis 1991 (V10 sous Unix) :-)
Actuellement avec Acad 2005

6 réponses

pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
15 juin 2009 à 22:22
 pour exemple voici ce que j'utilise personnellement. mon cartouche est sur le layer "cartouche" et se nomme "CART"  à toi de mettre tes propres dénominations
  
    Dim tableau(3) as  String
    Dim I as integer
    Set toto = ThisDrawing.PaperSpace
     For Each ACADobj In toto
        With ACADobj
            If LCase(.Layer) = "cartouche" Then
                If StrComp(.EntityName, "AcDbBlockReference", 1) = 0 Then
                    If .Name = "CART" Then
                        ObjData = .GetAttributes
                        for i = 0 to 3
                             tableau(I) = ObjData(I).TextString
                        next I
                    End If
                End If
            End If
        End With
    Next ACADobj
   
    On Error Resume Next
    Set ExcelApp = GetObject(, "Excel.Application")
    If Err.Number <> 0 Then
        Err.Clear
        Set ExcelApp = CreateObject("Excel.Application")
    End If
    Set feuille = ExcelApp.Sheets("feuil1")
    feuille.Activate
    feuille.Range(feuille.Cells(1, 1), feuille.Cells(3, 1)) = tableau

En espérant que cet exemple te sera utile !

[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
0
comurhex11 Messages postés 3 Date d'inscription lundi 15 juin 2009 Statut Membre Dernière intervention 17 juin 2009
17 juin 2009 à 08:51
Comme je l'ai déja indiqué, je suis débutant ... Donc ...


Il me faudrais un peu plus d'explication ... j'ai essayé un certain nombre de possibilité générant systématiquement une erreur sur "Set toto = ThisDrawing.PaperSpace", entres autres ...


Est ce à copier dans une macro VB sous Autocad ou sous Excel ?
Quelles "références" cochées ?

Merci
0
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
17 juin 2009 à 10:46
aucune référence à cocher
macro à mettre dans autocad
à propos de :
Set toto = ThisDrawing.PaperSpace
toto doit être déclaré
Dim toto as Object
si ton cartouche est dans l'espace objet il devient:
Set toto = ThisDrawing.ModelSpace

[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
0
comurhex11 Messages postés 3 Date d'inscription lundi 15 juin 2009 Statut Membre Dernière intervention 17 juin 2009
17 juin 2009 à 16:35
Il y a quelque chose qui
Excel ne s'ouvre pas


D'ou proviens cette erreur ???

Merci







Sub ExtractCart()



Dim tableau(3) As String
Dim toto As Object
Dim I As Integer
Set toto = ThisDrawing.PaperSpace
For Each acadObj In toto
With acadObj
If LCase(.Layer) = "cartouche" Then
If StrComp(.EntityName, "AcDbBlockReference", 1) = 0 Then
If .Name = "CART_1" Then
ObjData = .GetAttributes
For I = 0 To 3
tableau(I) = ObjData(I).TextString
Next I
End If
End If
End If
End With
Next acadObj
On Error Resume Next
Set ExcelApp = GetObject(, "Excel.Application")
If Err.Number <> 0 Then
Err.Clear
Set ExcelApp = CreateObject("Excel.Application")
End If
Set feuille = ExcelApp.Sheets("feuil1")
feuille.Activate
feuille.Range(feuille.Cells(1, 1), feuille.Cells(3, 1)) = tableau

End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
CTAC Messages postés 133 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 8 juin 2012 5
18 juin 2009 à 19:58
Salut,

Peut être avec ExcelApp.Visible = True

ctac
0
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
19 juin 2009 à 06:47
en effet ! CTAC a raison
il faut rajouter en toute dernière ligne
ExcelApp.Visible = True

[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
0
Rejoignez-nous