eagle4 Posté(e) le 21 janvier 2006 Posté(e) le 21 janvier 2006 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
LUDWIG Posté(e) le 21 janvier 2006 Posté(e) le 21 janvier 2006 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
eagle4 Posté(e) le 21 janvier 2006 Auteur Posté(e) le 21 janvier 2006 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
Tramber Posté(e) le 21 janvier 2006 Posté(e) le 21 janvier 2006 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 ./__\. (.°=°.)
eagle4 Posté(e) le 21 janvier 2006 Auteur Posté(e) le 21 janvier 2006 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
Tramber Posté(e) le 21 janvier 2006 Posté(e) le 21 janvier 2006 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 ./__\. (.°=°.)
eagle4 Posté(e) le 21 janvier 2006 Auteur Posté(e) le 21 janvier 2006 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
eagle4 Posté(e) le 21 janvier 2006 Auteur Posté(e) le 21 janvier 2006 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
bonuscad Posté(e) le 21 janvier 2006 Posté(e) le 21 janvier 2006 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
eagle4 Posté(e) le 22 janvier 2006 Auteur Posté(e) le 22 janvier 2006 ok Bonuscad et merci. @+ eagle4 Regarde devant, derrière apporte des regrets, les côtés envies et jalousie
LUDWIG Posté(e) le 23 janvier 2006 Posté(e) le 23 janvier 2006 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
eagle4 Posté(e) le 23 janvier 2006 Auteur Posté(e) le 23 janvier 2006 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
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