Compter les éléments dans l'arbre
3 participants
Page 1 sur 1
Compter les éléments dans l'arbre
Plus généralement en commençant par les bases, comment compter exactement le nombre d'éléments dans l’arbre de construction ? (sous-produit aussi)
Typiquement avec cette image, ça me sort 10 alors qu'il y en a plus...
Sub SupContraintes(MonDocument As Document, MonProduit As Product)
MsgBox MonProduit.Products.Count
'Comment lister les éléments d'un arbre complet
End Sub
Merci,
Typiquement avec cette image, ça me sort 10 alors qu'il y en a plus...
Sub SupContraintes(MonDocument As Document, MonProduit As Product)
MsgBox MonProduit.Products.Count
'Comment lister les éléments d'un arbre complet
End Sub
Merci,
Liocco08- actif
- Messages : 39
Date d'inscription : 07/04/2022
Localisation : Toulouse
Re: Compter les éléments dans l'arbre
Salut Julien,
La fonction WalkDownTree(myProduct) que tu utilises déjà te permet de le faire.
Tu pourras compter soit le nombre de fichiers différents (PartNumber) soit le nombre d'instances totales.
La fonction WalkDownTree(myProduct) que tu utilises déjà te permet de le faire.
Tu pourras compter soit le nombre de fichiers différents (PartNumber) soit le nombre d'instances totales.
lumpazepfel- Fédérateur
- Messages : 319
Date d'inscription : 02/11/2015
Localisation : Ensisheim
Liocco08 aime ce message
Re: Compter les éléments dans l'arbre
J'avais du mal à comprendre le fonctionnement de cette fonction, car elle s'appelle elle-même ? C'est ça la récursivité ?
Mes compétences en informatiques sont limités, c'est pour ça que je voulais décomposer en éléments plus simple mais je devrais pouvoir me débrouiller.
Je te remercie Marc,
Mes compétences en informatiques sont limités, c'est pour ça que je voulais décomposer en éléments plus simple mais je devrais pouvoir me débrouiller.
Je te remercie Marc,
Liocco08- actif
- Messages : 39
Date d'inscription : 07/04/2022
Localisation : Toulouse
Re: Compter les éléments dans l'arbre
Oui c'est bien ça.
Lorsque la macro trouve un sous product dans le product de tête, elle se rappelle elle même pour scanner le contenu de se sous product et ainsi de suite.
Que veux tu compter : les partnumber unique ou les instances?
Tu peux aussi utiliser la fonction "BillOfMateria"
Lorsque la macro trouve un sous product dans le product de tête, elle se rappelle elle même pour scanner le contenu de se sous product et ainsi de suite.
Que veux tu compter : les partnumber unique ou les instances?
Tu peux aussi utiliser la fonction "BillOfMateria"
- Code:
Language="VBSCRIPT"
Sub CATMain()
Dim productDocument1 As Document
Set productDocument1 = CATIA.ActiveDocument
Dim product1 As Product
Set product1 = productDocument1.Product
Dim assemblyConvertor1 As CATBaseDispatch
Set assemblyConvertor1 = product1.GetItem("BillOfMaterial")
'Composition de chaque composant / sous-produit
Dim arrayOfVariantOfBSTR1(4) 'change number if you have more custom columns/array...
arrayOfVariantOfBSTR1(0) = "Quantity" 'si CATIA en Français "Quantité"
arrayOfVariantOfBSTR1(1) = "Part Number" 'si CATIA en Français "Référence"
arrayOfVariantOfBSTR1(2) = "Type"
arrayOfVariantOfBSTR1(3) = "Nomenclature"
arrayOfVariantOfBSTR1(4) = "Revision"
'Nomenclature globale du CATProduct
assemblyConvertor1.SetCurrentFormat arrayOfVariantOfBSTR1
Dim arrayOfVariantOfBSTR2(1) 'change number if you have more custom columns/array...
arrayOfVariantOfBSTR2(0) = "Quantity" 'si CATIA en Français "Quantité"
arrayOfVariantOfBSTR2(1) = "Part Number" 'si CATIA en Français "Référence"
assemblyConvertor1.SetSecondaryFormat arrayOfVariantOfBSTR2
assemblyConvertor1.Print "TXT", "c:\temp\Custom_BOM.txt", product1
End Sub
lumpazepfel- Fédérateur
- Messages : 319
Date d'inscription : 02/11/2015
Localisation : Ensisheim
Liocco08 aime ce message
Re: Compter les éléments dans l'arbre
Je te remercie !
En fait je suis en train de développer sur mon temps perso un fichier catvba qui va regrouper toutes les macros utiles lors de ma conception 3D.
Je commence par la gestion des contraintes. Je n'ai pas beaucoup de temps en ce moment c'est pour ça que je poste si jamais des personnes ont déjà ça en stocke.
Notre géant français de l'aéro n'accepte aucune contrainte dans nos assemblages, donc je souhaitais avoir un moyen simple de supprimer toutes les contraintes à tous les niveaux, et les remplacer paf une fixité.
Voici mon code, complètement bourrin qui ne fonctionne que pour 4 niveau de sous-assemblage car je n'ai pas réussi à utiliser la récursivité de ma fonction...Si vous avez un moyen simple, je suis preneur.
Je saurais me débrouiller pour tout fixer ensuite.
https://servimg.com/view/20418618/5
Module principal :
En fait je suis en train de développer sur mon temps perso un fichier catvba qui va regrouper toutes les macros utiles lors de ma conception 3D.
Je commence par la gestion des contraintes. Je n'ai pas beaucoup de temps en ce moment c'est pour ça que je poste si jamais des personnes ont déjà ça en stocke.
Notre géant français de l'aéro n'accepte aucune contrainte dans nos assemblages, donc je souhaitais avoir un moyen simple de supprimer toutes les contraintes à tous les niveaux, et les remplacer paf une fixité.
Voici mon code, complètement bourrin qui ne fonctionne que pour 4 niveau de sous-assemblage car je n'ai pas réussi à utiliser la récursivité de ma fonction...Si vous avez un moyen simple, je suis preneur.
Je saurais me débrouiller pour tout fixer ensuite.
https://servimg.com/view/20418618/5
Module principal :
- Code:
'*************************************************************************
'***** Création de toutes les macro utiles
'***** Author: Julien M.
'***** Date de commencement: 02/11/2022
'***** Date de fin: XX/XX/XXXX
'***** https://catiav5.forumactif.org/t1759-trier-une-listebox-macro-tri-arbre-de-construction-catia
'***** http://cao-3d-pro.com/catia-vba-lister-references-et-instances/
'***** https://cao-3d-pro.com/catia-vba-lister-references-et-fichiers/
'***** https://cao-3d-pro.com/catia-catdua/
'*************************************************************************
'-----------------------------------------------------------------------------------------------------------------------------------------------------------
' ----- Déclaration des variables -----
'-----------------------------------------------------------------------------------------------------------------------------------------------------------
Option Explicit ' Obligation de définir chqaque variable
' ----- Déclaration des strings -----
Public ContenuFichier As String ' Permet de stocker le contenu du fichier
Public MotDePasse As String
' ----- Déclaration des éléments CATIA -----
Public MyDocument As Document
Public MyProductDocument As ProductDocument
Public MyPartDocument As PartDocument
Public MainProduct As Product
Sub CATMAIN()
ExempleLectureFichierTexte ' Lance la lecture du mot de passe
' ----- Initialisation des variables -----
Set MyDocument = CATIA.ActiveDocument
Set MainProduct = MyDocument.Product
' ----------------------------------------------------------------------------------------------------------------------------
'***** Protection des données
' ----------------------------------------------------------------------------------------------------------------------------
If ContenuFichier = MotDePasse Then
'Call SupContraintes(MyDocument, MainProduct)
Call Essai(MyDocument, MainProduct)
Else
MsgBox ("Si ce message s'affiche, cela signifie qu'un dossier est manquant pour l'exécution de la MACRO. Si vous utiliser cette MACRO dans le cadre de votre travail en entreprise, veuillez envoyer un mail ici : Julien.Malve@laroche-group.com "), vbCritical, ("Erreur de lancement (fichier manquant/utilisation non légal). 2022 ")
End If
End Sub
- Code:
Sub SupContraintes(MonDocument As Document, MonProduit As Product)
' Déclaration des variables
Dim ConstraintsProduits As Variant
Dim i, k, m, o As Integer
' Initialisation des variables
Set ConstraintsProduits = MonProduit.Connections("CATIAConstraints")
'Supression des contraintes du produit principal
For k = 1 To ConstraintsProduits.Count
ConstraintsProduits.Remove (ConstraintsProduits.Count)
Next
'Suppressions des contraintes des autres produits pour 4 niiveaux de sous-ensemble
For i = 1 To MonProduit.Products.Count
If (InStr(1, MonProduit.Products.Item(i).ReferenceProduct.Parent.Name, "CATProduct") > 0) Then
For m = 1 To MonProduit.Products.Item(i).Products.Count
If (InStr(1, MonProduit.Products.Item(i).Products.Item(m).ReferenceProduct.Parent.Name, "CATProduct") > 0) Then
For o = 1 To MonProduit.Products.Item(i).Products.Item(m).Products.Count
If (InStr(1, MonProduit.Products.Item(i).Products.Item(m).Products.Item(o).ReferenceProduct.Parent.Name, "CATProduct") > 0) Then
Set ConstraintsProduits = MonProduit.Products.Item(i).Products.Item(m).Products.Item(o).Connections("CATIAConstraints")
For k = 1 To ConstraintsProduits.Count
ConstraintsProduits.Remove (ConstraintsProduits.Count)
Next
Else
Set ConstraintsProduits = MonProduit.Products.Item(i).Products.Item(m).Connections("CATIAConstraints")
For k = 1 To ConstraintsProduits.Count
ConstraintsProduits.Remove (ConstraintsProduits.Count)
Next
End If
Next o
Else
Set ConstraintsProduits = MonProduit.Products.Item(i).Connections("CATIAConstraints")
For k = 1 To ConstraintsProduits.Count
ConstraintsProduits.Remove (ConstraintsProduits.Count)
Next
End If
Next m
Else
'S'il n'y a pas de product dans le sous-assemblage, alors on supprime ses contraintes
Set ConstraintsProduits = MonProduit.Products.Item(i).Connections("CATIAConstraints")
For k = 1 To ConstraintsProduits.Count
ConstraintsProduits.Remove (ConstraintsProduits.Count)
Next
End If
Next i
End Sub
Liocco08- actif
- Messages : 39
Date d'inscription : 07/04/2022
Localisation : Toulouse
Re: Compter les éléments dans l'arbre
Salut Julien,
Voici un petit code pour supprimer les contraintes en utilisant la recherche.
J'ai testé sur un produit à 3 niveaux avec composants.
Voici un petit code pour supprimer les contraintes en utilisant la recherche.
J'ai testé sur un produit à 3 niveaux avec composants.
- Code:
Sub CATMain()
Dim productDocument1 As ProductDocument
Set productDocument1 = CATIA.ActiveDocument
Dim selection1 As Selection
Set selection1 = productDocument1.Selection
selection1.Search "(CATProductSearch.MfConstraint),all"
selection1.Delete
selection1.Clear
End Sub
lumpazepfel- Fédérateur
- Messages : 319
Date d'inscription : 02/11/2015
Localisation : Ensisheim
Re: Compter les éléments dans l'arbre
Bonjour
une solution est utiliser la fonction Nomenclature de catia,
tu peux verifier en interactif que tu compte bien ce que tu veux
(le nombre d'inqtance , de fichier différents ...)
ensuite utilise la methode GetItem("BillOfMaterial")
et AssemblyConvertor1.[Print] "XLS", MyBomFile, MyProduct
exemple de script
' Extraction BOM depuis CATProduct
'
' - creation du fichier .txt avec le contenu de la BOM
' - Remplir une table avee la liste des composants : SCM_BOM
Sub StartAnalysisBOM(MyProduct As Product, MyBomFile As String)
' Check Produit actif
If UCase(Right(MyProduct.Parent.name, 10)) <> "CATPRODUCT" Then
Exit Sub
End If
' check output file ' delete if already exist
If Fso.FileExists(MyBomFile) Then
Fso.DeleteFile (MyBomFile)
End If
' create table
Dim AssemblyConvertor1 As AssemblyConvertor
Dim AssemblyConvertor1Variant ' need to be a variant
Set AssemblyConvertor1 = MyProduct.GetItem("BillOfMaterial")
'Dim arrayOfVariantOfBSTR1(4)
'arrayOfVariantOfBSTR1(0) = "Quantity"
'arrayOfVariantOfBSTR1(1) = "Part Number"
'arrayOfVariantOfBSTR1(2) = "Revision"
'arrayOfVariantOfBSTR1(3) = "Definition"
'Dim arrayOfVariantOfBSTR1(16)
'arrayOfVariantOfBSTR1(0) = "Quantity"
'arrayOfVariantOfBSTR1(1) = "Part Number"
'arrayOfVariantOfBSTR1(2) = "Type"
'arrayOfVariantOfBSTR1(3) = "Nomenclature"
'arrayOfVariantOfBSTR1(4) = "Revision"
'arrayOfVariantOfBSTR1(5) = "Source"
'arrayOfVariantOfBSTR1(6) = "Number"
'arrayOfVariantOfBSTR1(7) = "Definition"
'arrayOfVariantOfBSTR1( = "Product Description"
'arrayOfVariantOfBSTR1(9) = "Component Description"
'arrayOfVariantOfBSTR1(10) = "Source"
'arrayOfVariantOfBSTR1(11) = "Default Representation Source"
'arrayOfVariantOfBSTR1(12) = "Name"
'arrayOfVariantOfBSTR1(13) = "Owner"
'arrayOfVariantOfBSTR1(14) = "Comment"
'arrayOfVariantOfBSTR1(15) = "List Of Named URLs"
'arrayOfVariantOfBSTR1(16) = "Children"
' Dim arrayOfVariantOfBSTR1(
Dim arrayOfVariantOfBSTR1(
On Error GoTo 0
arrayOfVariantOfBSTR1(0) = "Quantité"
arrayOfVariantOfBSTR1(1) = "Référence"
arrayOfVariantOfBSTR1(2) = "Définition"
arrayOfVariantOfBSTR1(3) = "Numéro"
arrayOfVariantOfBSTR1(4) = "Description du produit"
arrayOfVariantOfBSTR1(5) = "Révision"
arrayOfVariantOfBSTR1(6) = "Commentaire"
arrayOfVariantOfBSTR1(7) = "Source de la représentation par défaut"
Set AssemblyConvertor1Variant = AssemblyConvertor1
AssemblyConvertor1Variant.SetCurrentFormat arrayOfVariantOfBSTR1
' AssemblyConvertor1.SetCurrentFormat arrayOfVariantOfBSTR1
'Dim arrayOfVariantOfBSTR2(15)
'arrayOfVariantOfBSTR2(0) = "Quantity"
'arrayOfVariantOfBSTR2(1) = "Part Number"
'arrayOfVariantOfBSTR2(2) = "Type"
'arrayOfVariantOfBSTR2(3) = "Source"
'arrayOfVariantOfBSTR2(4) = "Number"
'arrayOfVariantOfBSTR2(5) = "Revision"
'arrayOfVariantOfBSTR2(6) = "Definition"
'arrayOfVariantOfBSTR2(7) = "Nomenclature"
'arrayOfVariantOfBSTR2( = "Product Description"
'arrayOfVariantOfBSTR2(9) = "Source"
'arrayOfVariantOfBSTR2(10) = "Default Representation Source"
'arrayOfVariantOfBSTR2(11) = "Name"
'arrayOfVariantOfBSTR2(12) = "Owner"
'arrayOfVariantOfBSTR2(13) = "Comment"
'arrayOfVariantOfBSTR2(14) = "List Of Named URLs"
'arrayOfVariantOfBSTR2(15) = "Children"
' Dim arrayOfVariantOfBSTR2(
Dim arrayOfVariantOfBSTR2(11)
arrayOfVariantOfBSTR2(0) = "Quantité"
arrayOfVariantOfBSTR2(1) = "Référence"
arrayOfVariantOfBSTR2(2) = "Définition"
arrayOfVariantOfBSTR2(3) = "Numéro"
arrayOfVariantOfBSTR2(4) = "Référence"
arrayOfVariantOfBSTR2(5) = "Référence"
arrayOfVariantOfBSTR2(6) = "Référence"
arrayOfVariantOfBSTR2(7) = "Référence"
arrayOfVariantOfBSTR2( = "Référence"
arrayOfVariantOfBSTR2(9) = "Référence"
arrayOfVariantOfBSTR2(10) = "Source de la représentation par défaut"
AssemblyConvertor1Variant.SetSecondaryFormat arrayOfVariantOfBSTR2
' Create File
'Dim catConvertor As AssemblyConvertor
'Set catConvertor = AssemblyConvertor1
' AssemblyConvertor1.[Print] "TXT", MyBomFile, MyProduct
' assemblyConvertor1Variant.[Print] "TXT", MyBomFile, MyProduct
' Export au format Excel
AssemblyConvertor1.[Print] "XLS", MyBomFile, MyProduct
' Export au format .txt
' AssemblyConvertor1.[Print] "TXT", MyBomFile, MyProduct
End Sub
une solution est utiliser la fonction Nomenclature de catia,
tu peux verifier en interactif que tu compte bien ce que tu veux
(le nombre d'inqtance , de fichier différents ...)
ensuite utilise la methode GetItem("BillOfMaterial")
et AssemblyConvertor1.[Print] "XLS", MyBomFile, MyProduct
exemple de script
' Extraction BOM depuis CATProduct
'
' - creation du fichier .txt avec le contenu de la BOM
' - Remplir une table avee la liste des composants : SCM_BOM
Sub StartAnalysisBOM(MyProduct As Product, MyBomFile As String)
' Check Produit actif
If UCase(Right(MyProduct.Parent.name, 10)) <> "CATPRODUCT" Then
Exit Sub
End If
' check output file ' delete if already exist
If Fso.FileExists(MyBomFile) Then
Fso.DeleteFile (MyBomFile)
End If
' create table
Dim AssemblyConvertor1 As AssemblyConvertor
Dim AssemblyConvertor1Variant ' need to be a variant
Set AssemblyConvertor1 = MyProduct.GetItem("BillOfMaterial")
'Dim arrayOfVariantOfBSTR1(4)
'arrayOfVariantOfBSTR1(0) = "Quantity"
'arrayOfVariantOfBSTR1(1) = "Part Number"
'arrayOfVariantOfBSTR1(2) = "Revision"
'arrayOfVariantOfBSTR1(3) = "Definition"
'Dim arrayOfVariantOfBSTR1(16)
'arrayOfVariantOfBSTR1(0) = "Quantity"
'arrayOfVariantOfBSTR1(1) = "Part Number"
'arrayOfVariantOfBSTR1(2) = "Type"
'arrayOfVariantOfBSTR1(3) = "Nomenclature"
'arrayOfVariantOfBSTR1(4) = "Revision"
'arrayOfVariantOfBSTR1(5) = "Source"
'arrayOfVariantOfBSTR1(6) = "Number"
'arrayOfVariantOfBSTR1(7) = "Definition"
'arrayOfVariantOfBSTR1( = "Product Description"
'arrayOfVariantOfBSTR1(9) = "Component Description"
'arrayOfVariantOfBSTR1(10) = "Source"
'arrayOfVariantOfBSTR1(11) = "Default Representation Source"
'arrayOfVariantOfBSTR1(12) = "Name"
'arrayOfVariantOfBSTR1(13) = "Owner"
'arrayOfVariantOfBSTR1(14) = "Comment"
'arrayOfVariantOfBSTR1(15) = "List Of Named URLs"
'arrayOfVariantOfBSTR1(16) = "Children"
' Dim arrayOfVariantOfBSTR1(
Dim arrayOfVariantOfBSTR1(
On Error GoTo 0
arrayOfVariantOfBSTR1(0) = "Quantité"
arrayOfVariantOfBSTR1(1) = "Référence"
arrayOfVariantOfBSTR1(2) = "Définition"
arrayOfVariantOfBSTR1(3) = "Numéro"
arrayOfVariantOfBSTR1(4) = "Description du produit"
arrayOfVariantOfBSTR1(5) = "Révision"
arrayOfVariantOfBSTR1(6) = "Commentaire"
arrayOfVariantOfBSTR1(7) = "Source de la représentation par défaut"
Set AssemblyConvertor1Variant = AssemblyConvertor1
AssemblyConvertor1Variant.SetCurrentFormat arrayOfVariantOfBSTR1
' AssemblyConvertor1.SetCurrentFormat arrayOfVariantOfBSTR1
'Dim arrayOfVariantOfBSTR2(15)
'arrayOfVariantOfBSTR2(0) = "Quantity"
'arrayOfVariantOfBSTR2(1) = "Part Number"
'arrayOfVariantOfBSTR2(2) = "Type"
'arrayOfVariantOfBSTR2(3) = "Source"
'arrayOfVariantOfBSTR2(4) = "Number"
'arrayOfVariantOfBSTR2(5) = "Revision"
'arrayOfVariantOfBSTR2(6) = "Definition"
'arrayOfVariantOfBSTR2(7) = "Nomenclature"
'arrayOfVariantOfBSTR2( = "Product Description"
'arrayOfVariantOfBSTR2(9) = "Source"
'arrayOfVariantOfBSTR2(10) = "Default Representation Source"
'arrayOfVariantOfBSTR2(11) = "Name"
'arrayOfVariantOfBSTR2(12) = "Owner"
'arrayOfVariantOfBSTR2(13) = "Comment"
'arrayOfVariantOfBSTR2(14) = "List Of Named URLs"
'arrayOfVariantOfBSTR2(15) = "Children"
' Dim arrayOfVariantOfBSTR2(
Dim arrayOfVariantOfBSTR2(11)
arrayOfVariantOfBSTR2(0) = "Quantité"
arrayOfVariantOfBSTR2(1) = "Référence"
arrayOfVariantOfBSTR2(2) = "Définition"
arrayOfVariantOfBSTR2(3) = "Numéro"
arrayOfVariantOfBSTR2(4) = "Référence"
arrayOfVariantOfBSTR2(5) = "Référence"
arrayOfVariantOfBSTR2(6) = "Référence"
arrayOfVariantOfBSTR2(7) = "Référence"
arrayOfVariantOfBSTR2( = "Référence"
arrayOfVariantOfBSTR2(9) = "Référence"
arrayOfVariantOfBSTR2(10) = "Source de la représentation par défaut"
AssemblyConvertor1Variant.SetSecondaryFormat arrayOfVariantOfBSTR2
' Create File
'Dim catConvertor As AssemblyConvertor
'Set catConvertor = AssemblyConvertor1
' AssemblyConvertor1.[Print] "TXT", MyBomFile, MyProduct
' assemblyConvertor1Variant.[Print] "TXT", MyBomFile, MyProduct
' Export au format Excel
AssemblyConvertor1.[Print] "XLS", MyBomFile, MyProduct
' Export au format .txt
' AssemblyConvertor1.[Print] "TXT", MyBomFile, MyProduct
End Sub
Xavier KLEIN- timide
- Messages : 4
Date d'inscription : 10/04/2018
Localisation : Haute Savoie
Sujets similaires
» Macro pour compter les objet dans un corps principal
» Réalisation découpe/usinage dans un assemblage et qui ne se voit pas dans les parts
» recuperer info dans le 3D pour afficher dans un cartouche via une macro
» Génération d'éléments paramétrés
» Macro Changement de la couleur d'un Part dans un Product suivant une recherche du nom dans un tableau excel
» Réalisation découpe/usinage dans un assemblage et qui ne se voit pas dans les parts
» recuperer info dans le 3D pour afficher dans un cartouche via une macro
» Génération d'éléments paramétrés
» Macro Changement de la couleur d'un Part dans un Product suivant une recherche du nom dans un tableau excel
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum