Extraction attributs sur Autocad 2009 vers Excel 2007

Signaler
Messages postés
2
Date d'inscription
mardi 10 novembre 2009
Statut
Membre
Dernière intervention
10 septembre 2010
-
 ramy01 -
Bonjour,
Je suis plus que débutant en prog VBA mais, j'ai trouvé une extraction d'attributs sur ce site qui fonction avec autocad 2004 et excel 2003.
Mais aujourd'hui, avec Autocad 2009 et excel 2007 cela ne fonctionne plus.
la commande Attributes = BlocRef.GetAttributes ne permet pas de trouver les attributs
Je pense que c'est lié à Autocad qui après la 2004 permet de faire des blocs dynamiques...
En terme de Référence je pense avoir les bonnes.

Si quelqu'un peut m'aider,...Help
Si besoin emmanuel.gaugue@gmail.com


Merci pour votre aide
Manu

ci-joint un extrait du code



' On ouvre le fichier dans AutoCAD
AcadApp.Documents.Open (Cells(1, 1).Text)

Row = 4 ' 1ère ligne du tableau

' On crée un jeu de sélection
Set SelSet = AcadApp.ActiveDocument.SelectionSets.Add("SELSET")

' On prépare un filtre de sélection sur les insertions de bloc
FilterType(0) = 0
FilterData(0) = "INSERT"
FiltersType = FilterType
FiltersData = FilterData

' Sélection des entités
SelSet.Select acSelectionSetAll, , , FiltersType, FiltersData

' On balaye le jeu de sélection
For i = 0 To SelSet.Count - 1
Set Entity = SelSet.Item(i)

' Si l'objet est une insertion de bloc
If Entity.ObjectName = "AcDbBlockReference" Then
' On précise le type de l'objet pour pouvoir accéder à ses propriétés et
' ses méthodes spécifiques
Set BlocRef = Entity

' Si il a des attributs
If BlocRef.HasAttributes Then
Cells(Row, 1).Value = "'" & BlocRef.Name
Cells(Row, 3).Value = "'" & BlocRef.Layer
Cells(Row, 2).Value = "'" & BlocRef.Handle
Cells(Row, 4).Value = "'" & BlocRef.InsertionPoint(0)
Cells(Row, 5).Value = "'" & BlocRef.InsertionPoint(1)
Cells(Row, 6).Value = "'" & BlocRef.InsertionPoint(2)

' On les récupére
Attributes = BlocRef.GetAttributes
MsgBox Attributes

' On parcourt le tableau
For j = LBound(Attributes) To UBound(Attributes)
' On recherche si une colonne existe déjà pour cette étiquette d'attribut
Column = 7
ColumnExist = False
While Not IsEmpty(Cells(3, Column))
If Cells(3, Column).Text = Attributes(j).TagString Then
' Une colonne existe, on la remplit avec la valeur de l'atribut
Cells(Row, Column).Value = Attributes(j).TextString
ColumnExist = True
End If
Column = Column + 1 ' On passe à la colonne suivante
Wend

If Not ColumnExist Then
' Aucune colonne n'existe, on en crée une et on la remplit
Cells(3, Column).Value = Attributes(j).TagString
Cells(Row, Column).Value = Attributes(j).TextString
End If

Next ' Attribut suivant

Row = Row + 1 ' Ligne suivante
Else

Cells(Row, 1).Value = "'" & BlocRef.Name
Cells(Row, 3).Value = "'" & BlocRef.Layer
Cells(Row, 2).Value = "'" & BlocRef.Handle
Cells(Row, 4).Value = "'" & BlocRef.InsertionPoint(0)
Cells(Row, 5).Value = "'" & BlocRef.InsertionPoint(1)
Cells(Row, 6).Value = "'" & BlocRef.InsertionPoint(2)

Row = Row + 1 ' Ligne suivante
End If

End If

8 réponses

Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
regardes du coté des exemples autocad
1 depuis excel récupérer les attributs des blocs autocad
C:\Program Files\AutoCAD 2008\Sample\ActiveX\ExtAttr
2 la meme chose depuis autocad vers excel
C:\Program Files\AutoCAD 2008\Sample\VBA\ExcelLink.dvb

ces deux exemples sont inchangés depuis la version 2000 d'autocad (premiere version à intégrer le VBA)
personellement j'utilise la deuxieme légèrement modifiée pour
améliorer la vitesse d'exécution quand le dessin contient un grand nombre de blocs
j'utilise la même macro avec autocad 2010 sans aucun probleme
de meme la version d'excel est indifférente
je n'utilise pas excel 2007 car je trouve que les rubans sont une "sombre merde" mais des collègues l'ont et n'ont pas de probleme

si c'est la solution, penser : REPONSE ACCEPTEE
Messages postés
2
Date d'inscription
mardi 10 novembre 2009
Statut
Membre
Dernière intervention
10 septembre 2010

Merci pour ta réponse, mais mes exemples sont identique en 2004 et 2009

En fait la macro se déroule normalement mais lorsqu'il tombe sur la commande

Attributes = BlocRef.GetAttributes

Il ne trouve pas d'attributs ou il ne les analyse pas bien.

En fait il ne remplie pas "Blocref". Je ne sais pas si cela vient de la commande d'ouverture, ou de recherche voir de filtrage mais en fait la variable BlocRef reste vide.

Je me demande si mes variables sont bien définie maintenant qu'autocad est capapble de faure des blocs dynamiques

Merci pour ton aide

Emmanuel
Messages postés
8
Date d'inscription
mercredi 1 septembre 2010
Statut
Membre
Dernière intervention
30 septembre 2010

pour avoir "chipoter" dans autocad

j'ai eu pas mal de pb
simplement parce que je passais d'un verson FR a une version GB et inversement
et aussi parce que certaine variable on evolueais
avant la réponse été Yes ou Non
maintenant elle devient 0 , 1 , 2 etcc...

tu as aussi la cmd SDI de autocad qui dois etre a 1 ( un seul plan d'ouvert a la fois ) pour toi extraire un macro

A+
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Bonjour,

Pour une question VBA, merci de poster sur vbfrance dans le thème VBA.

[ Déplacé sur vbfrance ]
Messages postés
3
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
7 septembre 2011

Juste un petit merci à manuel33 pour ces 2 lignes de codes que je lui ai prise pour les ajouter au mien :

Cells(Row, 4).Value = "'" & BlocRef.InsertionPoint(0)
Cells(Row, 5).Value = "'" & BlocRef.InsertionPoint(1)

J'ai cherché toute la matinée pour extraire, en plus des attributs, les positions en X et Y de mes blocs (1670 blocs dans un dessin à renuméroter)

Merci à toi (1 an après)
salut
comment metre un code ou programme sous une bouton pour qu'il fonctionne avec VBA

Bonjour,

En commençant par un double-clic sur le bouton
il m'affiche un ereur lors de l'exécution " Erreur de compilation : attribut incorrect dans une procédure Sub ou Function"