vérification réseption assemblage
2 participants
Page 1 sur 1
vérification réseption assemblage
Bonjour
Depuis 2 mois je vous pose des questions afin de faire ma première macro sur catia.
Je vous remercie de votre aide mais il me reste beaucoup de chose que je ne sais pas faire et n’est plus beaucoup de temps.
je vous poste donc en même temps toute les question que j'ai pour le moment
Sujet
Je suis amener à recevoir des assemblages catia, pour gagner du temps voudrai que ma macro fasse un certain nombre de vérification sur l’arborescence.
Voici un exemple de ce que je veux recevoir :
On peut voir sur cette image que les noms doivent être composés d’une lettre et d’un nombre à 9 chiffres
Le nombre doit finir : 100 pour l’assemblage –110 pour un sous ensemble – 111 pour une pièce
La pièce doit faire parti de la dizaine de son ensemble
A000001700 A000001720
A000001701 A000001723
Le ss/ens doit faire parti de la centaine de son ensemble
A000001700
A000001720
Le nom peut aussi comporter un indice de modif : _ + « lettre de A à Z «
Exemple : A000001700_A
L’ensemble doit avoir un indice = ou > a l’indice de ce pièces et ss/ens
Les ss/ens doivent avoir un inde = ou > a leur pièces
B > A, C > A ect.
Les composants peuvent avoir n’importe quel nom
Si une pièce est dans un composant la comparer a l’ensemble ou ss/ens au dessus
Exemple : on compare A000001702 avec A000001700 et
A000001722 avec A000001720
La référence et le nom du fichier doivent être identiques
Le nom de l’instance = « référence » . « nombre »
Les corps des pièces ne doivent pas être hybrides
Question
- au début je différencier les composant car leur nom n’est pas = a celui du fichier mais sa fait interférence avec le test qui regarde si les Product sont enregistrés au bon nom
- comment faire pour comparer les noms avec leur ensemble supp ou deux fois supp ?
Image *
- pour la comparaison des indice je penser donner des valeurs a une fonction en fonction des lettre puis les comparer, c’est possible ?
Voici mon programme actuel
voici mon programme actuel:
J’espère être compréhensible ^^
Cordialement
Quentin
Depuis 2 mois je vous pose des questions afin de faire ma première macro sur catia.
Je vous remercie de votre aide mais il me reste beaucoup de chose que je ne sais pas faire et n’est plus beaucoup de temps.
je vous poste donc en même temps toute les question que j'ai pour le moment
Sujet
Je suis amener à recevoir des assemblages catia, pour gagner du temps voudrai que ma macro fasse un certain nombre de vérification sur l’arborescence.
Voici un exemple de ce que je veux recevoir :
On peut voir sur cette image que les noms doivent être composés d’une lettre et d’un nombre à 9 chiffres
Le nombre doit finir : 100 pour l’assemblage –110 pour un sous ensemble – 111 pour une pièce
La pièce doit faire parti de la dizaine de son ensemble
A000001700 A000001720
A000001701 A000001723
Le ss/ens doit faire parti de la centaine de son ensemble
A000001700
A000001720
Le nom peut aussi comporter un indice de modif : _ + « lettre de A à Z «
Exemple : A000001700_A
L’ensemble doit avoir un indice = ou > a l’indice de ce pièces et ss/ens
Les ss/ens doivent avoir un inde = ou > a leur pièces
B > A, C > A ect.
Les composants peuvent avoir n’importe quel nom
Si une pièce est dans un composant la comparer a l’ensemble ou ss/ens au dessus
Exemple : on compare A000001702 avec A000001700 et
A000001722 avec A000001720
La référence et le nom du fichier doivent être identiques
Le nom de l’instance = « référence » . « nombre »
Les corps des pièces ne doivent pas être hybrides
- au début je différencier les composant car leur nom n’est pas = a celui du fichier mais sa fait interférence avec le test qui regarde si les Product sont enregistrés au bon nom
- comment faire pour comparer les noms avec leur ensemble supp ou deux fois supp ?
Image *
- pour la comparaison des indice je penser donner des valeurs a une fonction en fonction des lettre puis les comparer, c’est possible ?
Voici mon programme actuel
voici mon programme actuel:
- Code:
Sub CATMain()
On Error Resume Next
Dim myTree As TreeView
Dim myList As ListBox
Set myTree = UserForm1.Tree
Set myList = UserForm1.ListBox1
Dim myDoc As Document
Dim myrootProduct As Product
Set myDoc = CATIA.ActiveDocument
If myDoc Is Nothing Then
MsgBox "Please load a product - THEN activate this function!"
Return
End If
Dim y As Integer
Set myrootProduct = myDoc.Product
Call visitProduct(myrootProduct, "", myTree, y)
UserForm1.Show
End Sub
Sub visitProduct(prod As Product, parentKey As String, ByRef myTree As TreeView, y)
On Error Resume Next
Dim children As Products
Set children = prod.Products
Dim i As Integer
Dim child As Product
Dim key As String
Dim label As String
label = prod.PartNumber '& " / " & prod.Name ' pour afficher le pratNumber et le nom d'instance
key = parentKey & "###" & prod.Name
y = y + 1
If parentKey = "" Then
UserForm1.Tree.Nodes.Add(, , key, label).Expanded = True
UserForm1.ListBox2.AddItem "----------"
UserForm1.ListBox2.AddItem prod.PartNumber
UserForm1.ListBox2.AddItem "----------"
Else
UserForm1.Tree.Nodes.Add(parentKey, tvwChild, key, label).Expanded = True
UserForm1.ListBox2.AddItem prod.PartNumber
UserForm1.ListBox2.AddItem "----------"
If Left(UserForm1.Tree.Nodes(y).Text, 8) = Left(UserForm1.Tree.Nodes(y).Parent.Text, 8) Then
UserForm1.ListBox2.AddItem (UserForm1.Tree.Nodes(y).Text & "----->" & UserForm1.Tree.Nodes(y).Parent.Text)
End If
End If
UserForm1.ListBox2.AddItem y
'===========================
'Récupère le nom de fichier:
nomFichier = prod.ReferenceProduct.Parent.Name
L = Len(prod.PartNumber)
'Si c'est un CATProduct:
If InStr(nomFichier, "CATProduct") > 0 Then
If Right(Left(prod.PartNumber, 10), 1) = 0 Then
UserForm1.ListBox2.AddItem prod.PartNumber & " -->Prd correct"
Else
UserForm1.ListBox2.AddItem prod.PartNumber & " -->Prd incorrect"
End If
If Left(prod.PartNumber, L) = Left(nomFichier, L) Then
Else
UserForm1.ListBox2.AddItem prod.PartNumber & " -->composant"
End If
UserForm1.ListBox2.AddItem prod.PartNumber & Left(nomFichier, L)
Else
End If
'Si c'est un CATPart:
If InStr(nomFichier, "CATPart") > 0 Then
If Right(Left(prod.PartNumber, 10), 1) = 0 Then
UserForm1.ListBox2.AddItem prod.PartNumber & " -->Prt incorrect"
Else
UserForm1.ListBox2.AddItem prod.PartNumber & " -->Prt correct"
End If
'--------------------
Dim mPart As Part
Set mPart = prod.ReferenceProduct.Parent.Part
Dim mBody As Body
Set mBody = mPart.MainBody
If mBody.HybridShapes Is Nothing Then
UserForm1.ListBox1.AddItem prod.PartNumber & " -->pas hybride"
Else
UserForm1.ListBox1.AddItem prod.PartNumber & " -->hybride"
End If
End If
'===========================
For i = 1 To children.Count
Set child = children.Item(i)
Call visitProduct(child, key, myTree, y)
Next
End Sub
J’espère être compréhensible ^^
Cordialement
Quentin
quentinc- actif
- Messages : 33
Date d'inscription : 07/06/2016
Localisation : saint quentin en yveline
Re: vérification réseption assemblage
Salut Quentin,
Tous ces tests sont possibles.
Comment veux tu présenter les résultats? Dans ta ListBox dans le treeview?
par ex . A000001701:ref-OK / inst-OK / hybride
Tous ces tests sont possibles.
Comment veux tu présenter les résultats? Dans ta ListBox dans le treeview?
par ex . A000001701:ref-OK / inst-OK / hybride
lumpazepfel- Fédérateur
- Messages : 319
Date d'inscription : 02/11/2015
Localisation : Ensisheim
Re: vérification réseption assemblage
je veux que a chaque fois que le programme trouve une erreur il l'indique dans la listbox et juste garder la treeview pour aider a la lecture
quentinc- actif
- Messages : 33
Date d'inscription : 07/06/2016
Localisation : saint quentin en yveline
Re: vérification réseption assemblage
Salut Quentin,
Ton histoire de composant a été compliqué a traiter. Voici le résultat:
Dans la listbox2 je liste tous les défauts, dans le treeview, je résume pour chaque fichier s'il est OK ou pas.
La listbox1 a été utilisée pour m'aider à la programmation.
Voici le résultat sur un exemple que je me suis créé:
Voici le code:
A tester sur des cas concrets , tiens moi au courant.
Ton histoire de composant a été compliqué a traiter. Voici le résultat:
Dans la listbox2 je liste tous les défauts, dans le treeview, je résume pour chaque fichier s'il est OK ou pas.
La listbox1 a été utilisée pour m'aider à la programmation.
Voici le résultat sur un exemple que je me suis créé:
Voici le code:
- Code:
Public monParent
Public monRootProduct As Boolean
Sub CATMain()
'*******************************************************
'*** Macro pour lister l'arbre d'un Product ***
'*** Il faut une userform nommée UserForm1 ***
'*** avec une listbox nommée ListBox1 ***
'*** avec une treeview nommée Treeview1 ***
'*** Source:CATIA PORTABLE SCRIPT CENTER VERSION 2.0 ***
'*** Modifié par Marc L. juillet 2016 ***
'*******************************************************
'*** http://catiav5.forumactif.org/t1462-liste-arbre-catproduct-vba#6534
On Error Resume Next
Dim myTree As TreeView
Dim myList As ListBox
Set myTree = UserForm1.TreeView1
Set myList = UserForm1.ListBox1
Dim myrootProduct As Product
Dim myDoc As Document
Set myDoc = CATIA.ActiveDocument
If myDoc Is Nothing Then
MsgBox "Please load a product - THEN activate this function!"
Return
End If
Set myrootProduct = myDoc.Product
monParent = myrootProduct.PartNumber
monRootProduct = True
visitProduct myrootProduct, "", myTree
UserForm1.Show
End Sub
Sub visitProduct(prod As Product, parentKey As String, ByRef myTree As TreeView)
On Error Resume Next
Dim children As Products
Set children = prod.Products
Dim i As Integer
Dim child As Product
Dim key As String
Dim label As String
Dim check As Boolean
Dim monIndice As String
'===========================
'Récupère le nom de de la référence:
maReference = prod.PartNumber
'Récupère le nom de fichier:
nomFichier = prod.ReferenceProduct.Parent.Name
'Récupère le nom de l'instance:
nomInstance = children.Parent.Name
'Récupère le nom de la référence du parent:
monParent = prod.Parent.Parent.ReferenceProduct.Parent.Product.PartNumber
'Récupère le nom de fichier du parent (pour recherche composant):
monRefProductName = prod.ReferenceProduct.Parent.Name
check = True
'comparaison des indices
If Len(maReference) = 12 Then
monIndice = Right(maReference, 1)
monindiceParent = Right(monParent, 1)
If monIndice > monindiceParent Then
UserForm1.ListBox2.AddItem (maReference & " --> Indice NOK")
check = False
End If
End If
'fin comparaison des indices
'si égal alors c'est un composant et on ne teste ni la référence ni l'instance
If (monParent & ".CATProduct") <> monRefProductName Or monRootProduct = True Then
'Vérifie la syntaxe de la référence: 1 lettre + 9 chiffres et sin indice 1 lettre pour PART et PRODUCT
If IsNumeric(Left(maReference, 1)) = True Or IsNumeric(Right(Left(maReference, 10), 9)) = False Or IsNumeric(monIndice) = True Then
UserForm1.ListBox2.AddItem (maReference & " --> Syntaxe référence NOK")
check = False
End If
'vérifie si l'instance = référence + "." pour PART et PRODUCT
If Not (InStr(nomInstance, maReference & ".") <> 0) And monRootProduct = False Then
UserForm1.ListBox2.AddItem (maReference & "-" & nomInstance & " --> Instance NOK")
check = False
End If
'Si c'est un CATProduct, tests spécifiques PRODUCT:
If InStr(nomFichier, "CATProduct") > 0 Then 'And (monParent & ".CATProduct") <> monRefProductName Then
'vérifie si nomfichier = référence
If maReference <> Left(nomFichier, InStr(nomFichier, ".CATProduct") - 1) Then
UserForm1.ListBox2.AddItem (maReference & "-" & nomFichier & " --> Nom Fichier NOK")
check = False
End If
'vérifie si le 10è caractère de la référence est un 0
If Not (Right(Left(maReference, 10), 1) = 0) Then
UserForm1.ListBox2.AddItem (maReference & " --> La référence ne fini pas par 0")
check = False
End If
'vérifie si les 8 premiers caractères de la référence = 8 premiers caractères de la référence du parent
If Left(maReference, 8) <> Left(monParent, 8) Then
UserForm1.ListBox2.AddItem (maReference & " --> Racine de la référence NOK")
check = False
End If
End If
End If 'si pas composant
'Si c'est un CATPart , tests spécifiques PART:
If InStr(nomFichier, "CATPart") > 0 Then
'vérifie si nomfichier = référence
If maReference <> Left(nomFichier, InStr(nomFichier, ".CATPart") - 1) Then
UserForm1.ListBox2.AddItem (maReference & " --> Nom Fichier NOK")
check = False
End If
'vérifie si 10 caractère de la référence est différent de 0
If Right(Left(maReference, 10), 1) = 0 Then
UserForm1.ListBox2.AddItem (maReference & " --> La référence fini par 0")
check = False
End If
'vérifie si les 8 premiers caractères de la référence = 9 premiers caractères de la référence du parent
If Left(maReference, 9) <> Left(monParent, 9) Then
UserForm1.ListBox2.AddItem (maReference & " --> Racine de la référence NOK")
check = False
End If
'Recherche corps hybride
Dim mPart
Set mPart = prod.ReferenceProduct.Parent.Part
Dim mBody As Body
Set mBody = mPart.MainBody
If mBody.HybridShapes Is Nothing Then
'il n'y a pas d'elements hybrides dans le corps principal
Else
UserForm1.ListBox2.AddItem (maReference & " --> Corps hybride")
check = False
End If
End If
'texte d'affichage pour le treeview
If check = True Then
label = maReference & "-" & nomInstance & " --> OK "
ElseIf check = False Then
label = maReference & "-" & nomInstance & " --> NOK "
End If
monRootProduct = False
key = parentKey & "###" & prod.Name
'texte d'affichage pour la listbox1
If parentKey = "" Then
myTree.Nodes.Add(, , key, label).Expanded = True
UserForm1.ListBox1.AddItem maReference & "-" & nomInstance & "-" & nomFichier & "-" & monRootProduct
UserForm1.ListBox1.AddItem "----------"
Else
myTree.Nodes.Add(parentKey, tvwChild, key, label).Expanded = True
UserForm1.ListBox1.AddItem maReference & "-" & nomInstance & "-" & nomFichier & "-" & monRootProduct
UserForm1.ListBox1.AddItem "----------"
End If
For i = 1 To children.Count
Set child = children.Item(i)
visitProduct child, key, myTree
Next
End Sub
A tester sur des cas concrets , tiens moi au courant.
lumpazepfel- Fédérateur
- Messages : 319
Date d'inscription : 02/11/2015
Localisation : Ensisheim
Re: vérification réseption assemblage
bonjour
merci
j'ai un peut testé et sa a l'air de fonctionné, je n'est pas encore eu le temps de regarder comment sa fonctionne a cause de chose plus urgente, je te recontacte si j'ai des question
quentin
merci
j'ai un peut testé et sa a l'air de fonctionné, je n'est pas encore eu le temps de regarder comment sa fonctionne a cause de chose plus urgente, je te recontacte si j'ai des question
quentin
quentinc- actif
- Messages : 33
Date d'inscription : 07/06/2016
Localisation : saint quentin en yveline
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|