Aller au contenu

Excel vers AutoCAD : Bloc + Attributs


lecrabe
 Partager

Messages recommandés

Speedy

Si tu coches la case comme indiquée dans l'image, les blocs insérés lors du dernier traitement seront effacés, ce qui permet donc une mise à jour.

 

http://img520.imageshack.us/img520/1155/ixlpy4.jpg

 

Lecrabe

Merci pour tous tes tests

 

@+

 

[Edité le 18/7/2007 par Patrick_35]

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

  • Réponses 61
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

Meilleurs contributeurs dans ce sujet

Images postées

  • 2 semaines après...

Bonjour

voici un bout de code vba pour excel pratique avec ixl, si il y a mieux......

 

Public Sub Extraire_Attributs()

Dim AcadApp As AutoCAD.AcadApplication

Dim SelSet As AutoCAD.AcadSelectionSet

Dim FilterType(0) As Integer

Dim FilterData(0) As Variant

Dim FiltersType, FiltersData As Variant

Dim i, Row, j, Column As Integer

Dim Entity As AcadEntity

Dim BlocRef As AcadBlockReference

Dim Attributes As Variant

Dim ColumnExist As Boolean

 

'modifié par Michel a pour version ixl 1.01

 

' Efface toutes les données contenues dans la feuille

Range("1:65536").ClearContents

 

' On lance AutoCAD

Set AcadApp = New AutoCAD.AcadApplication

 

' On remets Excel au premier plan (le lancement d'AutoCAD désactive la fenêtre Excel)

Application.Visible = True

 

' On demande le nom du fichier à ouvrir

Cells(1, 28).Value = Application.GetOpenFilename("Dessins AutoCAD (*.dwg), *.dwg")

 

' Remplissage de l'entête du tableau

Cells(1, 1).Value = "Nom du bloc"

Cells(1, 2).Value = "Calque"

Cells(1, 3).Value = "X"

Cells(1, 4).Value = "Y"

Cells(1, 5).Value = "Z"

Cells(1, 6).Value = "Rotation"

Cells(1, 7).Value = "Echelle"

Cells(1, 27).Value = "Handle"

 

 

' On ouvre le fichier dans AutoCAD

AcadApp.Documents.Open (Cells(1, 28).Text)

 

Row = 2 ' 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

Cells(Row, 1) = BlocRef.Name

Point = BlocRef.InsertionPoint

Cells(Row, 2) = BlocRef.Layer

Cells(Row, 3) = Point(0)

Cells(Row, 4) = Point(1)

Cells(Row, 6) = BlocRef.Rotation

Cells(Row, 5) = Point(2)

Cells(Row, 7) = BlocRef.XScaleFactor

 

 

' Si il a des attributs

If BlocRef.HasAttributes Then

Cells(Row, 1).Value = BlocRef.Name

Cells(Row, 27).Value = BlocRef.Handle

 

' On les récupére

Attributes = BlocRef.GetAttributes

 

' 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 = 8

ColumnExist = False

While Not IsEmpty(Cells(1, Column))

If Cells(1, 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(1, Column).Value = Attributes(j).TagString

Cells(Row, Column).Value = Attributes(j).TextString

End If

 

Next ' Attribut suivant

 

Row = Row + 1 ' Ligne suivante

End If

End If

Next

 

' On ferme AutoCAD

AcadApp.Quit

 

MsgBox "Les attributs du dessin " & Cells(28, 1).Text & " ont été extraits avec succès."

End Sub

 

 

@+

 

Michel a

Lien vers le commentaire
Partager sur d’autres sites

  • 8 mois après...

Salut patrick_35 je suis sous la version 2008 et ... problème... je ne sais pas s'il est de moi ou de la cversion ou quoi je demande explication...

Le problème est le suivant :

Il est possible d'insérer les bloc après moification des attributs... jusque là OK mais... les bloc sont insérés avec une rotation qui ne respecte pas celle du bloc initial ce qui crée un décalage parasite... De plus la case "effacer le bloc déjà inséré" est grisée et on ne peux pas y toucher par chance elle est quand meme coché le problème est qu'il ne m'efface pas le bloc inséré..

Merci à tous ceux qui pourront m'aider

 

Et un grand bravo à patrick_35 pour tout ce travail!!!!

 

Félicitation

Lien vers le commentaire
Partager sur d’autres sites

  • 1 an après...

Bonjour à toutes et tous,

 

Bienvenue megadom195,

 

Le fichier .dcl gère les boites de dialogues utiles au lisp. Il faut donc que les deux fichiers (.lsp et .dcl) soit dans un dossier de recherche des supports AutoCAD,...

 

Un p'tit tour sur ce post,...(4 Boites de dialogue (DCL) en particulier puisque tu semble connaitre l'utilisation et le chargement de lisps),...

Civil 3D 2022 - COVADIS_17.1d

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

  • 3 mois après...

Bonjour à tous,

 

Je suis nouveau sur ce site et par conséquent aussi sur ce forum.

 

Je suis aussi nouveau sur AutoCAD. Je suis AutoCAD 2008. J'ai testé le progamme IXL V1.03 et il marche nickel. Par contre j'aimerai demander à Patrick_35 (ou à tout autre developpeur) s'il était possible d'avoir un programme similaire mais en VB cette fois.

 

Merci,

Lien vers le commentaire
Partager sur d’autres sites

Tout d'abord, merci pour ta réponse rapide.

 

En fait c'est mon supérieur qui tiens absolument que la progrmmation soit faite en VB (VBA plus exactement) car ce langage est plus répandu que du LISP. Etant aussi grand débutant dans ce langage de programmation, j'avoue que j'aurai des difficultés montres à faire une quelconque traduction et par conséquent je ne préfère pas trop m'y aventurer.

Lien vers le commentaire
Partager sur d’autres sites

Tu peux dire à ton chef que VBA va disparaître au profit de VB.NET

C'est Microsoft qui l'abandonne et Autodesk ne fait que suivre.

 

J'ajouterai une chose, c'est que le lisp est un language natif d'Autocad.

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

car ce langage est plus répandu que du LISP

 

Pour quelles applications ? (rappel : VBA = Visual Basic for Application)

Pour les applications Microsoft Office, certainement. Mais pas pour AutoCAD.

L'immense majorité des routines pour AutoCAD est écrite en LISP.

De plus, comme le dit Patrick_35 à moins d'être sûr de ne jamais vouloir utiliser de versions d'AutoCAD postérieures à 2011 (qui devrait être la dernière à supporter VBA) ni passer aux processeurs 64 bits (qui supportent très mal VBA), privilégier VBA est une aberration.

 

VBA va disparaître au profit de VB.NET

Ce n'est pas tout à fait exact, VBA va disparaître et Microsoft comme Autodesk conseillent de migrer vers .NET (qui supporte plusieurs langages dont VB.net).

Si le choix de VB.net peut paraître évident pour ceux qui ont le courage de passer de VBA à .NET (je dis courage parce que l'apprentissage est plus difficile), je persiste à penser que ce n'est pas forcément judicieux.

Certes les syntaxes VB, VBA, VB.net sont très proches (avec les mêmes lourdeurs) mais la question de la syntaxe est vraiment minime par rapport à l'apprentissage de l'environnement .NET et de la Programmation Orientée Objet.

À mon avis changer aussi de syntaxe (pour C# qui est le langage développé spécifiquement pour .NET) permet plus facilement d'aborder .NET comme quelque chose de complètement différent et de se débarrasser des (pas toujours bonnes) habitudes acquise avec VBA.

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

 

Hello

 

+1 avec (gile) , +1 avec Patrick_35

 

Le VBA n'est plus supporte par Autodesk et il est officiellement abandonne !

Autodesk fournissait en option le VBA sur les versions 2010 & 2011 , "gentiment" si on peut dire !?

 

C comme tu le sens !

 

Le Decapode

 

 

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

  • 6 mois après...

bonjour,

 

j'ai parcourue votre echange et la problématique m'interesse,

dans votre cas exel n'est qu'un tableau de donnée et le programme en lisp parcours ce tableau pour remplir un dessin autocad, est bien cela?

pouvez vous me dire si le programme en VB remplace le programme lisp?

 

quelqu'un saurait la routine pour affecter des valeurs d'attribut aux blocs via un programme sous VBA excel?

merci

Lien vers le commentaire
Partager sur d’autres sites

  • 4 ans après...

Bonjour,

 

As-tu tenté d'utilisé ExcelAttribute, C'est le top...

 

Denis...

Windows 10 Pro 64bits / AutoCAD MAP 3D 2019

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres...
Davantage d'avantages, avantagent davantage. (Bobby Lapointe)
La connaissance s'accroît quand on la partage.(Socrate)

Lien vers le commentaire
Partager sur d’autres sites

  • 8 mois après...

Je viens d'essayer le lien que j'ai placé dans mon précédant post...

 

Il fonctionne chez moi...

 

Je ne sais pas comment t'aider...

Windows 10 Pro 64bits / AutoCAD MAP 3D 2019

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres...
Davantage d'avantages, avantagent davantage. (Bobby Lapointe)
La connaissance s'accroît quand on la partage.(Socrate)

Lien vers le commentaire
Partager sur d’autres sites

  • 2 ans après...

Bonjour,

 

C'est avec un grand intérêt que j'ai suivi vos échanges sur le ixl de patrick. mais je ne trouve malheureusement pas la réponse à mon problème :

 

J'obtiens après avoir lancé le traitement le message d'erreur suivant : " impossible de trouver le bloc " Un_Bloc" indiqué dans la cellule "A9" de la feuille...etc"

 

C'est peut être une question bête mais l'IXL ne doit-il pas justement en créer sous AutoCAD à partir des info+attributs renseignés dans l'EXCEL ?

 

Pourriez-vous éclairer ma lanterne ? :)

 

Je vous en remercie par avance,

 

Ghislano

 

PS : un grand merci à Patrick !

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

C'est peut être une question bête mais l'IXL ne doit-il pas justement en créer sous AutoCAD à partir des info+attributs renseignés dans l'EXCEL ?

Non, le lisp ne créé pas le bloc, mais insère celui-ci dans le dessin depuis les infos données sur la feuille Excel.

Le bloc doit donc être existant dans le dessin.

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

 

Non, le lisp ne créé pas le bloc, mais insère celui-ci dans le dessin depuis les infos données sur la feuille Excel.

Le bloc doit donc être existant dans le dessin.

 

@+

 

Je te remercie pour ta réactivité Patrick.

 

Je me permets de t'expliquer ma problématique :

-j'ai dessiné sur un plan 10 bureaux

-à chaque bureau correspond un numéro de position, le nom, le prénom d'un personne recensé dans un tableau excel.

-j'ai donc créer manuellement un bloc que j'ai nommé ETIQUETTE dans un calque ETIQUETTES à côté de chaque bureau avec les attributs correspondants aux informations mentionnées plus haut.

 

Pour toutes modifs sur les ETIQUETTE, les fonctions ATTIN et ATTOUT me simplifient la vie. j'ATTOUT, je modifie l'excel créé puis j'ATTIN le tour est joué.

 

 

Par contre maintenant que j'ai dessiné 100 bureaux, créer manuellement les 100 blocs avec attributs pour faire un ATTOUT/modif/ATTIN à partir de mon tableau excel me semble inutilement chronophage ( je parle bien sur de la création a la mano de 100 blocs repérant les positions)

 

IL y a-t- il un moyen d'utiliser les fonctionnalités d'IXL ( ou autre) pour gagner du temps ?

 

Merci pour vos lumières !

Lien vers le commentaire
Partager sur d’autres sites

Du point de vue des ressources, il est inutile de créer un bloc unique pour un bureau unique, sauf si tu utilises les extractions de données.

Créer un bloc est très facile avec la commande bloc.

IXL n'est pas prévu pour ton besoin.

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

Chargement
 Partager




×
×
  • Créer...