Aller au contenu

Gestion de paramètres avec des macros VBA


Messages recommandés

Posté(e)

CATIA V5 - R12

 

Bonjour à tous,

 

Je cherche á piloter des paramètres utilisateurs, définissant des géométries de pièces, à l´aide de Macros VBA.

 

J´ai un problème pour détecter si un paramètre est modifiable, ou si il est déjà piloté par une formule ou une table de valeur.

 

 

Dans un environnement de travail normal, lorsque l´on clique sur des paramètres déjà piloter, leur valeur apparaît grisée et non modifiable.

 

 

En programmation, l´aide On-line de CATIA propose ceci :

 

 

Dim product1 As Product

Set product1 = CATIA.ActiveDocument.Product

 

Dim parameters1 As Parameters

Set parameters1 = product1.Parameters

 

Dim param1 As Parameter

Set param1 = parameters1.Item(1)

 

Set param1_rel = param1.OptionalRelation

 

MsgBox IsNull(param1_rel)

‘if false, there is no formula for the parameter

‘if right, there is a formula for the parameter

 

En effet, cela revient à détecter si l´option "optionalrelation" est valide pour le param1.

Cependant, la valeur de param1_rel qui m´est renvoyé est toujours false.

 

Quelqu´un peut-il m´en expliquer la raison ?

 

Existe-t-il à votre avis une autre solution pour détecter la présence de formule sur les paramètres à l´intérieur d´une macro VBA ?

 

Thimbous

 

 

Posté(e)

Bonjour

 

je n'ai pas de solution toutes faites qui pourrait vous aider mais je me demandais si vous aviez fait des recherches dans la doc de catia qui se trouve dans \Dassault Systemes\B10\intel_a\code\bin même si elle est relativement mal faites enfin je trouve elle se révèle utile dans bien des situations.

 

Si vous l'avez déjà utilisez et que vous n'avez pas trouvez ce qu'il vous fallait je veux bien essayer de répondre à votre problème mais il me faudrait plus de détail pour cela.

 

Enael

Posté(e)

Bonjour,

 

Merci de m´avoir répondu.

 

J´ai effectivement deja regardé dans l´aide Online Catia V5R10 et V5R12.

Je me suis permis de faire une petit macros pour mieux expliquer mon problème.

 

Ai-je oublié de définir quelque chose ?

Ai-je mal compris le sens des méthodes ?

Si c´est le cas, existe-t-il d´autres méthodes qui puissent donner les résultats attendus ?

 

A bientot

 

Xavier

 

-----------------------------------------------------------------------

 

Sub CATMain()

 

Dim product1 As Product

Set product1 = CATIA.ActiveDocument.Product

 

' Product1 n´a rien de complexe. C´est pour l´instant deux simples cubes

' Les dimensions du second cube sont déduites de celles du premier.

 

'Je prends un paramètre utilisateur au hasard, en le definissant ainsi

 

A = InputBox("No du paramètre")

 

Dim Param1 As Parameter

Set Param1 = product1.Parameters.Item(CInt(A))

 

' Je cherche à différencier trois types de paramètres utilisateurs : les parmètres libres, dont on peut changer la valeur, les paramètres verrouillés par l´utilisateur, et les paramètres dont la valeur est le résultat d´une formule.

 

MsgBox Param1.Name

MsgBox Param1.ReadOnly 'dit si un paramètre peut-etre modifier.(provient de l´aide Online CATIA)

'Valeurs attendues

' paramètres utilisateur libres : False

' paramètres utilisateur verrouillés : True

' paramètres utilisateur dont la valeur est le résultat d´une formule : False

 

Dim rel1 As Relation

Set rel1 = Param1.OptionalRelation 'dit ou affiche si une relation peut-etre utiliser pour calculer un paramètre (provient de l´aide Online CATIA)

 

MsgBox IsNull(rel1)

'Valeurs attendues

' paramètres utilisateur libres : True

' paramètres utilisateur verrouillés : True

' paramètres utilisateur dont la valeur est le résultat d´une formule : False

 

' Le problème est : pour les deux dernières boites de dialogue, je recois toujours la valeur False

 

End Sub

 

Posté(e)

dsl mais je ne vosi pas vraiment ce qui pourrait créer un problème dans la macro que vous avez laissé sur le forum sauf peut etre avec le cInt(A) c'est tout mais encore je ne pense pas que ca crée des problèmes.

Dès que j'aurai un peut plus de temps je me pencherai plus en profondeur sur votre pb mais pour le moment je ne peux pas vous en dire plus

 

Enael

Posté(e)

Bonjour à tous,

 

Bon j´ai trouvé une réponse partielle ... à la question que je me posais.

Je vous livre une solution peut-etre un peu trop simple.

 

 

'Au lieu d´utiliser la fonction IsNull

'MsgBox IsNull(rel1)

 

'On utilise la detection d´erreur

 

On Error Resume Next

co = rel1.Name

 

If Err = 0 Then

MsgBox "True"

MsgBox co

Else

MsgBox "False"

End If

 

 

Voila. Simplement.

 

Par contre, si quelqu´un peut m´aider pour utiliser la deuxième fonction, Readonly, cela me rendrait bien service ...

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é