mooneck Posté(e) le 1 août 2005 Posté(e) le 1 août 2005 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 NumContraintepuis 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 NumContraintece code bloque a cette ligne : LENom = ConstraintsProduits.ITEM(NumContrainte).Namej'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
prosper67 Posté(e) le 1 août 2005 Posté(e) le 1 août 2005 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.Selectionosel.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 Nextosel.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. ByeChris
mooneck Posté(e) le 3 août 2005 Auteur Posté(e) le 3 août 2005 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 ancresdonc 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
gawel Posté(e) le 5 août 2005 Posté(e) le 5 août 2005 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 integerdim ConstraintsProduits as variantSet ConstraintsProduits = ProduitEnCours.Connections("CATIAConstraints") For i = 1 To ConstraintsProduits.Count-1 ConstraintsProduits.Remove (ConstraintsProduits.count)next et puis c'est tout ! Amicalement Gawel
gawel Posté(e) le 6 août 2005 Posté(e) le 6 août 2005 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
mooneck Posté(e) le 6 août 2005 Auteur Posté(e) le 6 août 2005 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'avanceAmicalement 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
mooneck Posté(e) le 6 août 2005 Auteur Posté(e) le 6 août 2005 Salut Gawel Je pense qu'il y a un probleme sur le dernier message il ne s'affiche pas en entierY 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
gawel Posté(e) le 6 août 2005 Posté(e) le 6 août 2005 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) le 6 août 2005 Posté(e) le 6 août 2005 Je pense qu'il y a un probleme sur le dernier message il ne s'affiche pas en entierY 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é.
mooneck Posté(e) le 9 août 2005 Auteur Posté(e) le 9 août 2005 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
gawel Posté(e) le 12 août 2005 Posté(e) le 12 août 2005 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
mooneck Posté(e) le 16 août 2005 Auteur Posté(e) le 16 août 2005 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
mooneck Posté(e) le 24 août 2005 Auteur Posté(e) le 24 août 2005 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
gawel Posté(e) le 24 août 2005 Posté(e) le 24 août 2005 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 VariantDim k As IntegerSet 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 ProductDocumentDim DestProduct As ProductSet DestDoc = CATIA.ActiveDocumentSet DestProduct = DestDoc.Product Dim i As IntegerDim j As IntegerDim h As Integer Dim toto As IntegerDim titi As IntegerDim tutu As Integer Dim produits1 As ProductsDim produit1 As ProductDim produits2 As ProductsDim produit2 As ProductDim produits3 As ProductsDim 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 NextEnd If Unload Me End Sub Amicalement Gawel
mooneck Posté(e) le 24 août 2005 Auteur Posté(e) le 24 août 2005 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 tetej'ai un premier message qui me donne 3 contraintesapres effacement : 0 contraintes Et des que je descend dans l'arbre :j'ai 5 contraintes avant effacementet 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
mooneck Posté(e) le 25 août 2005 Auteur Posté(e) le 25 août 2005 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
prosper67 Posté(e) le 25 août 2005 Posté(e) le 25 août 2005 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
mooneck Posté(e) le 26 août 2005 Auteur Posté(e) le 26 août 2005 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
gawel Posté(e) le 26 août 2005 Posté(e) le 26 août 2005 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
mooneck Posté(e) le 26 août 2005 Auteur Posté(e) le 26 août 2005 Salut Gawel Je t'envoi le code par mail il ne marche qu'à partir de la R14il 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
mooneck Posté(e) le 29 août 2005 Auteur Posté(e) le 29 août 2005 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
gawel Posté(e) le 29 août 2005 Posté(e) le 29 août 2005 Pas de souci Mooneck ! merci pour ta disponibilité. Amicalement Gawel
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant