🗓️ Note : Cet article est une archive importée de mon ancien blog. Certaines informations peuvent ne plus être à jour.
Voici un petit programme en VBA pour importer / éditer / exporter les propriétés d’un plan entre Inventor et Excel
Bonjour.
Dans la vraie vie de la réalité vraie, je suis dessinateur industriel et j’utilise couramment Autodesk Inventor. C’est pourquoi j’ai créé ce petit programme…
Or, il m’arrive souvent d’avoir à éditer le cartouche d’une dizaine de plans simultanément (par exemple, renvoyer tout un jeu de plan avec la date du jour). Et il se trouve que dans ma société, il a été décidé qu’une page = un document ; càd 1 sheet = 1 dwg . (Bien qu’Inventor peut gérer plusieurs sheet dans le même fichier mais passons…)
Aussi, les informations du cartouche sont définis dans les propriétés du plan. C’est donc barbant de modifier chaque champs à la main et de faire ça pour chaque sheet.
J’ai donc créé ce petit programme qui permet d’extraire pour chaque document ouvert sur Inventor, toutes les propriétés et d’afficher ça sous forme de tableau sur Excel. On peut ainsi tout modifier et tout réinjecter dans Inventor.
Bon, c’est codé avec les pieds, y’a certainement pas mal d’erreurs … Néanmoins ça marche. Et si c’est pas cassé pourquoi le réparer ?
N’hésitez pas à me faire vos retours !
Sinon le code est là en dessous (pour vous éviter de télécharger et de lancer le vilain .xlsm)
Option Explicit
‘DECLARATION DES VARIABLES « PUBLIC »Public inventorApp As Inventor.Application
Public iDoc As Inventor.DocumentPublic CustomPropertySet As PropertySet
Public str_propname As String
Public j As Double
Public k As DoublePublic lRow As Integer
Public lCol As IntegerSub ExtractPropInventor()
‘========== CALCUL DU TEMPS D’EXECUTION ==========
‘ Déclarations
Dim temps_debut As Single
Dim duree As Single
Dim doc As Document‘ Récupérer le temps initial
temps_debut = Timer
‘=========================================================‘Stop refresh
Application.ScreenUpdating = False‘Variables -> voir « module_VARIABLES »
‘Passage de la table en type de données TEXT
Cells.Select
Selection.NumberFormat = « @ »‘Connection à une instance inventor existante
On Error Resume Next
Set inventorApp = GetObject(, « Inventor.Application »)
‘Si inventor n’est pas ouvert, message d’erreur
If Err Then
MsgBox « Veuillez ouvrir une instance Inventor. »
Exit Sub
End If‘ Inventor Visible :
inventorApp.Visible = True‘RECUPERATION DES PROPRIETES
‘ Balayage de tous les documents ouvert (ipt,iam,dwg…)
‘ Reset de la variable colonne
k = 3
For Each iDoc In inventorApp.Documents
‘Si le document est un dessin alors
If iDoc.DocumentType = kDrawingDocumentObject Then
‘ Récupération du titre du dessin pour titre de la colonne
Cells(1, k).value = iDoc.DisplayName
‘ Récupération des propriétés utilisateurs
Set CustomPropertySet = iDoc.PropertySets.item(« Inventor User Defined Properties »)
‘ Reset de la variable ligne
j = 2
‘ Pour chaque champs dans la liste des propriétés utilisateurs
For Each item In CustomPropertySet
‘on cherche si la propriété existe déja , si elle existe, on écrit la valeur
On Error Resume Next
findedRow = WorksheetFunction.Match(item.Name, Range(« B:B »), 0)
If findedRow <> 0 Then
Cells(findedRow, k).value = item.value
‘reset de findedRow
findedRow = 0
Else
‘sinon on crée la propriété tout en bas du tableau
‘on cherche la derniére ligne
lRow = Cells(Rows.Count, 2).End(xlUp).Row
‘que l’on incrémente de 1 pour avoir une ligne vierge
lRow = lRow + 1
Cells(lRow, 2).value = item.Name
Cells(lRow, k).value = item.value
‘reset
findedRow = 0
End IfNext item
‘colonne suivante
k = k + 1
End If
Next iDoc‘Ecriture de la cellule A1
Range(« B1 »).value = « PROPRIETES »‘Ajustement automatique de la largeur des colonnes
‘Passage de la table en type de données TEXT
Cells.Select
Cells.EntireColumn.AutoFit
Selection.NumberFormat = « @ »‘Suppression du jaune
Cells.Select
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Range(« A1 »).Select‘Reactive refresh
Application.ScreenUpdating = True‘========== CALCUL DU TEMPS D’EXECUTION ==========
‘ Calculer la durée d’exécution
duree = Timer – temps_debut‘ Afficher la durée d’exécution
MsgBox (« EXTRACT REUSSI ! Durée d’éxécution : » & duree)
‘=========================================================End Sub
Sub InsertPropInventor()
‘========== CALCUL DU TEMPS D’EXECUTION ==========
‘ Déclarations
Dim temps_debut As Single
Dim duree As Single
Dim doc As Document‘ Récupérer le temps initial
temps_debut = Timer
‘=========================================================‘Stop refresh
Application.ScreenUpdating = False‘Variables -> voir « module_VARIABLES »
Dim customProp As Property‘Connection à une instance inventor existante
On Error Resume Next
Set inventorApp = GetObject(, « Inventor.Application »)
‘Si inventor n’est pas ouvert, message d’erreur
If Err Then
MsgBox « Veuillez ouvrir une instance Inventor. »
Exit Sub
End If‘ Inventor Visible :
inventorApp.Visible = True‘désactivation du screen update
inventorApp.ScreenUpdating = False‘DETERMINATION DES LIMITES DU TABLEAU
‘Recherche de la derniére ligne sur la colonne 1
lRow = Cells(Rows.Count, 2).End(xlUp).Row‘Recherche de la derniére colonne sur la ligne 1
lCol = Cells(1, Columns.Count).End(xlToLeft).Column‘INSERTION DES PROPRIETES
‘reset des variables
k = 3‘Balayage tous les documents ouverts sur inventor (ipt,iam,dwg)
For Each iDoc In inventorApp.Documents
‘Si le document est un dessin alors
If iDoc.DocumentType = kDrawingDocumentObject Then
‘Balayage du tableau excel
For k = 3 To lCol
‘Si le nom du document correspond au nom de la cellule
If iDoc.DisplayName = Cells(1, k).value Then
‘définition de la variable CustomPropertySet
Set CustomPropertySet = iDoc.PropertySets.item(« Inventor User Defined Properties »)
‘Sur chaque ligne du tableau
For i = 2 To lRow
‘on récupére le nom de la propriété
str_propname = Cells(i, 2).value
‘On vérifie si la cellule a été modifié (via sa couleur)
If Cells(i, k).Interior.ColorIndex = 6 Then
‘si la cellule contenant la valeur est vide, alors on ne met rien dans la propriété
If IsEmpty(Cells(i, k)) Then
CustomPropertySet.item(str_propname).value = vbNullString
‘sinon on met la valeur souhaitée
Else
CustomPropertySet.item(str_propname).value = Cells(i, k).value
End If
‘Si la cellule n’a pas été modifié, on passe à la ligne suivante
Else
End If
Next i
End If
Next k
End If
Next iDoc‘réactivation du screen update
inventorApp.ScreenUpdating = True‘Reactive refresh
Application.ScreenUpdating = True‘========== CALCUL DU TEMPS D’EXECUTION ==========
‘ Calculer la durée d’exécution
duree = Timer – temps_debut‘ Afficher la durée d’exécution
MsgBox (« INSERT REUSSI ! Durée d’éxécution : » & duree)
‘=========================================================End Sub