Communauté
Inventor - Français
Bienvenue sur les forums Inventor d’Autodesk. Partagez vos connaissances, posez des questions, collaborez sur des idées, et explorez les sujets Inventor populaires.
annuler
Affichage des résultats de 
Afficher  uniquement  | Rechercher plutôt 
Vouliez-vous dire : 

Inventor : Récupérer des iPropriétés de plusieurs fichiers Drawing (.dwg) et les copier dans un tableau Excel

11 RÉPONSES 11
RÉSOLU
Répondre
Message 1 sur 12
NicolasEmr
306 Visites, 11 Réponses

Inventor : Récupérer des iPropriétés de plusieurs fichiers Drawing (.dwg) et les copier dans un tableau Excel

Bonjour,

 

J'ai réussi à créer une règle externe sur Inventor pour récupérer une iPropriété (Custom) d'un fichier .dwg et l'écrire dans un tableau Excel.

 

Mais j'aimerais maintenant trouver un moyen de récupérer cette iPropriété de tous les fichiers .dwg d'un dossier et les ranger dans un tableau Excel, est-ce possible ?

 

J'ignore s'il vaut mieux faire une macro sur Excel ou une règle sur Inventor pour cette tâche ?

 

Merci d'avance pour vos réponses.


Le titre du sujet a été modifié par un modérateur pour faciliter la recherche. Titre original:
Récupérer des iPropriétés de plusieurs fichiers Drawing (.dwg) et les copier dans un tableau Excel

11 RÉPONSES 11
Message 2 sur 12
ThomasB44
en réponse à: NicolasEmr

Salut @NicolasEmr 

Je pense qu'il s'agit typiquement d'une tâche pour "l'Apprentice server"

Aide/Programmation/API Help/Apprentice server

ThomasB44_0-1694097893959.png

 

Et qu'il sera donc plus facile de le faire à l'aide d'un éditeur de programme tel que Microsoft Visual Basic Editor (VBA), ou Microsoft Visual Studio (VB.NET), plutôt que d'utiliser une règle iLogic à l'intérieur d'Inventor.


Thomas
Mechanical Designer / Inventor Professionnal 2023
Inventor Professional EESignature

Message 3 sur 12
NicolasEmr
en réponse à: ThomasB44

Merci beaucoup, je vais me plonger dans l'aide API d'Inventor, ça a l'air assez complet.
Message 4 sur 12
ThomasB44
en réponse à: NicolasEmr

La documentation fournie à cet emplacement est complète et parfois agrémentée d'exemples de programmes, en général en langage VBA.

Tu trouveras également les définitions, descriptions, et propriétés des commandes.


Thomas
Mechanical Designer / Inventor Professionnal 2023
Inventor Professional EESignature

Message 5 sur 12
NicolasEmr
en réponse à: ThomasB44

Effectivement, j'en ai lu une partie, c'est très intéressant. En revanche je n'ai pas encore trouvé le moyen "d'atteindre" Inventor via Excel, sais-tu s'il faut une bibliothèque spéciale ?
Message 6 sur 12
ThomasB44
en réponse à: NicolasEmr

Il te faut la référence vers l'Object Library d'Inventor :

ThomasB44_0-1694175090918.png

Puis déclarer et appeler l'application Inventor.

Ensuite c'est du classique 😉


Thomas
Mechanical Designer / Inventor Professionnal 2023
Inventor Professional EESignature

Message 7 sur 12
NicolasEmr
en réponse à: ThomasB44

Bonjour,

Merci ThomasB44 pour tes réponses.

Je pense ne plus être très loin de mon objectif, mais je n'arrive pas à trouver la syntaxe de la ligne qui va chercher l'iPropriété et la copier dans Excel.

J'imagine que ça devrait ressembler à quelque chose comme suit :

Worksheets("Feuil1").Range("A1").Value = invDoc.DrawingDocument.Item("Part Number")

J'ai ajouté la bibliothèque Autodesk Inventor Object Library, mais j'ai l'impression que toutes les variables ne sont pas disponibles, faut-il faire un "Import Inventor" ou quelque chose du genre ?
Message 8 sur 12
ThomasB44
en réponse à: NicolasEmr

Salut @NicolasEmr 

Une fois la bibliothèque importée tu as tout ce qu'il faut normalement.

Une fois ton Apprentice déclaré, ton éditeur doit te proposer les commandes qui suivent ?

 

Pour les iPropriétés il faut comprendre comment elles sont structurées.

Voici un exemple de code à disposition dans l'aide :

Public Sub ApprenticeUpdate()
    ' Declare a variable for Apprentice. 
    Dim invApprentice As New Inventor.ApprenticeServerComponent

    ' Open a document using Apprentice. 
    Dim invDoc As Inventor.ApprenticeServerDocument
    invDoc = invApprentice.Open("C:\Temp\Part1.ipt")

    ' Get the design tracking property set. 
    Dim invDTProperties As Inventor.PropertySet
    invDTProperties = invDoc.FilePropertySets.Item("Design Tracking Properties")

    ' Edit the values of a couple of properties. 
    invDTProperties.Item("Checked By").Value = "Bob"
    invDTProperties.Item("Date Checked").Value = Now

    ' Save the changes. 
    invDoc.FilePropertySets.FlushToFile()

    ' Close the document and release all references. 
    invDoc = Nothing
    invApprentice.Close()
    invApprentice = Nothing
End Sub

Il y a donc 2 niveaux d'iPropriétés, le 1er est un groupe comme le "Design Tracking Properties" dans lequel tu retrouveras encore d'autres Item, comme le "Part Number" par exemple

Dim InvDTProperties As Inventor.PropertySet
Set InvDTProperties = InvDoc.FilePropertySets.Item("Design Tracking Properties")
Debug.Print InvDTProperties.Item("Part Number").Value

 


Thomas
Mechanical Designer / Inventor Professionnal 2023
Inventor Professional EESignature

Message 9 sur 12
NicolasEmr
en réponse à: ThomasB44

Bonjour @ThomasB44,

 

Merci pour toute ton aide. Grâce à l'aide API, tes messages et internet j'ai réussi à écrire le code VBA dont j'avais besoin. Le voici :

 

Sub RecupiProprietes()

'Donne l'accès à Apprentice
Dim invApprentice As New Inventor.ApprenticeServerComponent
Dim invDoc As Inventor.ApprenticeServerDocument

'Déclaration des variables
Dim oFSO As Object
Dim oFolder As Object
Dim oFile As Object
Dim i As Integer
Dim invProperties As Inventor.PropertySet

'Permet d'accéder au dossier
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder("Adresse\Dossier")

i = 1
For Each oFile In oFolder.Files 'Balaye tous les fichiers existants dans le dossier oFolder

If Left(oFile.Name, 2) = "DN" And Right(oFile.Name, 4) = ".dwg" Then 'Trie les fichiers dans le dossier

Worksheets("Feuil1").Range("C" & i).Value = oFile.Name 'Ecrit le nom du fichier dans la première colonne du tableau Excel
Set invDoc = invApprentice.Open(oFile) 'Ouvre le fichier sur Apprentice
Set invProperties = invDoc.PropertySets.Item("User Defined Properties") 'Indique l'onglet d'iProprietes qu'on cherche à utiliser
Worksheets("Feuil1").Range("D" & i).Value = invProperties.Item("Masse_Totale").Value 'Ecrit la valeur de l'iPropriete dans la deuxième colonne du tableau Excel

End If

i = i + 1

Next oFile
invApprentice.Close 'Ferme Apprentice

End Sub

 

 

Ici j'ai utilisé un If pour trier les fichiers dans mon dossier mais ce n'est pas nécessaire pour le bon fonctionnement du code.

 

Comme prévu, ce programme sert à récupérer les iProprietes d'un fichier Inventor et les copier dans un tableau Excel.

 

Cependant, il y a plus de 300 fichiers dans mon dossier dont 140 qui répondent à la condition du If, ce qui implique que pour ma part le code est très long à s'exécuter, est-ce que tu aurais une idée de comment l'optimiser pour qu'il s'exécute plus rapidement ?

 

Merci encore pour tout !  

Bonne journée 😉

Message 10 sur 12
ThomasB44
en réponse à: NicolasEmr

Haa ! Ravi que tu touches au but 😉

Je pense que tu as oublié quelque chose dans ton code.

L'Apprentice Server est comme un logiciel qui tourne en arrière plan.

Tu ouvres plein de documents, mais tu ne les fermes jamais dans ton code.

Je suppose qu'au bout d'un moment, cela doit ralentir considérablement l'exécution.

Après chaque ouverture d'un document dans ta boucle et lecture de l'iProp, il faut fermer ce document.

 

Et pour le tri de tes fichiers avec la condition If, il faudrait en savoir plus...


Thomas
Mechanical Designer / Inventor Professionnal 2023
Inventor Professional EESignature

Message 11 sur 12
NicolasEmr
en réponse à: ThomasB44

Oui j'y avais pensé aussi, et j'ai testé justement en fermant à chaque fois, l'exécution reste assez longue.
Je pense que le plus gros problème c'est de le laisser scanner tous les fichiers du dossier, idéalement il faudrait que je créé un dossier avec uniquement les fichiers qui m'intéressent.

Mais j'ignore s'il y a mieux à faire pour limiter les opérations faites dans la boucle.

Au niveau du tri c'est qu'il y a une multitude de fichiers dans ce dossier et je souhaite garder que ceux qui commencent par "DN" et qui sont des drawings, car sinon il essayerait de scruter des pdf, des fichiers excel,...
Message 12 sur 12
ThomasB44
en réponse à: NicolasEmr

Dans ce cas lance un test de ton code sans la partie Apprentice Server, juste l'écriture du oFile.Name dans l'Excel

Pour avoir déjà utilisé les commandes FSO, c'est normalement très rapide, suffisamment pour que l'affichage dans Excel ne suive pas.

Il existe d'autres moyens pour filtrer les fichiers dès la recherche, et de retourner directement la Collection d'objets qui t'intéresse.

Par exemple avec le FileDialog de Windows. Lien ici.

 

Selon moi ce serait plutôt la partie Apprentice Server qui doit ralentir. Mais dis toi que c'est certainement beaucoup plus rapide que d'ouvrir le fichier dans Inventor.


Thomas
Mechanical Designer / Inventor Professionnal 2023
Inventor Professional EESignature

Vous n'avez pas trouvé ce que vous recherchiez ? Posez une question à la communauté ou partagez vos connaissances.

Publier dans les forums  

Autodesk Design & Make Report