Aller au contenu

Tester l\'existance d\'un paramètre


Messages recommandés

Posté(e)

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").Value

si 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:

  • 2 semaines après...
Posté(e)

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

 

Posté(e)

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").Value

end if

 

end sub

 

Amicalement

 

Gawel

Posté(e)

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

Posté(e)

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 Parameter

Dim toto As String

Dim partdocument1 As PartDocument

Dim Product1 As Product

Dim Lparam As Parameters

Dim sMatiere As String

 

Set partdocument1 = CATIA.ActiveDocument

Set Product1 = partdocument1.Product

Set Lparam = Product1.Parameters

 

For Each param In Lparam

toto = Right(param.Name, 8)

If toto = "Matériau" Then

sMatiere = param.ValueAsString

Exit For

End If

Next

 

Unload Me

 

End Sub

 

Posté(e)

ah excusez-moui,

 

j'ai été un peu vite, après le code suivant:

 

If toto = "Matériau" Then

sMatiere = param.ValueAsString

Exit For

 

il faut ajouter:

 

else if toto= "Material" then

SMatiere=param.ValueAsString

exit for

 

voili voulou

 

Gawel

  • 3 semaines après...
Posté(e)

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:

Posté(e)

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:

Posté(e)

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+

Posté(e)

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:

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é