récupérer le nom des parts dans les sous-products
3 participants
Page 1 sur 1
récupérer le nom des parts dans les sous-products
Bonjour à vous,
J'ai un petit bug avec ma macro, j'aimerai récupérer tous les noms de mon arbre. Alors j'ai compté le nombre d'éléments qu'il y avait dans mon arbre et après, j'arrive à récupérer le nom des parts et des sous-products, mais pas le nom des parts qui sont dans des sous-product
Voici mon code :
Dim NOM() As String
Dim A As Integer
A = nbelement
ReDim NOM(A)
Set doc = CATIA.ActiveDocument.Product
For i = 1 To nbelement
NOM(i) = doc.Products.Item(i).Name
MsgBox NOM(i)
Next
J'ai un petit bug avec ma macro, j'aimerai récupérer tous les noms de mon arbre. Alors j'ai compté le nombre d'éléments qu'il y avait dans mon arbre et après, j'arrive à récupérer le nom des parts et des sous-products, mais pas le nom des parts qui sont dans des sous-product
Voici mon code :
Dim NOM() As String
Dim A As Integer
A = nbelement
ReDim NOM(A)
Set doc = CATIA.ActiveDocument.Product
For i = 1 To nbelement
NOM(i) = doc.Products.Item(i).Name
MsgBox NOM(i)
Next
elephere- timide
- Messages : 11
Date d'inscription : 02/06/2014
Localisation : nice
Re: récupérer le nom des parts dans les sous-products
j'ai enregistrer une macro où je modifie le nom d'un part contenue dans un sous-product mais je n'ai pas réussi à l'insérer dans mon code. Voilà ce que j'ai enregistré :
Sub CATMain()
Dim documents1 As Documents
Set documents1 = CATIA.Documents
Dim productDocument1 As ProductDocument
Set productDocument1 = documents1.Item("Product2.CATProduct")
Dim product1 As Product
Set product1 = productDocument1.Product
Dim products1 As Products
Set products1 = product1.Products
Dim product2 As Product
Set product2 = products1.Item("Part2.1")
product2.Name = "roueee"
End Sub
et voilà comment j'ai tenté de l'introduire dans mon code :
'definition du tableau qui récupére les noms
Dim NOM() As String
Dim A As Integer
A = nbelement
ReDim NOM(A)
'ici c'est un second tableau pour récupérer le no du part contenu dans mon sous-product
Dim NOM2() As String
'variables données par la macro d'enregistrement (ça bug)
Dim documents1 As Documents
Set documents1 = CATIA.Documents
Dim productDocument1 As ProductDocument
Set productDocument1 = documents1.Item("Product2.CATProduct")
Dim product1 As Product
Set product1 = ProductDocument.Product
Dim products1 As Products
Set products1 = product1.Products
'Travailler avec le document actif dans CATIA
Set doc = CATIA.ActiveDocument.Product
'boucle pour récupérer les noms
For i = 1 To nbelement
NOM(i) = doc.Products.Item(i).Name 'ce code récupére le nom des parts et des sous-products mais pas des parts contenu dans les sous-product
If NOM(i) = "Product2.1" Then
'ici j'ai tenté de récupérer le nom du part contenu dans le sous product "Product2.1"
For j = 1 To nbelement - i
NOM2(j) = products1.Item(j).Name
MsgBox NOM2(j)
Next
End If
MsgBox NOM(i)
Next
Sub CATMain()
Dim documents1 As Documents
Set documents1 = CATIA.Documents
Dim productDocument1 As ProductDocument
Set productDocument1 = documents1.Item("Product2.CATProduct")
Dim product1 As Product
Set product1 = productDocument1.Product
Dim products1 As Products
Set products1 = product1.Products
Dim product2 As Product
Set product2 = products1.Item("Part2.1")
product2.Name = "roueee"
End Sub
et voilà comment j'ai tenté de l'introduire dans mon code :
'definition du tableau qui récupére les noms
Dim NOM() As String
Dim A As Integer
A = nbelement
ReDim NOM(A)
'ici c'est un second tableau pour récupérer le no du part contenu dans mon sous-product
Dim NOM2() As String
'variables données par la macro d'enregistrement (ça bug)
Dim documents1 As Documents
Set documents1 = CATIA.Documents
Dim productDocument1 As ProductDocument
Set productDocument1 = documents1.Item("Product2.CATProduct")
Dim product1 As Product
Set product1 = ProductDocument.Product
Dim products1 As Products
Set products1 = product1.Products
'Travailler avec le document actif dans CATIA
Set doc = CATIA.ActiveDocument.Product
'boucle pour récupérer les noms
For i = 1 To nbelement
NOM(i) = doc.Products.Item(i).Name 'ce code récupére le nom des parts et des sous-products mais pas des parts contenu dans les sous-product
If NOM(i) = "Product2.1" Then
'ici j'ai tenté de récupérer le nom du part contenu dans le sous product "Product2.1"
For j = 1 To nbelement - i
NOM2(j) = products1.Item(j).Name
MsgBox NOM2(j)
Next
End If
MsgBox NOM(i)
Next
elephere- timide
- Messages : 11
Date d'inscription : 02/06/2014
Localisation : nice
Re: récupérer le nom des parts dans les sous-products
Bonjour elephere,
J'ai une Macro qui liste toutes les pièces dans un assemblage et les sous assemblage :
La procédure, il te faudra créer un form avec une listbox pour afficher les éléments ou bien changer la partie du code qui affiche la listbox :
UserForm2.ListBox1.AddItem ProductDocCatia.Product.PartNumber affiche la référence de la pièce ou de l'assemblage
UserForm2.ListBox1.AddItem ProductDocCatia.Name affiche la référence de nom du fichier Windows (.catpart ou .catproduct)
UserForm2.ListBox1.AddItem ProductDocCatia.Path affiche le chemin du fichier
UserForm2.ListBox1.AddItem ProductDocCatia.FullName affiche le chemin du fichier + le nom du fichier
Pour ce type de Macros au lieu de boucler sur un nombre d'élément il est préférable de boucler sur la collection d'élément :
For Each NDocCatia In DocCatia
"ici la procédure"
next
Ce qui est également intéressant, c'est de travailler avec des tableaux qui une fois remplis serviront à faire des boucles pour rechercher des renseignements sur éléments d'un assemblage :
Public TableauTriDoc() As String déclaration de ton tableau
Public Nbdoc As Integer déclaration pour le nombre d'élément (va servir à dimensionner le tableau)
Public Function ListeDoc() début de la procédure
Nbdoc = 0 compteur de document à zéro
For Each NDocCatia In DocCatia début de la boucle "For Each" -> "pour chaque"
NomDocCatia = NDocCatia.Name
'
If (InStr(1, NomDocCatia, "CATProduct") > 0) Then
ExtensionFichier = "CATProduct"
Set ProductDocCatia = NouveauDocCatia.Item(NomDocCatia)
If NomDocActif = NDocCatia.Name Then
Else
ReDim Preserve TableauTriDoc(15, Nbdoc) redimensionnement du tableau en "live"
**** les 4 lignes ci-dessous servent à remplir ton tableau ***************
TableauTriDoc(0, Nbdoc) ProductDocCatia.Product.PartNumber
TableauTriDoc(1, Nbdoc) ProductDocCatia.Name
TableauTriDoc(2, Nbdoc) ProductDocCatia.Path
TableauTriDoc(3, Nbdoc) ProductDocCatia.FullName
***** incrémentation du tableau *****************
Nbdoc = Nbdoc + 1
End If
End If
Next renvoi au début de la boucle, lorsque plus d'éléments dans l'assemblage fin de la procédure
End Function
Si question n'hésites pas
J'ai une Macro qui liste toutes les pièces dans un assemblage et les sous assemblage :
La procédure, il te faudra créer un form avec une listbox pour afficher les éléments ou bien changer la partie du code qui affiche la listbox :
UserForm2.ListBox1.AddItem ProductDocCatia.Product.PartNumber affiche la référence de la pièce ou de l'assemblage
UserForm2.ListBox1.AddItem ProductDocCatia.Name affiche la référence de nom du fichier Windows (.catpart ou .catproduct)
UserForm2.ListBox1.AddItem ProductDocCatia.Path affiche le chemin du fichier
UserForm2.ListBox1.AddItem ProductDocCatia.FullName affiche le chemin du fichier + le nom du fichier
Pour ce type de Macros au lieu de boucler sur un nombre d'élément il est préférable de boucler sur la collection d'élément :
For Each NDocCatia In DocCatia
"ici la procédure"
next
Ce qui est également intéressant, c'est de travailler avec des tableaux qui une fois remplis serviront à faire des boucles pour rechercher des renseignements sur éléments d'un assemblage :
Public TableauTriDoc() As String déclaration de ton tableau
Public Nbdoc As Integer déclaration pour le nombre d'élément (va servir à dimensionner le tableau)
Public Function ListeDoc() début de la procédure
Nbdoc = 0 compteur de document à zéro
For Each NDocCatia In DocCatia début de la boucle "For Each" -> "pour chaque"
NomDocCatia = NDocCatia.Name
'
If (InStr(1, NomDocCatia, "CATProduct") > 0) Then
ExtensionFichier = "CATProduct"
Set ProductDocCatia = NouveauDocCatia.Item(NomDocCatia)
If NomDocActif = NDocCatia.Name Then
Else
ReDim Preserve TableauTriDoc(15, Nbdoc) redimensionnement du tableau en "live"
**** les 4 lignes ci-dessous servent à remplir ton tableau ***************
TableauTriDoc(0, Nbdoc) ProductDocCatia.Product.PartNumber
TableauTriDoc(1, Nbdoc) ProductDocCatia.Name
TableauTriDoc(2, Nbdoc) ProductDocCatia.Path
TableauTriDoc(3, Nbdoc) ProductDocCatia.FullName
***** incrémentation du tableau *****************
Nbdoc = Nbdoc + 1
End If
End If
Next renvoi au début de la boucle, lorsque plus d'éléments dans l'assemblage fin de la procédure
End Function
Si question n'hésites pas
cad00- actif
- Messages : 33
Date d'inscription : 17/03/2015
Localisation : PACA
Re: récupérer le nom des parts dans les sous-products
Bonjour,
merci beaucoup cad00
je viens d'essayer ton code pour voir comment l'intégrer à mon travail. Seulement j'ai un p'tit souci :
dans ta fonction publique, la ligne "NomDocCatia = NDocCatia.Name" me fait un bug, ça m'affiche une erreur de compilation "Impossible d'affecter à une propriété en lecture seule"
j'ai cherché sur internet mais c'est pas très clair, tu sais à quoi peut être dûe cette erreur ?
merci beaucoup cad00
je viens d'essayer ton code pour voir comment l'intégrer à mon travail. Seulement j'ai un p'tit souci :
dans ta fonction publique, la ligne "NomDocCatia = NDocCatia.Name" me fait un bug, ça m'affiche une erreur de compilation "Impossible d'affecter à une propriété en lecture seule"
j'ai cherché sur internet mais c'est pas très clair, tu sais à quoi peut être dûe cette erreur ?
elephere- timide
- Messages : 11
Date d'inscription : 02/06/2014
Localisation : nice
Re: récupérer le nom des parts dans les sous-products
Bonjour
j'ai une macro qui scanne l'arbre CATIA (liste tous les product et les parts d'un document catia)
j'ai une macro qui scanne l'arbre CATIA (liste tous les product et les parts d'un document catia)
- Code:
Sub CATMain()
Dim PrdDoc As ProductDocument
Set PrdDoc = CATIA.ActiveDocument
Dim myPrd As Product
Set myPrd = PrdDoc.Product
Call Scan(myPrd, 1)
End Sub
'**************************************************************************************************************************
'Function Scan
'**************************************************************************************************************************
Function Scan(ByVal myPrdParent As Product, ByVal ilvl As Integer)
Dim myPrdChil As Product
For Each myPrdChil In myPrdParent.Products
Debug.Print ilvl & ":" & myPrdChil.Name & ":" & myPrdChil.PartNumber
If myPrdChil.Products.Count <> 0 Then Call Scan(myPrdChil, ilvl + 1)
Next
End Functio
Re: récupérer le nom des parts dans les sous-products
petite précision la macro que écrite liste les fichiers CATPart et CATProduct, ce qui permet de gérer des enregistrements, de comparer le nom des références avec le nom des fichiers Windows, la macro écrite par XORMAN liste les éléments de l'arbre de l'assemblage c'est à dire les références et les instances, les références et les instances peuvent être différentes des nom Windows.
Pour le problème que tu me décrits, regarde bien si les variables sont correctement renseignées, je ne pas comment je peux joindre un fichier sur ce forum (pour les images j'ai compris).
Ci-dessous une variante de la Macro de XORMAN, ça fait la même chose mais avec un tri des doublons :
https://i.servimg.com/u/f18/19/24/44/83/image112.jpg
je te donne un lien pour récupérer les fichiers natifs de la variante : http://cao-3d-pro.com/catia-vba-lister-references-et-instances/
Pour le problème que tu me décrits, regarde bien si les variables sont correctement renseignées, je ne pas comment je peux joindre un fichier sur ce forum (pour les images j'ai compris).
Ci-dessous une variante de la Macro de XORMAN, ça fait la même chose mais avec un tri des doublons :
https://i.servimg.com/u/f18/19/24/44/83/image112.jpg
je te donne un lien pour récupérer les fichiers natifs de la variante : http://cao-3d-pro.com/catia-vba-lister-references-et-instances/
cad00- actif
- Messages : 33
Date d'inscription : 17/03/2015
Localisation : PACA
Sujets similaires
» Renommer tous les parts et products avec formules
» Récupérer le lien d'une part dans un CATDrawing
» Récupérer le nom d'une part active dans un produit ouvert
» Re-ordonnancement parts dans Assemblage
» Macro qui réordonne les parts dans le product
» Récupérer le lien d'une part dans un CATDrawing
» Récupérer le nom d'une part active dans un produit ouvert
» Re-ordonnancement parts dans Assemblage
» Macro qui réordonne les parts dans le product
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|