Aller au contenu

[CATIA VBA] Attaquer une part par son nom d\'instance en vb


Messages recommandés

Posté(e)

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.

Posté(e)

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

Posté(e)

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 RealParam

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

Posté(e)

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 If

Next i

 

Wala wala...

Posté(e)

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

Posté(e)

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 Next

For i = 1 To CATIA.Documents.Count

etc.

Posté(e)

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

Set 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

Posté(e)

Salut TitYves

Voici 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 ProductDocument

Set productDocument1 = CATIA.ActiveDocument

 

Dim product1 As Product

Set 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 instances

Dim products1 As Products

Set products1 = prd1.Products

 

For iNoeud = 1 To products1.count

If products1.Item(iNoeud).Products.count = 0 Then

instanciation1 = products1.Item(iNoeud).Name

nompart = 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

 

Else

Dim Prd2 As Product

Set Prd2 = products1.Item(iNoeud)

instanciation1 = Prd2.Name

nompart = Prd2.PartNumber

'MsgBox Prd2.PartNumber

'MsgBox Prd2.Name

 

Call ListePrd(Prd2)

End If

Next

 

End Function

 

Voilà pour toi, qu'en pense tu ?, est-ce que cela répond à ta question ?

Merci

Chocolat GC :P

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é