Aller au contenu

DenisHen

Membres
  • Compteur de contenus

    4 029
  • Inscription

  • Dernière visite

  • Jours gagnés

    21

Tout ce qui a été posté par DenisHen

  1. Salut @(gile)et merci pour tes conseils. Je sais, mais je fais en Lisp ce que je ne sais pas faire en VBA, et vice-versa. Je suis un vieux débutant 😉. Je suis encore d'accord avec toi, c'est plus complexe, mais j'y arriverais plus facilement, enfin je pense. Par contre, je n'arrive pas à savoir les différentes "tailles" ou "longueurs" de variable dans les quatre solutions que tu me proposes, de combien de "caractère" je dispose. Mais un fichier texte "temporaire" (que j'effacerais après son utilisation) me parait un bon compromis, mais j'ai un peu peur au temps d'accès. Encore merci à toi. Denis...
  2. Bonjour à la communauté. Je cherche à passer du texte entre du VBA et du Lisp (on est dans la section Lisp, mais dois-je aussi poster dans VBA ?). Ce texte est en fait un ou plusieurs paragraphes. Je pense que la meilleur solution est de passer par le presse-papier, éphémère et supportant n'importe quel texte. Je ne sais pas si une clef dans la base de registre serait plus appropriée, ou un (vlax-ldata le serait aussi. Ma première question sera donc porté sur vos conseils, ai-je raison de vouloir utiliser le presse papier ? Et ma deuxième : "Si oui, comment faire, tant au niveau VBA qu'au niveau Lisp ?" Bien à toi la communauté. Denis...
  3. Bonjour @didier. Je suis entièrement d'accord avec toi. J'ai fais ce petit code indépendant et temporaire pour comprendre les fonctions vl-filename. Je ne comptais pas l'utiliser plus tard. Et je l'ai partagé pour que d'autres membres puissent faire, eux aussi, leurs petits tests d'apprentissage. Bien à toi l'ami 😉.
  4. Oops, merci de me corriger 😉
  5. Salut @(gile). Mercis pour ton aide. J'ai déjà utilisé la base de registre pour mes macros (tant en Lisp qu'en VBA), mais je ne souhaitais pas l'encombrer, surtout que je ne sais pas si y accéder est plus rapide que les accès aux variables. Tu me parles des dictionnaires (et tu n'es pas le seul) sur lesquels je me suis déjà penché (légèrement) sur eux sans réellement réussir à bien les comprendre et donc, à faire quelque-chose de probant. Par contre, j'utilise très souvent les "ldata" que je maitrise un peu. Je vais tenté de progresser avec les dictionnaires, je vais regarder ça avec attention car, comme tu le précise, ils sont accessibles par tous les langages. Encore mille mercis à toi. Bien à toi et à la communauté. Denis...
  6. je viens de découvrir que même un SendCommand ne fonctionne pas : ThisDrawing.SendCommand "(setvar " & """TCModule""" & " " & """Din Da Da""" & ")" & vbCr Cette ligne n'a aucun effet... Et je découvre une chose curieuse, directement à la main en ligne de commande : Commande: (setenv "TCModule" "Variable à Bibi") "Variable à Bibi" Commande: (getvar "TCModule") nil Faut-il créer la variable avec une commande spécifique ?
  7. Bonjour à la communauté. En Lisp, j'ai créé une variable, puis, je contrôle si elle est bien là, et elle est bien là : (setenv "TCModule" "Variable à Bibi") (princ (getenv "TCModule")) Mais depuis le VBA, je n'arrive pas à y accéder, par contre, je n'ai aucun problème avec les variables système. La variable système ne me pose aucun problème : VarCad = ThisDrawing.GetVariable("FILLMODE") MsgBox VarCad 'Pas de problème Mais pas ma variable perso : VarCad = ThisDrawing.GetVariable("TCModule") J'ai une erreur en retour : "Erreur en accédant à une variable système". J'ai raté un truc ? Les variables "perso" ne sont pas considérées comme "système" ?
  8. DenisHen

    Hachures (catalogue)

    Bonjour à la communauté. Je cherche à faire une liste de toutes les hachures disponibles (pas seulement celles utilisées), pour me faire un catalogue, comme celui partagé par @lecrabe. Je n'ai rien trouvé de probant sur la toile, quelqu'un aurait une astuce ?
  9. Coucou @Luna. Merci à toi pour cette remarque très judicieuse. Effectivement, je me suis compliqué la vie, le code et certainement une relecture ultérieure moins efficace... C'est curieux, je ne fais jamais cette "erreur" en VBA et toujours en Lisp 🤔. Ton observation coule de source et est la bienvenue. J'ai partagé ce code sans tenir compte que d'autres pourraient avoir un peu de mal à le comprendre. Donc, pour les plus néophytes que moi, il doit il y en avoir un ou deux, voici le code plus simple à comprendre : ;;; ************************************* (defun c:IfFileExist ( / DWGCourant NomComp NomDwg RepDwg ExtDwg NouvExt) (princ "\nTest sur l'existance d'un fichier.") (setq DWGCourant (vla-get-activedocument (vlax-get-acad-object)) NomComp (vla-get-FullName DWGCourant) NomDwg (vl-filename-base NomComp) RepDwg (vl-filename-directory NomComp) ExtDwg (vl-filename-extension NomComp) ) ;_ Fin de setq (princ (strcat "\nNomComp : " NomComp)) (princ (strcat "\nNomDwg : " NomDwg)) (princ (strcat "\nRepDwg : " RepDwg)) (princ (strcat "\nExtDwg : " ExtDwg)) (princ "\n*******") (setq NouvExt (strcat RepDwg "\\" NomDwg ".Niv")) (princ (strcat "\nNouvExt : " NouvExt)) (if (findfile NouvExt) (princ "\nFichier trouvé") (princ "\nFichier pas trouvé") ) (princ) ) ;;; ************************************* Et ne pas oublier de déclarer les variables... Encore merci à toi Luna. Bisous. Denis...
  10. Désolé la communauté. C'est le FindFile que j'avais mal écris. Voici le bon code, s'il peut servir à quelqu'un : ;;; ************************************* (defun c:IfFileExist () (princ "\nTest sur l'existance d'un fichier.") (setq DWGCourant (vla-get-activedocument (vlax-get-acad-object)) NomComp (vla-get-FullName DWGCourant) NomDwg (vl-filename-base NomComp) RepDwg (vl-filename-directory NomComp) ExtDwg (vl-filename-extension NomComp) ) ;_ Fin de setq (princ (strcat "\nNomComp : " NomComp)) (princ (strcat "\nNomDwg : " NomDwg)) (princ (strcat "\nRepDwg : " RepDwg)) (princ (strcat "\nExtDwg : " ExtDwg)) (princ "\n*******") (setq NouvExt (strcat RepDwg "\\" NomDwg ".Niv")) (princ (strcat "\nNouvExt : " NouvExt)) (if (/= (findfile NouvExt) nil) (princ "\nFichier trouvé") (princ "\nFichier pas trouvé") ) (princ) ) Encore toutes mes excuses de t'avoir dérangé. Denis...
  11. Bonjour à la communauté. Aujourd'hui, je cherche à contrôler si un fichier existe, avant de l'ouvrir. Mon fichier dessin est : D:\Plans Maisons\Maison_S00N01G2C4_001.dwg Je cherche donc à vérifier si ce même fichier, avec une autre extension, existe : D:\Plans Maisons\Maison_S00N01G2C4_001.Niv. N'ayant rien trouvé sur le web (mal cherché probablement), je me suis rabattu sur l'aide en ligne d'AutoCAD et j'ai écris ça : (defun c:IfFileExist () (princ "\nTest sur l'existance d'un fichier.") (setq DWGCourant (vla-get-activedocument (vlax-get-acad-object)) NomComp (vla-get-FullName DWGCourant) NomDwg (vl-filename-base NomComp) RepDwg (vl-filename-directory NomComp) ExtDwg (vl-filename-extension NomComp) ) ;_ Fin de setq (princ (strcat "\nNomComp : " NomComp)) (princ (strcat "\nNomDwg : " NomDwg)) (princ (strcat "\nRepDwg : " RepDwg)) (princ (strcat "\nExtDwg : " ExtDwg)) (princ "\n*******") (setq NouvExt (strcat RepDwg "\\" NomDwg ".Niv")) (princ (strcat "\nNouvExt : " NouvExt)) (if (/= (findfile NouvExt) "") (princ "\nFichier trouvé") (princ "\nFichier pas trouvé") ) (princ) ) Je me bat avec ce Lisp depuis des heures qui me dit systématiquement que le fichier (.Niv) existe, que ce soit vrai ou non... Voici une copie de ma fenêtre Texte : Test sur l'existance d'un fichier. NomComp : D:\Plans Maisons\Maison_S00N01G2C4_001.dwg NomDwg : Maison_S00N01G2C4_001 RepDwg : D:\Plans Maisons ExtDwg : .dwg ******* NouvExt : D:\Plans Maisons\Maison_S00N01G2C4_001.Niv Fichier trouvé Commande: Si quelqu'un pouvait a une astuce, un conseil... je suis preneur.
  12. Bonjour la communauté. Je suis tombé sur ces messages, voici ce que j'utilise régulièrement en VBA pour ouvrir n'importe-quel fichier : Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" _ Alias "ShellExecuteA" (ByVal hWnd As Long, _ ByVal lpOperation As String, ByVal lpFile As String, _ ByVal lpParameters As String, ByVal lpDirectory As String, _ ByVal nShowCmd As Long) As Long Document = "C:Exemple\.....\Fichier.ext" Result = ShellExecute(0&, vbNullString, Document, vbNullString, vbNullString, vbNormalFocus) Pour les macros, seul le DIESEL fonctionne sous LT. Les autres (Lisp, VBA...) ne fonctionneront pas, même si elle sont lancées par un script.
  13. Maintenant que personne en connait plus sur les droits légitimes de la propriété de ses développements, je fais suite au super lien d'Olivier (je ne savais pas que (gile) officiait aussi sur "developpez.com", sans en être étonné), connaissez-vous un bouquin ? Un site ? Un tuto ? Sur VS2022<->AutoCAD ? Je tiens juste à dire que tout ce que je code chez un employeur, je lui laisse toute liberté de l'utiliser tel que je l'ai codé chez lui (je lui donne même souvent des mises à jours), car je considère qu'il en a le "droit" (une sorte d'usufruit en l'état), par simple honnêteté de ma part, mais pour le code source que j'ai totalement écris, et qui n'existe que grâce à moi, j'en suis l'unique propriétaire, par moralité, car j'en suis l'unique auteur. Sur mon bulletin de salaire, il y a "dessinateur" ou métreur ou "chargé d'affaires", et non "développeur" ou "programmeur". Maintenant, j'ai toujours gardé des contactes amicaux avec mes anciens employeurs, commes avec mes anciens collègues, donc, on reste toujours en contact pour faire évoluer "mes" codes (apéros compris). On n'est pas des sauvages, tout de même (dixit le grand phylosophe Popeck)... Bien à toi la communauté. Denis...
  14. Je suis complètement d'accord avec vous... Je garde les codes car je travaille souvent chez moi et je m'en inspire beaucoup pour faire d'autres codes... Juste une petite observation, la Cour de Cassation a décidée qu "une personne morale ne peut avoir la qualité d’auteur"...
  15. Tu as encore raison. Mais le vole de la propriété intellectuelle existait bien avant l'informatique. On appelait ça le plagiat il me semble, voyons avec Aristote et Platon, déjà... De plus, s'ils comptent les vendre un jour, il me semble que j'aurais certains droits dessus, au minimum m'en informer. Après, je n'en serais pas le "propriétaire", donc... Mais j'ai toujours mes codes dans une clef USB, mon cloud, mon NAS et sur un ou deux disques durs (si ça, ce n'est pas prévoir un gros plantage mondial). Denis...
  16. Bonjour @didier. Tu as raison, j'ai trouvé dans leurs archives des Lisp de Lee Mac (que je commence à connaitre) et j'ai beaucoup de codes de (gile). Mais ces codes là, je les donnes toujours, à ceux qui en ont besoin, je donne même le liens vers la page qui contient ce code. Ainsi, ils peuvent "fouiller" le site pour voir s'il n'y a pas d'autres codes dont ils pourraient de servir. Je donne souvent aussi d'autres sites, comme le tien, pour ceux qui s'intéressent au Lisp. Et dans mes Lisp (que je compile parfois en .VLX pour être tranquille), je laisse toujours les autres .LSP dont je me sers (presque tous de (gile) et rarement de Lee Mac) dans le même répertoire et en .LSP. Je ne suis pas un voleur... 😉. Parcontre, si je trouve un Lisp dont je ne connais pas l'origine, je n'y touche généralement pas, si oui, je place un commentaire dans ce code et le laisse en .LSP. En plus, j'ai créé une page sur CadXP où j'ai partagé quelques-uns de mes Lisp. Denis.
  17. Bonjour Olivier et merci pour ton aide. pour la propriété des sources, j'en ai déjà parlé à ma direction, ce sera à elle de faire le nécessaire. Il me semble que j'avais lu, il y a pas mal de temps déjà, qu'un site existait pour déposer les sources originales, afin qu'elle puissent être protégées. Je vais me renseigner là-dessus. Encore merci à toi. Denis...
  18. Bonjour à la communauté. Comment vas-tu ? Dans ma nouvelle entreprise, on m'a demandé de faire différentes macros pour AutoCAD (compatibles avec 2011 ou 2012 jusqu'à 2023 voir plus) et d'adapter quelques-unes existantes (les miennes comme les siennes). Elle voudrait être "propriétaire" de ses codes. J'en ai donc adapté un en VBA (car il y a beaucoup de fenêtres) avec mot de passe. Mais on m'a démontré qu'en moins d'une minute, ce code était accessible à tous (le mot de passe a résisté quelques secondes). Ce que ma direction souhaite éviter. Je ne suis pas capable de tout faire en Lisp pour les compiler en VLX. En discutant avec mes nouveaux collègues, il s'avère que seule une DLL remplirait "le contrat" (sauf si vous avez d'autres solutions). Elle seront chargées automatiquement dans AutoCAD avec un NETLOAD. J'avais pensé qu'en faisant du Lisp (pour le code) qui appèleraient du VBA (pour les fenêtres) serait une autre solution. Mais je pense que ça va être une grosse galère à développer. J'ai un poste avec Visual Studio 2022 et AutoCAD 2023. J'ai déjà commencé à faire évoluer mes petites connaissances en VB6 et VBA vers le VB.NET (je sais, C# serait plus judicieux), mais je patoge un peu pour l'intéraction dans AutoCAD et aussi pour la compilation en DLL d'un projet VS. J'ai cherché beaucoup sur internet des tutos, des PDF (qui m'ont déjà bien dépoussiéré le truc)... Mais je n'ai rien trouvé de probant pour la création de DLL sous VS2022 pour les charger dans AutoCAD. On me dira que j'essai de courrir avant de savoir marcher, mais je répondrais que je sais déjà me tenir debout 😉. Ma question est donc toute simple, à part une formation (pour laquelle je me renseigne en ce moment), existe-t-il un site, un livre ou autrechose qui pourrait me venir en aide ? Bien à toi, la communauté. Denis...
  19. Coucou. Mille mercis @Luna, c'est ce dont j'avais un peu peur, car je vais utiliser cette même "phrase" depuis le Lisp autant que depuis le VBA... Mais je devrais m'en sortir, il suffit juste de savoir qui utilise cette phrase, Lisp ou VBA.. Encore merci, bisous. Denis...
  20. Bonjour à la communauté et merci pour toutes vos réponses. Je viens de faire mon premier petit test, et je suis tombé sur un petit souci sur le code de @(gile)que je ne comprends pas : Tout se code et décode bien, sauf le "\", c'est le caractère ASCII n°47, il se trouve donc dans la plage 32-255.
  21. Salut @Curlygoth. Merci pour ce lien, je viens de le lire, mais je n'ai pas trouvé le "décryptage". Ou alors, je ne l'ai pas vu... 😉
  22. Bonjour à la communauté. Un grand merci à tous de vous êtes prêtés à ce petit chalenge. (gile) a eu la bonne idée de poster son code original en F#, du coup, je me posais la question de ce que ça donnerait dans d'autre langages (VBA, C#...), car la comparaison de ces différents langages (comme le souligne judicieusement Bruno) donne sujet à réflexion, et je trouve cela très instructif. Bien à toi, la communauté. Et merci encore.
  23. Oui, effectivement @(gile), mais c'est 255-32, si qui n'allège pas beaucoup la vérification "à la main", j'en conviens... 😉
  24. Bonjour à la communauté. Je pensais que les 26 caractères ne dépendaient que d'une table par défaut que l'on pouvait "personnaliser" et de ce fait, y ajouter d'autres caractères.
  25. Salut helas. Je te propose ceci, mais je n'ai rien pour tester : (defun c:tpo (/ ent ele lst sel res tot filtre) (setq Fichier (substr (getvar "dwgname") 1 (- (strlen (getvar "dwgname")) 4))) (setq Fichier (strcat (getvar "dwgprefix") Fichier ".txt")) (setq FichierEcrit (open Fichier "a")) (write-line "Total polyligne(s) type" FichierEcrit) (setq filtre 'Layer) ; Constantwidth pour les épaisseurs, Layer pour les calques, Color pour les couleurs, Linetype pour les types de lignes (and (ssget (list (cons 0 "*POLYLINE"))) (progn (vlax-for ent (setq sel (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))) (if (setq ele (assoc (vlax-get ent filtre) lst)) (setq lst (subst (list (car ele) (cons (vla-get-length ent) (cadr ele))) ele lst)) (setq lst (cons (list (vlax-get ent filtre) (list (vla-get-length ent))) lst)) ) ;_ Fin de if ) ;_ Fin de vlax-for (vla-delete sel) (setq tot 0) (mapcar '(lambda (x) (setq tot (+ tot (setq res (apply '+ (cadr x))))) (princ "\nTotal polyligne(s) type ") (princ filtre) (prin " --> ") (princ (car x)) (princ (strcat " : " (rtos res))) (write-line (strcat "Filtre --> " (car x) " : " (rtos res)) FichierEcrit) ) ;_ Fin de lambda (vl-sort lst '(lambda (a B) (< (car a) (car B)))) ) ;_ Fin de mapcar (princ (strcat "\nTotal : " (rtos tot))) (write-line (strcat "Total : " (rtos tot)) FichierEcrit) ) ;_ Fin de progn ) ;_ Fin de and (close FichierEcrit) (princ) ) ;_ Fin de defun
×
×
  • 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é