8_pool Posté(e) le 26 mars 2008 Posté(e) le 26 mars 2008 Salut, Voila, ça fait un bout de temps que je n'ai pas de macro VB (en plus, je n'en ai pas fait beaucoup !), et j'ai un trou. J'ai une macro qui récupère le nom du matériau appliqué sur un part à l'aide la commande : sMatiere = oProduct.Parameters.Item("Matériau").Value Jusque la, pas de problème ! Sauf que maintenant, cette macro doit également fonctionner dans un environnement en anglais dans lequel le paramètre "Matériau" se nomme "Material". Je voulais donc faire un test du style : si paramètre "Matériau" existe, alors sMatiere = oProduct.Parameters.Item("Matériau").Valuesi paramètre "Material" existe, alors sMatiere = oProduct.Parameters.Item("Material").Value Et ben j'arrive pas à coder le "si paramètre existe", quel boulet !! Si quelqu'un peut me dire comment faire, ou si il a une autre méthode... Merci d'avance Ciao :cool:
jarabito Posté(e) le 8 avril 2008 Posté(e) le 8 avril 2008 hmmm, tu pourrais peut-etre passer par une detection d'erreur...CAD, essaie avec "matèriau", et juste apres fait un test pour des erreurs, si tu captes un, cherche pour "material"... Avec catia tu peux faire un: On Error Resume next sMatiere = oProduct.parameters.Item("Matériau").Value if err.number = 0 then on error goto 0 'ici tu fais rouler ta macro comme si tout marchait bien... else err.clear 'on netoye l'erreur on error goto 0 sMatiere = oProduct.parameters.Item("Material").Value end if il faudra jouer avec car je ne sais pas si ça detecte l'erreur comme ca, normalement je capte les erreurs apres les .update j'espere t'avoir aide... luis
gawel Posté(e) le 14 avril 2008 Posté(e) le 14 avril 2008 Tchô jarabito, voici une solution: ''variable pour la langue de l'environnement à mettre dans un module:Public Declare Function GetSystemDefaultLangID Lib "kernel32" () As Integer 'dans une userform, au moment de l'initialisation: Private Sub Userform_Initialize() If GetSystemDefaultLangID = 1036 Then '1036 correspond à la langue française dans l'OS sMatiere = oProduct.Parameters.Item("Matériau").Value else sMatiere = oProduct.Parameters.Item("Material").Valueend if end sub Amicalement Gawel
marc54 Posté(e) le 15 avril 2008 Posté(e) le 15 avril 2008 Non Gawel, je ne pense pas que cela va résoudre le problème. Ta manip donne la langue du système, mais pas forcément la langue dans CATIA.Dans CATIA l'utilisateur peut changer la langue dans Outils/Personnaliser. Le problème c'est que ce n'est pas un CATSettings classique, donc pas possible de le lire en macro. La gestion des erreurs est à mon avis le seul by-pass. Sinon si quelqu'un a la solution je suis aussi preneur. Marc Marc http://www.3dsys.fr
gawel Posté(e) le 21 avril 2008 Posté(e) le 21 avril 2008 Tchô, en effet, ma première solution a des lacunes. en voici une autre (testée et qui marche): Private Sub CommandButton1_Click() Dim param As ParameterDim toto As StringDim partdocument1 As PartDocumentDim Product1 As ProductDim Lparam As ParametersDim sMatiere As String Set partdocument1 = CATIA.ActiveDocumentSet Product1 = partdocument1.ProductSet Lparam = Product1.Parameters For Each param In Lparam toto = Right(param.Name, 8) If toto = "Matériau" Then sMatiere = param.ValueAsString Exit For End IfNext Unload Me End Sub
gawel Posté(e) le 24 avril 2008 Posté(e) le 24 avril 2008 ah excusez-moui, j'ai été un peu vite, après le code suivant: If toto = "Matériau" ThensMatiere = param.ValueAsStringExit For il faut ajouter: else if toto= "Material" thenSMatiere=param.ValueAsStringexit for voili voulou Gawel
8_pool Posté(e) le 14 mai 2008 Auteur Posté(e) le 14 mai 2008 Salut les gars, Et merci pour vos réponses.Je n'avais pas oublié, mais ce n'était pas de la première urgence, et avec les ponts, j'ai un peu zappé.Je vais essayer vos 2 méthodes. N'étant pas un grand sioux de VBA, je suis surpris qu'il n'existe pas une fonction qui teste l'existence d'un paramètre, ou plus généralement d'un objet, comme il peut en exister dans d'autres langages. Encore merci. Ciao :cool:
8_pool Posté(e) le 15 mai 2008 Auteur Posté(e) le 15 mai 2008 Salut, Finalement, je vais utiliser la méthode de marc54, car celle de gawel risque d'être un peu plus lente et que je sait quel paramètre je recherche. Question subsidiaire : comment faites vous pour gérer les différentes langues de Catia (je ne dois pas être le seul à faire des macros qui tournent en plusieurs langues !) ? Ciao Ciao :cool:
marc54 Posté(e) le 15 mai 2008 Posté(e) le 15 mai 2008 Salut 8_pool, La gestion de la langue fait partie de mes soucis ...Dans les collections, par exemple, je travaille avec item(numero) plutot que item("nom").Ce qui me gêne le plus en ce moment c'est le selection.search. Je me suis rendu compte que le critère de recherche peut varier suivant la langue, de la release, et du service pack !Avec la gestion des erreurs (on error resume ...), j' arrive à tester certains cas, mais cela ne me plait pas.L'idéal serait de tester la langue au début du code. Mais comment ? A+ Marc http://www.3dsys.fr
8_pool Posté(e) le 16 mai 2008 Auteur Posté(e) le 16 mai 2008 Salut Marc, Je te rejoins sur la gestion des erreurs, c'est loin d'être "élégant", même si un programme n'a pas vocation de l'être....As-tu demandé à DS s'il y a une solution ?Car j'imagine qu'il doit y en avoir une, comment ils font, eu ?? Ciao Ciao :cool:
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