Tit'Yves Posté(e) le 21 mars 2007 Posté(e) le 21 mars 2007 Bonjour, Depuis une macro vb Excel, je souhaiterais savoir comment récupérer des paramètres d'une part dans un product en se servant de son nom d'instance. Je dois changer les parts en remplaçant le composant donc utiliser le nom en dur ne m'intéresse pas. Merci.
ouinamp Posté(e) le 21 mars 2007 Posté(e) le 21 mars 2007 Une fois que tu as le produit racine, tu descends l'arbre via la méthode MonProduitRacine.Products.Item(i).Une fois que tu es sur la bonne branche, tu peux récupérer le doc de type Part via la méthode MonProduitFeuille.ReferenceProduct.Parent
Tit'Yves Posté(e) le 22 mars 2007 Auteur Posté(e) le 22 mars 2007 Salut, Merci pour ta réponse, malheureusement je n'ai pas réussi à faire ce que je voulais.Actuellement mon code est ceci: Set partDocument = CATIA.Documents.Item("nomdufichier.CATPart")Set prt = partDocument.Part Dim Parametre1 As RealParamSet Parametre1 = prt.Parameters.Item("Param1") Je voudrais remplacer le nomdufichier.CATPart par son nom d'instance correspondant. En cherchant dans les aides j'ai vu qu'il existait un Product.Name et un Product.PartNumber.Pourriez-vous me dire à quoi cela correspond? Merci.
ouinamp Posté(e) le 23 mars 2007 Posté(e) le 23 mars 2007 Si tu n'as qu'un seul doc (la Part) d'ouvert en session, tu peux utiliser la syntaxe suivante :Set MyPart = CATIA.ActiveDocument Sinon, tu peux scanner les documents ouverts :For i = 1 To CATIA.Documents.Count If ( CATIA.Documents.Item(i).Product.PartNumber = "Le nom d'instance cherché" ) Then Set MyPart = CATIA.Documents.Item(i) Exit For End IfNext i Wala wala...
Tit'Yves Posté(e) le 26 mars 2007 Auteur Posté(e) le 26 mars 2007 Salut,Encore merci pour tes réponses;Malheureusement cela n'a pas fonctionner. Tout d'abord le Count m'indique 25 Parts alors qu'il n'y en a que 12 dans mon produit! Ensuite la macro bug sur la ligne: If ( CATIA.Documents.Item(i).Product.PartNumber = "Le nom d'instance cherché" ) Then il me renvoie l'erreur 438 : Propriété ou méthode non gérée pour cet objet. Comment remédier à cela? Merci. Tit'Yves
ouinamp Posté(e) le 26 mars 2007 Posté(e) le 26 mars 2007 Ach... Ca doit être dû au fait que la méthode CATIA.Documents lit tous les documents ouverts en session, y compris ceux qui ne sont pas au format CATPart/CATProduct (comme par ex des catalogues ou autres). => solution : ajouter une gestion d'erreur à ton code, soit :On Error Resume NextFor i = 1 To CATIA.Documents.Countetc.
Tit'Yves Posté(e) le 27 mars 2007 Auteur Posté(e) le 27 mars 2007 Salut,bon le fait de rajouter On Error Resume Nex n'a rien changer. Mais j'ai enfin trouver la commande. C'était très simple finalement:Voilà ce que j'ai fait: Set RootProduct = CATIA.ActiveDocument.ProductSet part = RootProduct.Products.Item("Nom de l'instance") et Set Param = part.Parameters.Item("Nom du paramètre dans CATIA")Param.Value = Worksheets("Feuil1").Range("A1").Value me donne la valeur du paramètre souhaité dans la première case de mon classeur EXCEL. Encore merci pour toutes tes réponses Tit'Yves
chocolatgc Posté(e) le 27 mars 2007 Posté(e) le 27 mars 2007 Salut TitYvesVoici une réponse également pour ton problème d'attaque d'une part par son instanciation. Ce qui est des plus judicieux, étant donné la modularité que peuvent prendre nos assemblage en therme de nom de part. 1 : Tout d'abord l'active doc Public Sub Listage() 'Listage Dim productDocument1 As ProductDocumentSet productDocument1 = CATIA.ActiveDocument Dim product1 As ProductSet product1 = productDocument1.Product Call ListePrd(product1) 'Appel de la fonction vois ci dessous End Sub 2 : la fonction Public Function ListePrd(prd1 As Product) 'listage des partnumber et name instancesDim products1 As ProductsSet products1 = prd1.Products For iNoeud = 1 To products1.countIf products1.Item(iNoeud).Products.count = 0 Theninstanciation1 = products1.Item(iNoeud).Namenompart = products1.Item(iNoeud).PartNumber'MsgBox products1.Item(iNoeud).PartNumber'MsgBox products1.Item(iNoeud).Name If instanciation1 = Inst Then 'si le nom de l'instanciation = à celui rechercher alors envoie le nom de la part. ATTENTION,Inst varibale public contenant l'instanciation à chercher Part_A_Editer = nompart 'MsgBox ("J'ai trouvé") Exit Function End If ElseDim Prd2 As ProductSet Prd2 = products1.Item(iNoeud)instanciation1 = Prd2.Namenompart = Prd2.PartNumber'MsgBox Prd2.PartNumber'MsgBox Prd2.Name Call ListePrd(Prd2)End IfNext End Function Voilà pour toi, qu'en pense tu ?, est-ce que cela répond à ta question ?MerciChocolat GC :P
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