DenisHen Posté(e) le 1 avril 2015 Posté(e) le 1 avril 2015 Bonjour à tous, Voilà, j'ai posté un fichier Excel 2013 avec des macros qui gèrent une "charte graphique". Je créé, depuis Excel, des centaines de calques, mais lorsque la fenêtre de gestion des calques est active, çà prend un temps fou. Alors que, si elle est inactivée, les calques se créés à la vitesse de la lumière ! ! Comment désactivé cetet fenêtre et la réactivée après la macro... Je n'ai pas trouvé de "variable" dans Express Tools/System Variables et rien dans l'aide AutoCAD VBA... Merci pour l'aide, Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
-Olivier- Posté(e) le 1 avril 2015 Posté(e) le 1 avril 2015 Bonjour Denis,Tu peux déjà vérifier son ouverture avec la variable LAYERMANAGERSTATE mais elle est en lecture seule. Olivier
DenisHen Posté(e) le 1 avril 2015 Auteur Posté(e) le 1 avril 2015 Bonjour Olivier, Merci, mais c'est bien dommage çà, je voulais justement pouvoir agir dessus... Enfin je vais faire un tour dans "LAYER" et MANAGER"... On ne sait jamais... Merci encore, Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Patrick_35 Posté(e) le 1 avril 2015 Posté(e) le 1 avril 2015 Salut Avec la commande _.layerclose (fermercalque) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
DenisHen Posté(e) le 1 avril 2015 Auteur Posté(e) le 1 avril 2015 Bonjour Patrick_35, Merci pour cette commande. Je crois que je vais devoir faire avec... Dommage, j'aurai aimé réactiver cette fenêtre si elle l'était avant que je la désactive... Tanpis. Merci encore à tous, Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Patrick_35 Posté(e) le 1 avril 2015 Posté(e) le 1 avril 2015 Ben, avec la commande _.layer (calque) ps : avec un (initdia) auparavant en lisp @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
DenisHen Posté(e) le 1 avril 2015 Auteur Posté(e) le 1 avril 2015 Ok, j'avais compris, merci les gars... "_.layerclose" ferme la fenêtre"_.layer" ouvre la fenêtre... Mais comment savoir si elle est ouverte ou fermée. Tel est la question (que j'ai dû mal poser). ;) ps : avec un (initdia) auparavant en lisp Et en VBA, ça se traduit comment s'il te plait ? Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
-Olivier- Posté(e) le 1 avril 2015 Posté(e) le 1 avril 2015 Il suffit de lire la variable donnée en réponse #2. Si elle est à 0 la fenêtre est fermée. Si elle à 1 elle est ouverte. Pour le initdia , je ne connais pas le VBA. Olivier 1
Patrick_35 Posté(e) le 1 avril 2015 Posté(e) le 1 avril 2015 Et en VBA, ça se traduit comment s'il te plait ?Je suis comme Olivier, je ne connais pas le VBA, mais j'ai déjà vu des codes qui font appels à des fonctions lisp en VBA, d'où ma réponse. Un thisdrawing.sendcommand("(initdia)") ? @+ 1 Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
DenisHen Posté(e) le 1 avril 2015 Auteur Posté(e) le 1 avril 2015 Merci Olivier, je n'ai pas pensé à consulter la valeur de cette variable... Ca fonctionne nikel maintenant... la variable s'obtient avec MsgBox ThisDrawing.GetVariable("LAYERMANAGERSTATE") Merci encore, Denis... PS : "thisdrawing.sendcommand("(initdia)")" me répond "nil". Je ne sais pas quoi faire avec. ;) Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Patrick_35 Posté(e) le 1 avril 2015 Posté(e) le 1 avril 2015 PS : "thisdrawing.sendcommand("(initdia)")" me répond "nil". Je ne sais pas quoi faire avec. ;)Ma réponse va se faire en lisp ;) Dans la ligne de commande, quand tu faisCommande: (command "_.layer")Tu n'as pas la boite de dialogue. Maintenant, pour la faire apparaitre, tu fais en ligne de commandeCommande: (initdia) Commande: (command "_.layer")Et miracle, le gestionnaire des calques :D @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
DenisHen Posté(e) le 1 avril 2015 Auteur Posté(e) le 1 avril 2015 Merci Patrick_35 pour ces précisions... C'est une sorte de ATTDIA pour LiSP ? Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 1 avril 2015 Posté(e) le 1 avril 2015 Salut, Attention la fonction AutoLISP command et la méthode COM SendCommand ne fonctionnent pas pareil. En LISP la fonction command appelle toujours la commande en ligne de commande (quand elle existe bien sûr).(command "_.layer") ou (command "_.-layer) appellent toutes deux la commande en ligne de commande, c'est pourquoi il faut faire un (initdia) avant si on veut forcer l'ouverture de la boite de dialogue.De plus command accepte des arguments de différents types (entiers, réels, enames, jeux de sélection etc.). SendCommand ne prend qu'une chaîne de caractère comme argument et la passe à la ligne de commande un peu comme un script et fera donc la différence entre "_layer " et "_-layer"On peut le tester en Visual LISP :(setq ThisDrawing (vla-get-ActiveDocument (vlax-get-acad-object))) (vla-SendCommand ThisDrawing "_.layer ")ouvre la boite de dialogue. (vla-SendCommand ThisDrawing "_.-layer ")passe en ligne de commande. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 1 avril 2015 Posté(e) le 1 avril 2015 Re, Petite subtilité, SendCommand permet d'appeler une commande définie en LISP (defun c:...) et de lui passer, "en dur", les paramètres requis. La fonction LISP suivante invite l'utilisateur à spécifier un point et dessine un cercle de rayon 10 avec le point spécifié pour centre.(defun c:cmd (/ p) (if (setq p (getpoint "\nCentre: ")) (entmake (list '(0 . "CIRCLE") (cons 10 p) '(40 . 10.0) ) ) ) (princ) )Avec SendCommand, on peut appeler "cmd" et lui passer directement un point sous forme de chaîne (ici 20,10).(vla-sendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "cmd 20,10 " ) 2 Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
VDH-Bruno Posté(e) le 1 avril 2015 Posté(e) le 1 avril 2015 Petite subtilité, SendCommand permet d'appeler une commande définie en LISP (defun c:...) et de lui passer, "en dur", les paramètres requis. J'ignorai cette petite subtilité très interessante, merci (gile) de nous la faire partager. A+ Bruno(Ps: Je me coucherai plus riche que je me suis levé, c'est ce que j'appel une bonne journée) Apprendre => Prendre => Rendre
DenisHen Posté(e) le 2 avril 2015 Auteur Posté(e) le 2 avril 2015 Un grand merci à (gile) et Patric_35 qui, une fois de plus, nous font partager leur immence savoir... Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Patrick_35 Posté(e) le 2 avril 2015 Posté(e) le 2 avril 2015 Salut Merci (gile) pour ces précisions. Avec SendCommand, on peut appeler "cmd" et lui passer directement un point sous forme de chaîne (ici 20,10).Si je résume, on utilise la syntaxe avec SendCommand comme pour un script. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 2 avril 2015 Posté(e) le 2 avril 2015 Si je résume, on utilise la syntaxe avec SendCommand comme pour un script. Exactement, c'est ce que je disais dans ma première réponse. C'est la même chose en .NET avec la méthode Document.SendStringToExecute() dont le nom est plus explicite. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 2 avril 2015 Auteur Posté(e) le 2 avril 2015 Ok, on aura donc :ActiveDocument.SendCommand("-calque e NouveauCalque ")Ou plutôt ActiveDocument.SendCommand("-calque" & "e" & "NouveauCalque" & "")Mais peut-on utiliser les ";" entre chaque instruction ? Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
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