Aller au contenu

VBA CATIA - Renommer les instances


Chyps

Messages recommandés

Bonjour,

je suis en train d'écrire une macro qui renomme toutes les instances dans un CATProduct.

 

J 'arrive très bien à le faire pour les instances sous le niveau le plus haut (c'est à dire les pièces, composants ou produits directement sous la tête d'arboressance) mais pas pour les niveaux inférieurs (exemple: une pièce d'un composant du produit de tête).

 

Est-ce que quelqu'un a une idée, une piste?

 

 

Plus concrètement, voici un exemple d'arboressance avec le code que j'utilise:

Format D 'affichage de l'arbre ci-dessous: PartNumber [instance]

 

Product1

|-Part1 [instancePiece1]

|-Part2 [instancePiece2]

|-Product2 [instanceAsy2] => CATProdut ou Composant, c'est pareil.

| |-Part3 [instancePiece3]

| |-Part4 [instancePiece4]

|-Part5 [instancePiece5]

 

Dim prodProduitATraiter As Product

Sub CATMain()
   'Travailler avec le document actif dans CATIA, ici le produit "Product1"
   Set prodProduitATraiter = CATIA.ActiveDocument.Product
   
   'Renommer l'instance "InstancePiece1" de la pièce "Part1" en "Part1.1"
   prodProduitATraiter.Products.Item(1).Name = "Part1.1"   'Fonctionne très bien
   
   'Renommer l'instance d'un niveau inférieur, l'instance "InstancePiece3" de la pièce "Part3" en "Part3.1"
   prodProduitATraiter.Products.Item(3).Products.Item(1).Name = "Part3.1"   'Ne fonctionne pas du tout, comme si rien ne se passé.
   
   'alors que le renommer en "InstancePiece4" (chose interdit par CATIA d'avoir deux instances indentiques sous le même niveau) génère bien une erreur.
   prodProduitATraiter.Products.Item(3).Products.Item(1).Name = "InstancePiece4"
   '(L'erreur se produit sur la R20 et pas sur la R17).
   'Erreur: Run-time error '-2147467259 (80004005)':
   '        La méthode Name a échoué
End Sub

 

Pour info:

prodProduitATraiter.Name = "Product1"

prodProduitATraiter.Products.Item(1).Name = "InstancePiece1"

prodProduitATraiter.Products.Item(1).PartNumber = "Part1"

prodProduitATraiter.Products.Item(2).Name = "InstancePiece2"

prodProduitATraiter.Products.Item(2).PartNumber = "Part2"

prodProduitATraiter.Products.Item(3).Name = "InstanceAsy2"

prodProduitATraiter.Products.Item(3).PartNumber = "Product2"

prodProduitATraiter.Products.Item(3).Products.Item(1).Name = "InstancePiece3"

prodProduitATraiter.Products.Item(3).Products.Item(1).PartNumber = "Part3"

prodProduitATraiter.Products.Item(3).Products.Item(2).Name = "InstancePiece4"

prodProduitATraiter.Products.Item(3).Products.Item(2).PartNumber = "Part4"

prodProduitATraiter.Products.Item(4).Name = "InstancePiece5"

prodProduitATraiter.Products.Item(4).PartNumber = "Part5"

 

 

Comment renommer une instance d'un niveau inférieur?

 

Merci davance,

Chyps

Lien vers le commentaire
Partager sur d’autres sites

  • 4 semaines après...
  • 1 mois après...

Bonjour Chyps,

 

Pour renommer une arbo complète et descendre dans tous les niveaux enfants, il faut utiliser une procédure récursive (qui s'appelle elle-meme).

 

@+

 

Pour Alexiisc : pourquoi postes-tu une question qui n'a rien à voir avec la première ? il faut ouvrir un autre post.

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

  • 2 mois après...

Bonjour,

 

merci droopySCAT de ta réponse mais ce n'est pas la solution à mon problème mais effectivement j'ai utilisé ce type de procédé pour créer cette macro.

Comme c'est un type de procédure récursive, ce sont les mêmes lignes de code qui sont lues mais elles ne fonctionnent pas dans les niveaux inférieurs du produit.

 

Dans mon premier post, j'ai sorti la ligne qui pose problème et créé un exemple d'assemblage afin de mettre cette ligne en situation.

 

 

Je vais essayer de reformuler mon problème en ciblant exactement ce qui m'intéresse:

 

Pour cela, je vais décrire le CATProduct travaillé:

- Démarrer CATIA V5

- Fichier => Nouveau...

- Choisir "Product" puis "OK"

(Le CATProduct "Produit1" a été créé)

- Sélectionner "Produit1" dans le graph

- Insertion => Nouveau composant

(Le composant "Produit2" a été créé dans "Produit1")

- Sélectionner "Produit2" dans le graph

- Insertion => Nouvelle pièce

(La pièce "Pièce1" a été créé dans le composant "Produit2")

 

Maintenant la question est :

Comment renommer l'instance de la pièce "Pièce1" par VBA?

(Pour info: l'instance de pièce "Pièce1" est actuellement "Pièce1.1")

 

 

 

J'ai essayé de répondre avec ce code mais il ne fonctionne pas:

 

Sub CATMain()
   Dim prodProduitActif As ProductDocument
   
   Set prodProduitActif = CATIA.ActiveDocument
   prodProduitActif.Product.Products.Item(1).Products.Item(1).Name = "Instance_de_piece1_renommee"
End Sub

L'instance est toujours égal à "Pièce1.1" est non à "Instance_de_piece1_renommee"

Lien vers le commentaire
Partager sur d’autres sites

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é