Coordonnées du cartouche via VBA

Bonjour,

Je vous présente mon problème : 

Après un infructueux travail de recherche je sollicite votre aide afin de pouvoir obtenir les coordonnées(x,y) via VBA de l'élement cartouche de cette mise en plan.

Le fichier de départ est un dxf importé via SolidWorks 2012.

Merci d'avance de vos réponses.

 


image_1.png

Salut,

Qu'est ce que tu as réussi à faire avec ta macro pour l'instant ?

 

Voilà une macro qui permet de faire un "get" sur cahcune des entités d'une mise en plan, puis de faire un debug.print de son nom :

http://help.solidworks.com/2012/English/api/sldworksapi/Get_All_Visible_Components_in_Drawing_View_Example_VB.htm

Ensuite quand on est positionné sur le bon element (en fonction de ce qu'affiche le debug.print à chaque ligne avec un IF), il suffit de récupérer la position en s'inspirant des macros proposées ici :

https://forum.solidworks.com/thread/60386

 

1 « J'aime »

Merci PL de ce retour rapide ! 

Pour être honnête j'ai essayé d'utiliser un certain nombre de macros présentes sur le web mais en vain. 

Ma macro personelle est au point mort faute de connaissance suffisante.

Lors de l'utilisation  des deux macros que tu as mis en lien j'obtient les messsages d'erreur suivants :

Macro du lien n°1 :

Erreur au niveau de :

'Get all visible components in the view

vComps = swView.GetVisibleComponents

/sites/default/files/from_ckeditor/macro1.png

Macro du lien n°2 :

Au niveau de la 5ème ligne de la macro main :

Set swSketch = swView.GetSketch

Erreur d'execution 91 Variable objet ou variable de bloc With non définie.

/sites/default/files/from_ckeditor/macro2_1.png

/sites/default/files/from_ckeditor/macro2_2.png

Merci de ton aide !

Le premier lien n'était pas bon, regarde de ce côté :

http://help.solidworks.com/2016/English/api/sldworksapi/Get_Title_Block_Tables_Example_VBNET.htm

Mais quel est ton niveau en VBA ?

1 « J'aime »

Je maitrise bien les languages Excel, Powerpoint et Outlook mais je ne suis pas familier de Solidworks.

Tout d'abord j'ai les instructions suivantes en rouge donc à pirori incorrectes : 

Partial class SolidWorksMacro

End Class

Lors de l'activation de la macro un message d'erreur apparâit dès la première ligne :

Erreur de compilation : Instruction incorrecte à l'extérieur d'une procédure.

On parle bien d'une macro lancée depuis SolidWorks ?

SI c'est le ca, tu peux virer les classes, je crois que c'est inutile

1 « J'aime »

Ok voila qui est fait cependant le problème persiste au niveau de :

Imports SolidWorks.Interop.SldWorks

Il bug sur le SolidWorks en gras ci-dessus avec le message d'erreur  :

Erreur de compilation : Instruction incorrecte à l'extérieur d'une procédure.

Une idée sur l'origine du problème ?

Tu peux mettre ton code dans un fichier txt en pièce jointe sur Lynkoa stp ?

1 « J'aime »

Voila le code


code.txt

Tu as pris ça de quel lien ?

Car je pense qu'il y a une erreur à la dernière ligne :   

Public swApp As SldWorks

Elle ne devrait pas être à cet endroit.

1 « J'aime »

Je l'ai pris du dernier lien que tu m'as transmis : 

 

Le premier lien n'était pas bon, regarde de ce côté :

http://help.solidworks.com/2016/English/api/sldworksapi/Get_Title_Block_...

Mais quel est ton niveau en VBA ?

Ton code n'est pas du VBA mais du VB.net.

Cela ne peut pas fonctionner...

A plus.

1 « J'aime »

Voilà qui explique pas mal de choses.

Dans ce cas je suis réellement dans une impasse.

Si quelqu'un a une idée il est le bienvenue.

 

Oui le dernier lien est du VB.NET à modifier pour l'adapter, c'est pour ça que je t'ai demandé ton niveau.

VB.NET et VBA sont deux langages assez proches, mais pas compatibles.

1 « J'aime »

L'exemple est également disponible en VBA : http://help.solidworks.com/2016/english/api/sldworksapi/get_title_block_tables_example_vb6.htm

1 « J'aime »

BIen vu remrem, j'avais essayé de remplacer la fin de l'URL par VB au lieu de VB6...

Merci beaucoup de votre aide.

J'ai reprit le code vba donné dans le lien cependant un message d'erreur apparaît au niveau de  :

 Set feat = tbtAnno.TitleBlockTableFeature

Message d'erreur : Erreur d'execution 91 Variable objet ou variable de bloc With non définie.

Deux petite questions :

Tu as un fond de plan où est situé ton cartouche ou il est dans le plan directement ? Tu peux le selectionner ?

C'est possible pour toi de sélectionner le cartouche à la souris avant ou tu veux les coordonnées sans intervention de l'utilisateur ?

 

En gros, c'est quoi le but ?

Les plans sont extrait de DXF réalisés sur un autre logiel.

Il n'y a pas de fond de plan. je peux effectivement sélectionner le cartouche.

Le but est de procéder à l'ajout automatique d'une image par rapport au cartouche sur un ensemble de fichiers qui de par leur différence de taille ne possède aucune mise en page commune.

En conséquence, je souhaiterais savoir comment obtenir les coordonnées du cartouche (ou plus globalement d'un élement) sans intervention utilisateur et dans le cadre d'une mise en plan.

Merci de votre aide.