vérification réseption assemblage

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

vérification réseption assemblage

Message par quentinc le Jeu 28 Juil 2016 - 20:53

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:
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
actif

Messages : 33
Date d'inscription : 07/06/2016
Localisation : saint quentin en yveline

Revenir en haut Aller en bas

Re: vérification réseption assemblage

Message par lumpazepfel le Jeu 28 Juil 2016 - 23:16

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
avatar
lumpazepfel
actif
actif

Messages : 153
Date d'inscription : 03/11/2015
Localisation : Ensisheim

Revenir en haut Aller en bas

Re: vérification réseption assemblage

Message par quentinc le Jeu 28 Juil 2016 - 23:51

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
actif

Messages : 33
Date d'inscription : 07/06/2016
Localisation : saint quentin en yveline

Revenir en haut Aller en bas

Re: vérification réseption assemblage

Message par lumpazepfel le Dim 31 Juil 2016 - 22:10

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:
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.


avatar
lumpazepfel
actif
actif

Messages : 153
Date d'inscription : 03/11/2015
Localisation : Ensisheim

Revenir en haut Aller en bas

Re: vérification réseption assemblage

Message par quentinc le Mer 10 Aoû 2016 - 21:34

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

quentinc
actif
actif

Messages : 33
Date d'inscription : 07/06/2016
Localisation : saint quentin en yveline

Revenir en haut Aller en bas

Re: vérification réseption assemblage

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