lepolochon04 Posté(e) le 8 juin 2009 Posté(e) le 8 juin 2009 Bonjour, Je suis néophyte dans la programmation catia.Je cherche actuellement à créer une macro catia capable d'enregistrer un product et tous ses composants (part et product) à un endroit précis. Mon but est d'automatiser la création de plusieurs puis l'instanciation de composants issus d'un même modèle mais paramétrés différemment (en l'occurence des postes d'assemblage sur une ligne de production). Je bloque actuellement sur l'enregistrement des catpart et catproduct.Voici où j'en suis: Sub CATMain() Dim productDocument1 As ProductDocumentSet productDocument1 = CATIA.ActiveDocument nomrep = "E:\bibliotheque\" & productDocument1.Product.PartNumberMkDir nomrep For Each ProductDocument In CATIA.DocumentsDim produit As ProductSet produit = ProductDocument.ProductOn Error Resume Nextproduit.saveas "E:\bibliotheque\" & produit.PartNumber & ".catproduct"Next End Sub Le problème est que d'une part cette macro ne marche pas et de l'autre qu'elle ne prend pas en compte les catpart.J'ai entendu parler de la fonction exportdata, cela marcherait-il? Merci de votre aide. Paul
cacao421 Posté(e) le 11 juin 2009 Posté(e) le 11 juin 2009 La méthode SaveAs prend en paramètre un objet de type Document et non un objet de type Product.Essayez avec un truc du style : ProductDocument.saveas "C:\tmp\test\" & ProductDocument.NameL'extension étant incluse dans le ProductDocument.Name, cette métode marchera à la fois pour les CATPart et CATProduct.Vous pouvez aussi récupérer l'extension du fichier sur le ProductDocument.Name à l'aide des fonctions de manipulations de chaines de VBScript et construire le nom de fichier avec le PartNumber + extension. Vous devrez alors faire ProductDocument.saveas "C:\tmp\test\" & NomDeFichier La méthode ExportData est plutôt à utiliser dans le cas où vous voudiez enregister un CATPart en tant que wrl par exemple. Bonne continuation,
lepolochon04 Posté(e) le 11 juin 2009 Auteur Posté(e) le 11 juin 2009 Merci beaucoup pour l'astuce.J'avais déjà avancé sur le sujet, avec des boucles du type: For Each PartDocument In CATIA.Documents On Error Resume Next PartDocument.ExportData nomrep & "\" & PartDocument.Product.PartNumber & ".CATPart", "CATPart"Next For Each ProductDocument In CATIA.Documents On Error Resume Next ProductDocument.ExportData nomrep & "\" & ProductDocument.Product.PartNumber & ".CATProduct", "CATProduct"Next Cette boucle permétait de sauter les erreurs d'enregistrements des products en part et inversement, même si, en soit elle n'était pas très belle... Ce que tu m'as dit semble fonctionner, à un détail près:je n'arrive pas à changer le "productdocument.name", qui ne semble pas correspondre au product.partnumber. En effet, effectuant plusieurs changements de partnumber et plusieurs enregistrements à la suite, dans une boucle, les product.name sont similaires aux noms de fichier du départ Cela doit provenir des multiples confusions que je fais entre les productdocument, les product, les products....c'est pas trop clair dans ma tête... Sinon, au cas où, pour récupérer l'extension d'un product ou part: ext = ProductDocument.Nameext = StrReverse(ext)o = InStr(1, ext, ".")ext = Left(ext, o - 1)ext = StrReverse(ext) Merci pour l'aide!
morain Posté(e) le 11 juin 2009 Posté(e) le 11 juin 2009 bonjour ! Ne peux-tu pas utiliser InStrRev au lieu de InStr ? Il te donnera la position du point en partant de la fin, ce qui évite de retourner deux fois ext avec StrReverse, tu utilise ensuite Right a la place de Left. Bon ça change rien mais tu gagnes deux lignes et c'est plus facile à comprendre comme ça peut être :) Bonne continuation
cacao421 Posté(e) le 11 juin 2009 Posté(e) le 11 juin 2009 Le but n'est pas de changer le "productdocument.name" mais de construire le nom du document sur le disque à partir de productdocument.name (pour l'extension) et de produit.PartNumberExemple ici avec l'extension "en dur", juste à remplacer ".CATProduct" par ext For Each ProductDocument In CATIA.Documents Dim produit As Product Dim NomDeFichier Set produit = ProductDocument.Product NomDeFichier = produit.PartNumber & ".CATProduct" ProductDocument.saveas "C:\tmp\test\" & NomDeFichier Vous allez obtenir le fichier "C:\tmp\test\PartNumber.CATProduct" A noter que "For Each PartDocument In CATIA.Documents" et "For Each ProductDocument In CATIA.Documents" sont équivalents, ce qui signifie qu'un CATPart est un ProductDocument et un CATProduct est un PartDocument !!! (je sais, c'est pas logique mais c'est comme ça...) Vous parcourez donc votre assemblage deux fois pour rien....
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