Aller au contenu

Suppression de contraintes en VBA


Messages recommandés

Posté(e)

Bonjour,

 

Je veux supprimer des contraintes automatiquementdans un assemblage.

lorsque je passe le produit de tete : il n'ya pas de problème.

Par contre des que je descend d'un niveau dans l'assemblage je n'arrive pas a supprimer les contraintes.

Voila comment je procede :

sur le produit en cours, je récupère la collection des contraintes :

 Set ConstraintsProduits = ProduitEnCours.Connections("CATIAConstraints")

ensuite je récupère les noms des contraintes dans tableau :

 '       Recuperation de la liste des contraintes
       For NumContrainte = 1 To ConstraintsProduits.Count
            LENom = ConstraintsProduits.ITEM(NumContrainte).Name
           ListeDesContraintesAEffacer(NumContrainte) = LENom
       Next NumContrainte

puis j'efface les contraintes une à une :

 '       Effacement des contraintes de la liste
       For NumContrainte = 1 To UBound(ListeDesContraintesAEffacer)
           f.WriteLine "suppression de la contrainte " & ListeDesContraintesAEffacer(NumContrainte)
           ConstraintsProduits.Remove (ListeDesContraintesAEffacer(NumContrainte))
       Next NumContrainte

ce code bloque a cette ligne :

 LENom = ConstraintsProduits.ITEM(NumContrainte).Name

j'obtiens le message suivant :

Run time error '438'

Object doesn't support this property or method

 

alors que pour le premier niveau d'assemblage ce code marche.

La seule différence réside dans le produit :

 

 Set ConstraintsAeffacer = ProduitDocumentActif.Product.Connections("CATIAConstraints")

 

ou ProduitDocumentActif = CATIA.ActiveDocument

 

Je pense que je récupère bien la collection des contraintes car ConstraintsProduits.Count me donne bien le nombre de contraintes du produit en cours

 

Si quelqu'un a une idée sur la question, je suis ouvert à toute proposition.

Merci d'avance.

 

[Edité le 1/8/2005 par mooneck]

 

[Edité le 1/8/2005 par mooneck]

Connaître son ignorance est la meilleure part de la connaissance !http://mooneck.pagesperso-orange.fr/confucius_mini.gif

Posté(e)

Salut Mooneck,

 

si tu comptes supprimer toutes les contraintes d'un assemblage, je te propose la méthode bourrin suivante:

 

Sub CATMain()

 

Set osel = CATIA.ActiveDocument.Selection

osel.Clear

 

 

For i = 1 To CATIA.Documents.Count

Set odocument = CATIA.Documents.Item(i)

 

If TypeName(odocument) = "ProductDocument" Then

 

Set oconstraints = odocument.Product.Connections("CATIAConstraints")

 

If oconstraints.Count >= 0 Then

For j = 1 To oconstraints.Count

osel.Add oconstraints.Item(j)

Next

End If

End If

 

Next

osel.Delete

 

End Sub

 

 

Dans ce cas, toutes les contraintes de TOUS les Produits ouverts seront supprimées, produit actif ou non.

Dans le cas où tu aurais plusieurs produits ouverts, faudrait programmer une boucle récursive car, les contraintes ne se laissent supprimer qu'à l'interieur du document dans lequel elles se trouvent. Faudrait, danc ce cas passer la methode product.ReferenceProduct.parent (soit le document).

 

Récupérer les noms ne sert pas vraiment à grand chose si tu comptes tout supprimer. Bien sür, si tu entends supprimer qu'un type précis de contraintes, fo procéder autrement. Tiens moi au courant.

 

Bye

Chris

Posté(e)

Bonjour Prosper67,

 

tout d'abord merci d'avoir répondu si vite.

 

En fait j'ai déja une boucle récursive :

- elle efface les contraintes du produit en cours

- elle recrée des contraintes de type ancres

donc je souhaite conserver les niveaux et les gérer au fur et à mesure.

 

qu'entends tu par :

Faudrait, danc ce cas passer la methode product.ReferenceProduct.parent (soit le document).

 

je pense que c'est à ce niveau que ca déconne car quand je connect la collection de contrainte en cours, il récupère bien le nombre de contrinates, mais ca s'arrete là. il doit y avoir un probleme de document actif...

 

si tu as quelques minutes je peux t'envoyer le code par courriel, il n'est pas tres long.

merci de ton aide.

Mooneck

herve.sabatou@club-internet.fr

:)

Connaître son ignorance est la meilleure part de la connaissance !http://mooneck.pagesperso-orange.fr/confucius_mini.gif

Posté(e)

Salut mooneck,

 

moi, j'essayerais ceci:

il faut effacer tes contraintes, tu en connais le nombre exact; tu fais une boucle qui va effacer tes contraintes une à une:

 

dim i as integer

dim ConstraintsProduits as variant

Set ConstraintsProduits = ProduitEnCours.Connections("CATIAConstraints")

 

For i = 1 To ConstraintsProduits.Count-1

ConstraintsProduits.Remove (ConstraintsProduits.count)

next

 

et puis c'est tout !

 

Amicalement

 

Gawel

Posté(e)

euh,

il faut enlever le "-1" à la fin de " For i = 1 To ConstraintsProduits.Count-1", ça ne sert à rien. bon par contre mon truc marche uniquement pour un produit donné (ici ProduitEnCours), et donc il faut pouvoir descendre dans l'arborescence, sans connaitre au préalable comment est orgénisé l'arbre.

 

je vais essayer avec la méthode de prosper

 

Amicakement

 

Gaël

 

Posté(e)

Bonjour Gawel,

 

 

J'ai essayé cette boucle mais je n'ai pas de résultat satisfaisant : :(

aucun message d'erreur mais les contraintes ne sont pas supprimées !

quand je la passe en mode pas à pas, ConstraintsProduits.Count contient bien le nombre de contraintes (5) mais .remove n'a aucun effet.

Je pense que cela provient de ProduitEnCours. Faut-il rendre le produit actif ? ou autre méthode pour bien prendre en compte le produit avant de faire la "connection" de la collection de contraintes. :casstet:

 

voici mon code conernant le traitement des contraintes

 


Option Base 1
Sub Fixation(ByRef ProduitEnCours As Product, _
ByVal NB_sous_produits As Integer, ByVal niveau As Integer)
'
   'On Error GoTo ErrorHandler
'
'-----------------------------------------------------------------------------------------
'Déclaration des variables
'-----------------------------------------------------------------------------------------
   Dim TABLE_reference() As Reference          '
   Dim ConstraintsProduits As Variant      '
   Dim ConstraintsAeffacer As Constraints      '
   Dim TABLE_constraint() As Constraint        '
   Dim ListeDesContraintesAEffacer() As Variant '
   Dim NOM_REF As String                       '
   Dim i As Integer                            '
   Dim NUMEROPART As String                    '
   Dim NOM As String                           '
   Dim INSTANCE As String                      '
   Dim NomDuProduitEncours As String           '
   Dim NumContrainte As Variant                '
'
'-----------------------------------------------------------------------------------------
'Initialisation des variables
'-----------------------------------------------------------------------------------------
   Set ConstraintsProduits = ProduitEnCours.Connections("CATIAConstraints")
   Set ConstraintsAeffacer = ProduitDocumentActif.Product.Connections("CATIAConstraints")
   ReDim TABLE_reference(NB_sous_produits)
   ReDim TABLE_constraint(NB_sous_produits)
   NomDuProduitEncours = ProduitEnCours.Name
   Debug.Print NomDuProduitEncours
'
'-----------------------------------------------------------------------------------------
'Suppression des contraintes existantes
'-----------------------------------------------------------------------------------------
' _______________________________________________________________________
' Vérifie si on se trouve dans le niveau de tete
   If niveau = 1 Then
       Debug.Print "Traitment des contraintes du niveau 1"
       Debug.Print "Tete de l'assemblage"
       ReDim ListeDesContraintesAEffacer(ConstraintsAeffacer.Count)
'       _________________________________________________________________
'       Recuperation de la liste des contraintes
       For NumContrainte = 1 To ConstraintsAeffacer.Count
           ListeDesContraintesAEffacer(NumContrainte) = ConstraintsAeffacer.ITEM(NumContrainte).Name
       Next NumContrainte
'       _________________________________________________________________
'       Effacement des contraintes de la liste
       For NumContrainte = 1 To UBound(ListeDesContraintesAEffacer)
           f.WriteLine "suppression de la contrainte " & ListeDesContraintesAEffacer(NumContrainte)
           ConstraintsAeffacer.Remove (ListeDesContraintesAEffacer(NumContrainte))
       Next NumContrainte
' _______________________________________________________________________
' Traitement de tous les autres niveaux
   Else
       Debug.Print "Traitment des contraintes du niveau " & niveau
       ReDim ListeDesContraintesAEffacer(ConstraintsProduits.Count)
'       _________________________________________________________________
'       Recuperation de la liste des contraintes
       'For NumContrainte = 1 To ConstraintsProduits.Count
       '    LENom = ConstraintsProduits.ITEM(NumContrainte).Name
       '    ListeDesContraintesAEffacer(NumContrainte) = LENom
       'Next NumContrainte
'       _________________________________________________________________
'       Effacement des contraintes de la liste
       'For NumContrainte = 1 To UBound(ListeDesContraintesAEffacer)
       '    f.WriteLine "suppression de la contrainte " & ListeDesContraintesAEffacer(NumContrainte)
       '    ConstraintsProduits.Remove (ListeDesContraintesAEffacer(NumContrainte))
       'Next NumContrainte
       
       'Dim i As Integer
       'Dim ConstraintsProduits As Variant
  
  '===============================     
  'test de Gawel
  '===============================     
       For i = 1 To ConstraintsProduits.Count
       ConstraintsProduits.Remove (ConstraintsProduits.Count)
       Next

       
'
'
'   TEST d'une autre facon, qui ne marche par non plus
       'For NB = NB_Contrainte To 1 Step -1
       '    ConstraintsProduits.Remove (NB)
       'Next NB
'
'   TEST d'une autre facon, qui ne marche par non plus
       'A = 0
       'While ConstraintsProduits.Count <> 0
       '    A = A + 1
       '    'f.WriteLine "suppression de la contrainte " & ConstraintsProduits.ITEM(ConstraintsProduits.Count).Name
       '    ConstraintsProduits.Remove (ConstraintsProduits.Count)
       '    NB_Contrainte = ConstraintsProduits.Count
       '    Debug.Print A & ", " & ConstraintsProduits.Count
       'Wend
'
'
   End If
'
'-----------------------------------------------------------------------------------------
'Création des nouvelles contraintes : Ancres
'-----------------------------------------------------------------------------------------
' _______________________________________________________________________
' Vérification de la collection de contraintes : elle doit être vide
   If ConstraintsProduits.Count <> 0 Then
   Err.Raise 9000, "Programme.ConstraintsProduits.Remove", "Les contraintes n'ont pas été supprimé !"
   End If
'
   For i = 1 To ProduitEnCours.Products.Count
' _______________________________________________________________________
' Récupération des paramètres du produit en cours
       Debug.Print "Encrage n°" & i
       NUMEROPART = ProduitEnCours.Products.ITEM(i).PartNumber '
       Debug.Print "PartNumber : " & NUMEROPART
       INSTANCE = ProduitEnCours.Products.ITEM(i).Name         '
       Debug.Print "Instance : " & INSTANCE
' _______________________________________________________________________
' Ecriture de la Référence de la nouvelle contrainte
       NOM_REF = NomDuProduitEncours & "/" & INSTANCE & "/!" & NomDuProduitEncours & "/" & INSTANCE & "/"
       Debug.Print NOM_REF
' _______________________________________________________________________
' Insertion de la référence dans la liste des nouvelles contraintes
       Set TABLE_reference(i) = ProduitEnCours.CreateReferenceFromName(NOM_REF)
' _______________________________________________________________________
'       Création de la nouvelle contrainte
       Set TABLE_constraint(i) = ConstraintsProduits.AddMonoEltCst(catCstTypeReference, TABLE_reference(i))
' _______________________________________________________________________
' Modification du type de contrainte
'       Fixité absolue  : catCstRefTypeFixInSpace
'       Fixité relative : catCstRefTypeRelative
       TABLE_constraint(i).ReferenceType = catCstRefTypeFixInSpace
'
       Debug.Print ""
'
   Next
'
Exit Sub
'
'-----------------------------------------------------------------------------------------
'Traitement des erreurs
'-----------------------------------------------------------------------------------------
ErrorHandler:
'
   If Err.Number = 91 Or Err.Number = -2147418113 Or Err.Number = -2147467259 Then
       Resume Next
   Else
'
       Debug.Print "Erreur numéro :" & Err.Number
       Debug.Print Err.Description
       REPONSE = MsgBox("Erreur numéro :" & Err.Number & Chr(13) & Err.Description & Chr(13) & Chr(13) _
                   & "erreur sur le fichier n°" & i & Chr(13) & Chr(13) & "Ok pour continuer, Cancel pour Terminer.", vbOKCancel, "Attention")
'
'       MsgBox REPONSE
       If REPONSE = 1 Then
           Resume Next
       Else
           MsgBox "Opération annulée"
           Exit Sub
       End If
   End If
'
End Sub

 

 

 

et pour vérifier la déclaration du produit en cours voici le code concernant la boucle récursive

 

 

 

 


'            ****************************************************************
'            *              Programme CATIA VBA V5R14                       *
'            *              Auteur : Hervé Sabatou                          *
'            *              Société : © CEMA - Groupe ALEMA                 *
'            *                                                              *
'            ****************************************************************
'                           ---------------------------------
'                             Scanner + ancrage automatique
'                           ---------------------------------
'
'             - Fonction :  Ce programme scanne un assemblage complet
'                           Il supprime l'ensemble des contraintes de
'                           chaque produit et les remplace par des ancres
'
'             - Version : 1.0
'             - Date : juillet 2005
'
'-----------------------------------------------------------------------------------------
'Déclaration des variables publics
'-----------------------------------------------------------------------------------------
   Public f, fso, fso2                             'Variable Filesystem pour création du fichier
   Public ProduitDeTete As String                  'Nom du produit de tete
   Public RepertoireBase As String                 'Chemin du produit de tete
   Public ProduitDocumentActif As ProductDocument  'Document actif de tete
'
'

Sub CATMain()
'-----------------------------------------------------------------------------------------
'Déclaration des variables
'-----------------------------------------------------------------------------------------
   Dim documents1 As Documents
   Set documents1 = CATIA.Documents
'
'-----------------------------------------------------------------------------------------
'Sélection du document actif
'-----------------------------------------------------------------------------------------
   Set ProduitDocumentActif = CATIA.ActiveDocument
   ProduitDeTete = ProduitDocumentActif.Name
   RepertoireBase = ProduitDocumentActif.Path
'
'-----------------------------------------------------------------------------------------
'Programme
'-----------------------------------------------------------------------------------------
   CreationFichierTexte                        'Ouvre un fichier trace dans le %TEMP%
'
   analyse ProduitDocumentActif.Product, 0     'Lance la boucle récursive et traite les actions
'
   FermeFichierTexte                           'Ferme le fichier trace dans le %TEMP%
'
'
End Sub

Sub analyse(ProduitEnCours As Product, ByVal niveau As Integer)
'
'-----------------------------------------------------------------------------------------
'Déclaration des variables
'-----------------------------------------------------------------------------------------
   Dim tabulation, tabulation2 As String
   tabulation = Space(5 * niveau)
   niveau = niveau + 1
'
'-----------------------------------------------------------------------------------------
'Charge le composant
'-----------------------------------------------------------------------------------------
   ProduitEnCours.ActivateDefaultShape
'
'-----------------------------------------------------------------------------------------
'Ecriture du nom du produit dans le fichier trace
'-----------------------------------------------------------------------------------------
   chaine = tabulation & "Niveau " & niveau & _
           " : " & ProduitEnCours.Name & " - " & _
           ProduitEnCours.DescriptionRef
   f.WriteLine chaine
   Debug.Print chaine
'
   tabulation2 = tabulation & Space(5)
'
'-----------------------------------------------------------------------------------------
'Je lance le programme spécifique d'ancrage des éléments du produit en cours
'-----------------------------------------------------------------------------------------
   Fixation ProduitEnCours, ProduitEnCours.Products.Count, niveau
'
'-----------------------------------------------------------------------------------------
'Je passe en revue tous les articles du produits
'-----------------------------------------------------------------------------------------
   For i = 1 To ProduitEnCours.Products.Count
       NB_Item = ProduitEnCours.Products.ITEM(i).Products.Count
'       _________________________________________________________________
'       Si l'article est un produit alors on relance la boucle
       If ProduitEnCours.Products.ITEM(i).Products.Count <> 0 Then
           analyse ProduitEnCours.Products.ITEM(i), niveau
       Else
'       _________________________________________________________________
'       Sinon je descends d'un niveau et je traite la part
           ProduitEnCours.Products.ITEM(i).ActivateDefaultShape
           chaine = tabulation2 & "Niveau " & niveau + 1 & _
                   " : " & "Part " & i & _
                   " : " & ProduitEnCours.Products.ITEM(i).Name & " - " & _
                   ProduitEnCours.Products.ITEM(i).DescriptionRef
           f.WriteLine chaine
           Debug.Print chaine
       End If
   Next i
'
'-----------------------------------------------------------------------------------------
'J'écris une ligne vide à la fin du produit
'-----------------------------------------------------------------------------------------
   Debug.Print
   f.WriteLine ""
'
'
End Sub

 

 

merci d'avance

Amicalement Hervé

 

 

 

[Edité le 6/8/2005 par mooneck]

Connaître son ignorance est la meilleure part de la connaissance !http://mooneck.pagesperso-orange.fr/confucius_mini.gif

Posté(e)

Salut Gawel

 

Je pense qu'il y a un probleme sur le dernier message il ne s'affiche pas en entier

Y a t-il une limitation dans le forum ?

 

Puis je t'envoyer le code par mail ?

 

 

BON appétit

 

Hervé

Connaître son ignorance est la meilleure part de la connaissance !http://mooneck.pagesperso-orange.fr/confucius_mini.gif

Posté(e)

oui, voici mon adresse (littérale):

 

gael(point)mazoue(at)laposte(point)net

 

A+ tard

 

Gawel

 

PS: je m'en vais en festival d'ici 30', donc je reprendrais certainement que dimanche !!

Invité Patrick
Posté(e)
Je pense qu'il y a un probleme sur le dernier message il ne s'affiche pas en entier

Y a t-il une limitation dans le forum ?

 

Lorsqu'il y a un problème de ce type, essayez de désactiver les smileys; généralement cela résoud le problème. Je l'ai fais pour le message incorrectement affiché.

Posté(e)

Bonjour

 

Merci patrick pour cette info, c'est vrai que ca marche mieux comme ca ! :)

 

Gawel je viens de t'envoyer un mail avec le catvba joint

 

Merci @ plus

 

Mooneck

Connaître son ignorance est la meilleure part de la connaissance !http://mooneck.pagesperso-orange.fr/confucius_mini.gif

Posté(e)

je ne t'oublie mooneck, mais je suis un peu surboocké en ce moment; j'enverrais un post dès que j'ai du nouveau. je pars en vacances après-demain pour 1 semaine.

 

A bientôt

 

Gawel

Posté(e)

Bonjour Gawel ,

je ne suis pas à la minute.

Moi aussi je suis en vacances et donc moins devant l'ordi.

Passe de bonnes vacances

 

@+

Mooneck

 

[Edité le 17/8/2005 par mooneck]

Connaître son ignorance est la meilleure part de la connaissance !http://mooneck.pagesperso-orange.fr/confucius_mini.gif

Posté(e)

Salut Gawel

 

As tu nouveau concernant le probleme de suppression de contraintes auto.

 

Merci d'avance

 

@+

Connaître son ignorance est la meilleure part de la connaissance !http://mooneck.pagesperso-orange.fr/confucius_mini.gif

Posté(e)

Salu mooneck,

 

oui en effet, j'ai travaillé dessus hier soir. Avec le code que j'ai fait, j'arrive à supprimer toutes les contraintes dans tous les niveaux que ce soit. La seule chose, c'est que je ne calcule pas le nombre de niveau automatiquement, mais plutôt de manière manuelle (pour l'instant, je descends de 3 niveaux je crois). Et puis, pour ma boucle qui descend dans les niveaux, il faudrait que je crée une Sub spéciale, ça simplifierais le programme. Tout ça, c'est de la réflexion brute et donc ce n'est pas optimisé.

 

je voulais créer la partie "création des contraintes de type ancre" avant de soumettre le code, mais tu veux peut-être continuer le prog pour avancer. ce prog m'intéresse aussi, car mon client (qui doit être le même que le tien) pour qui je travaille m'impose cela aussi, et je trouve cela très rébarbatif et répétitif, donc vive le VBA !!!

 

je te mets le code de ma form uniquement (tu dois connaitre déjà le code pour lancer l'appli):

 

Sub nettoyage(produitencours As Product)

 

Dim ConstraintsProduits As Variant

Dim k As Integer

Set ConstraintsProduits = produitencours.Connections("CATIAConstraints")

 

MsgBox ConstraintsProduits.Count

 

For k = 1 To ConstraintsProduits.Count

ConstraintsProduits.Remove (ConstraintsProduits.Count)

Next

 

End Sub

 

Private Sub CommandButton2_Click() 'bouton de lancement

 

Dim DestDoc As ProductDocument

Dim DestProduct As Product

Set DestDoc = CATIA.ActiveDocument

Set DestProduct = DestDoc.Product

 

Dim i As Integer

Dim j As Integer

Dim h As Integer

 

Dim toto As Integer

Dim titi As Integer

Dim tutu As Integer

 

Dim produits1 As Products

Dim produit1 As Product

Dim produits2 As Products

Dim produit2 As Product

Dim produits3 As Products

Dim produit3 As Product

 

Call nettoyage(DestProduct)

 

toto = DestProduct.Products.Count

 

If toto > 0 Then

For i = 1 To toto

Set produits1 = DestProduct.Products

Set produit1 = produits1.Item(i)

Call nettoyage(produit1)

titi = produit1.Products.Count

If titi > 0 Then

For j = 1 To titi

Set produits2 = produit1.Products

Set produit2 = produits2.Item(j)

Call nettoyage(produit2)

tutu = produit2.Products.Count

If tutu > 0 Then

For h = 1 To tutu

Set produits3 = produit2.Products

Set produit3 = produits3.Item(h)

Call nettoyage(produit3)

Next

End If

Next

End If

Next

End If

 

Unload Me

 

End Sub

 

 

 

Amicalement

 

Gawel

Posté(e)

Salut Gawel

 

Je dois avoir la poisse

 

J'ai repris la partie de ton code

 

 Dim ConstraintsProduits As Variant
Dim k As Integer
Set ConstraintsProduits = produitencours.Connections("CATIAConstraints")

MsgBox ConstraintsProduits.Count

For k = 1 To ConstraintsProduits.Count
ConstraintsProduits.Remove (ConstraintsProduits.Count)
Next

'j'ai ajouté cette ligne pour controle
MsgBox ConstraintsProduits.Count

 

voici ce que ca donne :

 

Sub Fixation(ByVal produitencours As Product, ByVal NB_sous_produits As Integer, ByVal niveau As Integer)
'
____'On Error GoTo ErrorHandler
'
'-----------------------------------------------------------------------------------------
'Déclaration des variables
'-----------------------------------------------------------------------------------------
____Dim TABLE_reference() As Reference________  '
____Dim ConstraintsProduits As Variant________  '
____
____Dim TABLE_constraint() As Constraint________'
____
____Dim NOM_REF As String____________________   '
____Dim k, i As Integer________________________   '
____Dim NUMEROPART As String____________________'
____Dim NOM As String________________________   '
____Dim INSTANCE As String____________________  '
____Dim NomDuProduitEncours As String________   '
____Dim NumContrainte As Variant________________'
'
'-----------------------------------------------------------------------------------------
'Initialisation des variables
'-----------------------------------------------------------------------------------------
____Set ConstraintsProduits = produitencours.Connections("CATIAConstraints")
____
____ReDim TABLE_reference(NB_sous_produits)
____ReDim TABLE_constraint(NB_sous_produits)
____NomDuProduitEncours = produitencours.Name
____Debug.Print NomDuProduitEncours
'
'-----------------------------------------------------------------------------------------
'Suppression des contraintes existantes : Traitement de tous les niveaux
'-----------------------------------------------------------------------------------------
________
  'Code de Gawel
  
____MsgBox ConstraintsProduits.Count

____For k = 1 To ConstraintsProduits.Count
________ConstraintsProduits.Remove (ConstraintsProduits.Count)
____Next
____
____MsgBox ConstraintsProduits.Count

 

 

ensuite j'ai conservé mon code concernant la boucle récursive (module execute) que j'ai légèrement modifié car j'avais pas déclaré tout comme il faut :

 

 

'-----------------------------------------------------------------------------------------
'Déclaration des variables publics
'-----------------------------------------------------------------------------------------
____Public f, fso, fso2____________________________ 'Variable Filesystem pour création du fichier
____Public ProduitDeTete As String________________  'Nom du produit de tete
____Public RepertoireBase As String________________ 'Chemin du produit de tete
____Public ProduitDocumentActif As ProductDocument  'Document actif de tete
'
'

Sub CATMain()
'-----------------------------------------------------------------------------------------
'Déclaration des variables
'-----------------------------------------------------------------------------------------
____Dim documents1 As Documents
____Set documents1 = CATIA.Documents
'
'-----------------------------------------------------------------------------------------
'Sélection du document actif
'-----------------------------------------------------------------------------------------
____Set ProduitDocumentActif = CATIA.ActiveDocument
____ProduitDeTete = ProduitDocumentActif.Name
____RepertoireBase = ProduitDocumentActif.Path
'
'-----------------------------------------------------------------------------------------
'Programme
'-----------------------------------------------------------------------------------------
____CreationFichierTexte________________________'Ouvre un fichier trace dans le %TEMP%
'
____analyse ProduitDocumentActif.Product, 0____ 'Lance la boucle récursive et traite les actions
'
____FermeFichierTexte________________________   'Ferme le fichier trace dans le %TEMP%
'
'
End Sub

Sub analyse(ByVal produitencours As Product, ByVal niveau As Integer)
'
'-----------------------------------------------------------------------------------------
'Déclaration des variables
'-----------------------------------------------------------------------------------------
____Dim CollecProduitsenCours As Products
____Dim NouveauProduitPourAnalyse As Product
____Dim tabulation, tabulation2 As String
____tabulation = Space(5 * niveau)
____niveau = niveau + 1
'
'-----------------------------------------------------------------------------------------
'Charge le composant
'-----------------------------------------------------------------------------------------
____produitencours.ActivateDefaultShape
'
'-----------------------------------------------------------------------------------------
'Ecriture du nom du produit dans le fichier trace
'-----------------------------------------------------------------------------------------
____chaine = tabulation & "Niveau " & niveau & _
____________" : " & produitencours.Name & " - " & _
____________produitencours.DescriptionRef
____f.WriteLine chaine
____Debug.Print chaine
'
____tabulation2 = tabulation & Space(5)
'
'-----------------------------------------------------------------------------------------
'Je lance le programme spécifique d'ancrage des éléments du produit en cours
'-----------------------------------------------------------------------------------------
____Fixation produitencours, produitencours.Products.Count, niveau
'
'-----------------------------------------------------------------------------------------
'Je passe en revue tous les articles du produits
'-----------------------------------------------------------------------------------------
____For i = 1 To produitencours.Products.Count
________NB_Item = produitencours.Products.ITEM(i).Products.Count
________Set CollecProduitsenCours = produitencours.Products
________Set NouveauProduitPourAnalyse = CollecProduitsenCours.ITEM(i)
'____   _________________________________________________________________
'____   Si l'article est un produit alors on relance la boucle
________If NB_Item <> 0 Then
____________analyse NouveauProduitPourAnalyse, niveau
________Else
'____   _________________________________________________________________
'____   Sinon je descends d'un niveau et je traite la part
____________NouveauProduitPourAnalyse.ActivateDefaultShape
____________chaine = tabulation2 & "Niveau " & niveau + 1 & _
____________________" : " & "Part " & i & _
____________________" : " & NouveauProduitPourAnalyse.Name & " - " & _
____________________NouveauProduitPourAnalyse.DescriptionRef
____________f.WriteLine chaine
____________Debug.Print chaine
________End If
____Next i
'
'-----------------------------------------------------------------------------------------
'J'écris une ligne vide à la fin du produit
'-----------------------------------------------------------------------------------------
____Debug.Print
____f.WriteLine ""
'
'
End Sub

 

[surligneur] Mais toujours pareil ! :mad: [/surligneur]

 

Lorque ce traite le niveau de tete

j'ai un premier message qui me donne 3 contraintes

apres effacement : 0 contraintes

 

Et des que je descend dans l'arbre :

j'ai 5 contraintes avant effacement

et 5 contraintes apres effacement ! :( :( :( :( :( :(

 

Mais comment cela peut-il se produire ? il doit y avoir un probrleme de déclaration ou je ne sais KOI. (passage de la variable produit encours dans la boucle récursive)

 

 

Si tu as une idée

 

@+

 

 

Connaître son ignorance est la meilleure part de la connaissance !http://mooneck.pagesperso-orange.fr/confucius_mini.gif

Posté(e)

Salut Gawel

 

Ca y est ! :D

J'ai enfin la solution !

Par contre j'ai du faire appel à Callcenter car j'avais besoin de terminer ce programme et ca m'enervait de buter si pres du but.

En fait il ne manquait qu'un mot dans la procédure "Execute" (boucle récursive)

et c'est bien ce qu'il me semblait, il s'agit de la définition de "ProduitEnCours"

 

 Set CollecProduitsenCours = ProduitEnCours.ReferenceProduct.Products
Set NouveauProduitPourAnalyse = CollecProduitsenCours.ITEM(i).ReferenceProduct

 

le petit mot qui fait la différence ! [surligneur] .ReferenceProduct[/surligneur]

 

Si le code terminé t'interesse fait le moi savoir

(j'ai ajouté en plus une progressbar : pratique pour les tres gros assemblage !)

 

Merci pour ton aide

 

@+

Connaître son ignorance est la meilleure part de la connaissance !http://mooneck.pagesperso-orange.fr/confucius_mini.gif

Posté(e)

Salut Mooneck,

 

dans mon post j'avais écrit:

"Dans le cas où tu aurais plusieurs produits ouverts, faudrait programmer une boucle récursive car, les contraintes ne se laissent supprimer qu'à l'interieur du document dans lequel elles se trouvent. Faudrait, danc ce cas passer la methode product.ReferenceProduct.parent (soit le document)."

 

 

Autrement dit, par la methode "ReferenceProduct" comme te l'a conseillé le CallCenter... :)

 

L'essentiel reste tout de même que ton problème soit enfin resolu.

 

Amicalement,

Christophe

Posté(e)

Salut Christophe

 

J'avais la réponse sous les yeux et je ne m'en suis pas rendu compte.

En fait au début j'étais focalisé sur d'autres problemes et quand tu m'avait répondu je n'ai pas saisi le sens de ta phrase :

 

Faudrait, danc ce cas passer la methode product.ReferenceProduct.parent (soit le document).

 

et apres je n'y ai plus repensé

 

merci quand meme !

 

 

Connaître son ignorance est la meilleure part de la connaissance !http://mooneck.pagesperso-orange.fr/confucius_mini.gif

Posté(e)

Salut mooneck,

 

bien content que tu es réussi à te dépatouiller !!

Mon début de programme marchait bien aussi; je voulais terminer le prog en créant les contraintes de type ancre, mais je butais sur la création de la référence par rapport aux catpart et aux products.

 

Si cela ne te dérange pas, je serais intéressé par ton code (bien l'idée aussi de la progress bar, car en effet, j'ai de très gros assemblages....), tu as mon mail !!

 

Amicalement

 

Gawel

Posté(e)

Salut Gawel

 

Je t'envoi le code par mail

 

il ne marche qu'à partir de la R14

il y a des problemes en R12 (j'ai pas essayé la R13)

 

@+

Connaître son ignorance est la meilleure part de la connaissance !http://mooneck.pagesperso-orange.fr/confucius_mini.gif

Posté(e)

Gawel

 

Je te renverrai le code sans password des que possible

 

pour l'instant j'ai mon micro chez moi qui m'a laché vandredi donc je suis sans pc

 

@+

Connaître son ignorance est la meilleure part de la connaissance !http://mooneck.pagesperso-orange.fr/confucius_mini.gif

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité