Aller au contenu

Variable \"USERS5\"


Messages recommandés

Posté(e)

Bonjour à tous

 

J'utilise un programme lisp développé par une autre personne et je n'ai pas le droit de modifier ce programme.

Ce programme Lisp crée une variable qui me serait utile dans mon programme en VBA.

 

Comment puis-je récupérer cette variable ?. (La variable du programme lisp n'est pas une des variables "User").

 

En envoyant la commande "!nomdelavariable" au clavier je vois la valeur de celle-ci mais je ne peu pas la récuperer.

 

j'ai écris en vb :

'ThisDrawing.SendCommand "(setq users5 nomdelavariable)" & vbCr

 

puis :

rep = ThisDrawing.GetVariable("users5")

 

résultat : rep=""

 

Alors que dans AUTOCAD la ligne de commande : "!users5 me retourne la valeur de la variable.

 

Je ne comprend pas pourquoi la commande ThisDrawing.GetVariable("users5") me retourne une valeur vide.

 

 

Merci de vos réponses

 

@+

 

eagle4[Edité le 21/1/2006 par eagle4]

 

[Edité le 21/1/2006 par eagle4]

Regarde devant, derrière apporte des regrets, les côtés envies et jalousie

Posté(e)

Bonjour !

 

Je ne suis pas un expert VBA, mais pourquoi justement ne pas utiliser les variable "USER" ?

 

Dans ton vba, tu peux mettre une instruction Sendcommand qui renvoit un bout de lisp dans la ligne de commande : (setvar USER1 nomdelavariable) puis utiliser USER1.

 

J'ai ensuite vu que tu as édité ton message... tu es sur la bonne piste. C'est donc juste l'instruction lisp qui ne va pas. Un setq sert à définir une nouvelle variable utilisateur. Un setvar sert à définir une variable autocad. Et dans le cas des Users, bien que ce soit des variables dites "utilisateurs", elles sont quand même existantes même si l'utilisateur ne les définie pas.

Autocad 2021 - Revit 2022 - Windows 10

Posté(e)

Bonjour ludwig et merci de me répondre.

 

Problème :

 

- je n'ai pas le droit de toucher au programme lisp qui définit la variable "nomdelavariable"

 

- Sous AUTOCAD je vois la valeur de la variable en lançant la commande au clavier : "!nomdelavariable"

- sous vb je lance la commande :"ThisDrawing.SendCommand "( setvar users5 nomdelavariable)" & vbCr

- sous AUTOCAD je lance au clavier : !users5 et le résultat est : users5=nomdelavariable. Jusque là tout va bien.

 

- Sous vb je lance la commande : rep = ThisDrawing.GetVariable ("users5") et comme réponse j'obtiens: rep=vide

 

Alors que si j'écris en vb : 'ThisDrawing.SetVariable "users5", "TOTO"

- sous AUTOCAD j'ai : users5 vide

- sous vb avec la commande : rep = ThisDrawing.GetVariable ("users5"), j'obtiens : rep="TOTO"

 

Je ne comprend plus rien, j'ai l'impression que je ne valorise pas la même variable "users5" suivant que je suis en lisp ou en vb

 

Merci de m'aider car j'y perd mon latin (et mes cheveux)

 

Cordialement

 

Eagle4

 

 

 

Regarde devant, derrière apporte des regrets, les côtés envies et jalousie

Posté(e)

Si je te lis, il faut transmettre une variable, la transformer(?), d'un environnement à l'autre. Que ca soit pour une USER ou une autre !

 

Je ne connais rien en VBA mais je sais qu'entre lisp et Vlisp il faut passer d'une safearray à un réel, par exemple et inversement. (fonction vlax-make-safearray )

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Bonjour tramber

 

Oui je dois passer une variable du lisp vers VB.

 

Ma variable est de type "string", elle représente un répertoire de travail.

 

@+

 

eagle4

Regarde devant, derrière apporte des regrets, les côtés envies et jalousie

Posté(e)

Je n'ai pas de méthode, mais si c'est cç, fait une recherche avec vlax-make-safearray et vlax-vbString dans la doc ou attend l'avis d'un expert, qui ne tardera pas à se manifester j'en suis sur.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

 

Mon pb c'est que je ne comprend pas pourquoi je n'ai pas la même réponse avec la même variable "users5" que je sois en lisp ou en vb.

 

eagle4

Regarde devant, derrière apporte des regrets, les côtés envies et jalousie

Posté(e)

Ouf il me reste encore des cheveux

 

Voici donc la solution que j'ai trouvée :

 

Private Function MonRep() As Variant

Dim commande As String

commande = "(setvar" & Chr(34) & "users5" & Chr(34) & " nomdelavariable)"

ThisDrawing.SendCommand commande & vbCr

MonRep = ThisDrawing.GetVariable("users5")

End Function

 

En fait mon erreur était de valoriser la variable "users5" par setq et non par setvar. De ce fait le lisp créait une variable "users5" qui n'a rien à voir avec la variable d'environnement. Bizarre non ?

 

C’est pour cela que j'avais 2 valeurs différentes, avec lisp la variable « users5 » créée par lui et en vb la variable environnement d'AUTOCAD.

 

Enfin je pense que c'est l'explication même s’il me parait bizarre que 2 variables puissent avoir le même nom (elles sont dans 2 environnements différents ?).

 

Voila cela peut peut-être aider d'autres personnes. Ce soir je m'endormirai soulagé.

 

@+

 

eagle4

 

Regarde devant, derrière apporte des regrets, les côtés envies et jalousie

Posté(e)

Bon tu as trouvé

Mais,

je n'ai pas le droit de toucher au programme lisp qui définit la variable "nomdelavariable"

 

Cela te t'empêche pas de le "chainer" lors de son execution.

Ex:

 

(defun c:ma_fonction_libre ( / )

;;vérifier que la fonction protégé est chargé en mémoire, si NON, on la charge

(if (not ma_fonction_protege) (load "ma_fonction_protégé"))

;;On lance l'application protégé)

(c:ma_function_protégé)

;;L'application rend la main, on sauvegade la variable dans USERS5

(setvar "USERS5" nomdelavariable)

)

 

Volià ta nouvelle fonction sans modifier l'original.

 

Tu fais ton prog VBA en relisant la variable autocad "users5"

 

Les variables d'autocad se modifie par (setvar)

Les variables (globale ou locale) de fonction lisp se définisse ou modifie par (setq)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)
En fait mon erreur était de valoriser la variable "users5" par setq et non par setvar. De ce fait le lisp créait une variable "users5" qui n'a rien à voir avec la variable d'environnement. Bizarre non ?

 

Les variables d'autocad se modifie par (setvar)

Les variables (globale ou locale) de fonction lisp se définisse ou modifie par (setq)

 

C'est ce que je disais ici depuis le début :

 

C'est donc juste l'instruction lisp qui ne va pas. Un setq sert à définir une nouvelle variable utilisateur. Un setvar sert à définir une variable autocad. Et dans le cas des Users, bien que ce soit des variables dites "utilisateurs", elles sont quand même existantes même si l'utilisateur ne les définie pas.

Autocad 2021 - Revit 2022 - Windows 10

Posté(e)

Salut ludwig

 

Tu as raison j'avais mal lu ta réponse. Merci pour ton aide

 

Cordialement

 

eagle4

Regarde devant, derrière apporte des regrets, les côtés envies et jalousie

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é