récupérer le nom des parts dans les sous-products

Voir le sujet précédent Voir le sujet suivant Aller en bas

récupérer le nom des parts dans les sous-products

Message par elephere le Mer 3 Juin 2015 - 21:43

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

elephere
timide
timide

Messages : 11
Date d'inscription : 02/06/2014
Localisation : nice

Revenir en haut Aller en bas

Re: récupérer le nom des parts dans les sous-products

Message par elephere le Ven 5 Juin 2015 - 23:17

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

elephere
timide
timide

Messages : 11
Date d'inscription : 02/06/2014
Localisation : nice

Revenir en haut Aller en bas

Re: récupérer le nom des parts dans les sous-products

Message par cad00 le Lun 8 Juin 2015 - 21:57

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 Exclamation

cad00
actif
actif

Messages : 33
Date d'inscription : 17/03/2015
Localisation : PACA

Revenir en haut Aller en bas

Re: récupérer le nom des parts dans les sous-products

Message par elephere le Ven 12 Juin 2015 - 0:30

Bonjour,

merci beaucoup cad00 Smile

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
timide

Messages : 11
Date d'inscription : 02/06/2014
Localisation : nice

Revenir en haut Aller en bas

Re: récupérer le nom des parts dans les sous-products

Message par xorman le Mer 17 Juin 2015 - 0:25

Bonjour
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
le résultat s'affiche dans la fenêtre debug.print mais il est possible de mettre le résultat dans une listebox
avatar
xorman
actif
actif

Messages : 98
Date d'inscription : 06/09/2008
Age : 41
Localisation : Cherbourg

http://www.myimpression3d.com

Revenir en haut Aller en bas

Re: récupérer le nom des parts dans les sous-products

Message par cad00 le Jeu 18 Juin 2015 - 1:10

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 :
http://i18.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
actif

Messages : 33
Date d'inscription : 17/03/2015
Localisation : PACA

Revenir en haut Aller en bas

Re: récupérer le nom des parts dans les sous-products

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum