Aller au contenu

asptt9

Membres
  • Compteur de contenus

    51
  • Inscription

  • Dernière visite

Tout ce qui a été posté par asptt9

  1. Super !!! Merci beaucoup Patrick_35. Ton programme marche super bien et en plus, en passant par la version 2.1 de pdf creator, c'est beaucoup plus rapide car on enregistre directement le fichier sans passer par l'interface de pdf creator. Encore merci.
  2. Bonjour, Je viens d'installer la dernière version de PDF Creator (2.1) sur un PC tout neuf et le Lisp de Patrick_35 ne fonctionne plus... Il renvoie l'erreur erreur: type d'argument incorrect: VLA-OBJECT nil apparemment à la ligne Savez vous de quoi ça peut venir ? Au pire je peux essayer de retrouver une version plus ancienne de PDF Creator. Merci par avance.
  3. Salut, Merci pour ta réponse. Petite question: ça marcherais aussi dans le cas ou l'élément qu'on cherche est variable (x par exemple) et la liste est variable aussi (lst par exemple). On écrirait alors: (member 'x 'lst) ?
  4. J'ai oublié de préciser, les éléments de la liste sont des entiers.
  5. Bonjour à tous, J'aimerais savoir s'il est possible de détecter un élément à l'intérieur d'une liste en lisp... Soit une liste (a b c d e) si je cherche c la fonction me retourne T, par contre si je cherche f la fonction me retourne NIL. Merci par avance.
  6. Pour info, Je ne sais pas si la synthaxe est correcte mais j'ai réussi à faire ce que je voulais avec les lignes suivantes : (setq acc (vlax-create-object "Access.Application")) (vlax-put acc 'visible :vlax-true) (setq mdb (vlax-invoke acc 'opencurrentdatabase "Z:\\Travaux partagés\\Dessin\\INDICE\\Indice_2003.mdb")) Encore merci pour votre aide.
  7. Je vais regarder tout ça. Merci.
  8. Salut, En fait je cherche juste un bout de code qui me permette d'ouvrir une base de données Microsoft access. Lorsque je travaille sous autocad, je travaille sur une commune. Dans chaque dessin, il y a une commune différente (il peut aussi y avoir plusieurs communes dans un même dessin). J'ai donc une base de données accès qui me permet de créer un fichier texte incluant le nom de commune et plusieurs infos relatives à cette même commune. Sous autocad, je récupère ces infos via le bout de code suivant afin de pouvoir les intégrer dans les blocs dès leur insertion. (Defun commune_syndicat (/) (setq filtex "C:/Mes documents/Commune_Syndicat.txt") (setq x (open filtex "r") ct 0 ) (Setq llisttxt nil) (While (Setq exte (read-line x)) (Setq exte (read exte)) (Setq llisttxt (cons exte llisttxt)) (Setq ct (+ ct 1)) ) (close x) (Setq Commune(nth 7 llisttxt)) (Setq Syndicat(nth 6 llisttxt)) (Setq District(nth 5 llisttxt)) (setq SyndicatEU(nth 4 llisttxt)) (setq cope(nth 3 llisttxt)) (setq cope2(nth 2 llisttxt)) (setq copeeu(nth 1 llisttxt)) (setq copeeu2(nth 0 llisttxt)) ) Le problème est que si j'oublie de renseigner ma commune dans access, tous les blocs que j'insère comporte les mauvais renseignement dans leurs attributs. Je veux donc faire un lisp qui me demande si la commune renseignée correspond à la commune sur laquelle je travaille afin d'éviter toute erreur. Je demande qu'il m'affiche un volet "Vous êtes sur la commune de (commune renseignée par access), est-ce la bonne?" Si je répond "oui", le volet se ferme. si je répond "non", je voudrais qu'il aille m'ouvrir directement la base de données access qui me permet de modifier la commune. Pour l'instant, j'ai juste écris un bout de code qui m'alerte au démarrage mais je ne sais pas comment le compléter pour qu'il aille ouvrir le fichier access (dont le chemin est : Z:\Travaux partagés\Dessin\INDICE\Indice_2003.mdb)si je répond "non". J'espère que vous avez pu comprendre, en tout cas merci du temps que vous me consacrez.
  9. Bonjour, Je suis sous windows XP SP3 (32 bits) avec autocad map 3d 2014.
  10. Je viens d'essayer et ça ne marche pas, ni via le lisp, ni en passant par la connexion des données d'autocad...
  11. Le problème, c'est que mon fichier access contient des macros qui me permettent justement d'exporter des fichiers textes (réimportés dans autocad ensuite). Je crains fort qu'au format .csv ces macros ne soient plus disponibles...
  12. Bonjour Patrick_35, Je n'y connais pas grand chose (si ce n'est rien) dans ce type de procédure, d'où cette question: Est-on obligé de se connecter par ADO pour simplement ouvrir un fichier access ? Mon but étant simplement d'ouvrir ce fichier sans forcément y lier des données. N'y a t-il pas une procédure plus "simple" ?
  13. Oui, j'ai essayé mais ça me renvoie la même erreur...
  14. Aparemment ça vient de la ligne suivante : (vlax-invoke-method ConnectionObject "Open" "DSN=myMDB;" "admin" "" adok-adConnectUnspecified )
  15. J'ai créé la source de données système myMDB comme dans le lien que tu m'as donné et cette fois ci ça me met le message d'erreur suivant: ; erreur: Erreur Automation [Microsoft][Pilote ODBC Microsoft Access] Ressources système insuffisantes.
  16. Merci, Je viens de tester le programme après avoir pris soin de changer les chemins d'accès. Mais ça ne marche pas, quand je l'execute il me met le message suivant dans la ligne de commande : "; erreur: Erreur Automation [Microsoft][Gestionnaire de pilotes ODBC] Source de données introuvable et nom de pilote non spécifié". Sait tu de quoi ça peut venir ?
  17. Bonjour, J'ai lu sur ce forum qu'il était possible d'ouvrir un fichier excel avec visuallisp. Est-il possible d'en faire autant avec microsoft access ? Si oui comment faire pour ouvrir le fichier "test" qui se trouve sur le répertoire c: par exemple ? Merci par avance.
  18. Merci beaucoup VDH-Bruno, grâce à toi je vais gagner beaucoup de temps. Voici le programme final qui me permet de zoomer sur un bloc dont la valeur des étiquettes est égale à celle que l'on renseigne en début de programme: (defun c:zoomnum (/ lstTagAtt doc ss1 ss2 inclu-p) (vl-load-com) (setq numg (getstring "Quel est le numéro à rechercher ?") commune (getstring "Quelle est la commune à rechercher ?") ) (or commune (setq commune "")); au cas ou elle n'est pas définie (or numg (setq numg "")); au cas ou elle n'est pas définie (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)) ss2 (ssadd) lstTagAtt (list (cons "COMMUNE" commune) (cons "NUMGEOREF" numg))) ;; Définition de la zone de sélection (ssget "_X" (list '(0 . "INSERT") '(66 . 1))) ;; Prédicat d'inclusion d'une liste l1 dans une autre liste l2 (defun inclu-p (l1 l2) (cond ((null l1) t) ((member (car l1) l2) (inclu-p (cdr l1) l2)) (t nil) ) ) ;; Filtrage de la sélection (vlax-for b (setq ss1 (vla-get-ActiveSelectionSet doc)) ;; vérifie que les critères de filtres liste (Tag .Val) sont compris dans le bloc (if (inclu-p lstTagAtt ;; Liste les couples (Tag .Val) de la référence de bloc (mapcar '(lambda (x) (cons (vla-get-TagString x) (vla-get-TextString x))) (vlax-invoke b 'GetAttributes) ) ) (ssadd (vlax-vla-object->ename B) ss2) ) ) (vla-delete ss1) (sssetfirst nil ss2) (zsel) (command) (princ) ) (defun zsel (/ ss lst minpt maxpt) (vl-load-com) (or *acad* (setq *acad* (vlax-get-acad-object))) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*))) (if (setq ss (ssget "_I")) (progn (vla-StartUndoMark *acdoc*) (vlax-for o (setq ss (vla-get-ActiveSelectionSet *acdoc*)) (vla-getBoundingBox o 'minpt 'maxpt) (setq lst (cons (vlax-safearray->list minpt) (cons (vlax-safearray->list maxpt) lst))) ) (vla-ZoomWindow *acad* (vlax-3d-point (apply 'mapcar (cons 'min lst))) (vlax-3d-point (apply 'mapcar (cons 'max lst))) ) (vla-EndUndoMark *acdoc*) ) ) (princ) ) Un grand merci à toi VDH-Bruno.
  19. Merci beaucoup VDH-Bruno, J'ai testé ton programme et il fonctionne parfaitement. Cependant il reste trop général par rapport à ce que je souhaitais, en fait seul les deux étiquettes NUMGEOREF et COMMUNE m'intéressent. Le fait d'aller les sélectionner dans une liste déroulante me fait perdre pas mal de temps... En fait je connais déjà les valeurs que je vais rechercher dans les étiquettes COMMUNE et NUMGEOREF, je les récupère précédemment via un petit programme lié à un fichier texte généré par une base de donnée ACCESS. Les valeurs sont stockées dans les variables commune pour l'étiquette COMMUNE et numg pour l'étiquette NUMGEOREF. En fait, je voudrais qu'en cliquant sur le bouton pour appliquer la commande, la sélection se fasse toute seule sans que je n'ai à réintervenir. Est-ce possible ? Si oui, peut-être peux-tu me guider pour que j'essaye de le faire tout seul parce que pour le moment tu fais tout à ma place...(précision: je suis débutant en LISP) En tout cas merci beaucoup pour le temps que tu me consacre. PS: je garde ton programme dans un coin car il peut être très utile pour une recherche précise.
  20. Bonjour, N'y a t-il pas un logo sur ton cartouche ? Si l'image de référence provient d'un autre ordinateur, il ne retrouve peut-être pas le chemin d'accès.
  21. J'ai déjà testé le programme ssatt de (gile) mais je n'arrive pas à la faire fonctionner... Il me demande l'attribut source et je ne comprends pas bien ce que c'est... Du coup j'ai trouvé un programme qui me permet de faire une sélection par attribut que j'ai légèrement modifié pour que la sélection se fasse toujours avec le même attribut mais je ne sais pas comment faire pour faire une sélection selon deux attributs en même temps... Voici le bout de code dont je me sert: (defun c:ssnum (/ att elst tag val ss1 ss2 n ent) (setq numg (getstring "quel est le numéro géoréférencé à rechercher ?")) (and (setq att "NUMGEOREF") (if (or (= att "") (= att " ")) (and (setq att (car (nentsel "\nSélectionnez l'attribut source: "))) (= (cdr (assoc 0 (setq elst (entget att)))) "ATTRIB") (setq tag (cdr (assoc 2 elst)) val (cdr (assoc 1 elst)) ) ) (setq tag (strcase att) val numg ) ) (setq ss2 (ssadd)) (setq ss1 (ssget "_X" '((0 . "INSERT") (66 . 1)))) (repeat (setq n (sslength ss1)) (setq ent (ssname ss1 (setq n (1- n))) att (entnext ent) ) (while (= (cdr (assoc 0 (setq elst (entget att)))) "ATTRIB") (if (and (= (cdr (assoc 2 elst)) tag) (= (cdr (assoc 1 elst)) val) ) (ssadd ent ss2) ) (setq att (entnext att)) ) ) (sssetfirst nil ss2) ) (princ) ) Avec ce programme je sélectionne tous les blocs dont l'étiquette d'attribut NUMGEOREF correspond au numéro que j'ai renseigné. En fait ce que j'aimerais faire c'est sélectionner tous les blocs qui contiennent les étiquettes d'attributs NUMGEOREF et COMMUNE (les deux en même temps) avec les valeurs que je renseigne dans le programme.
  22. Bonjour VDH-Bruno et merci pour ta réponse, J'étais en vacances donc je n'ai pas pu répondre avant. Je viens de tester ton programme pour le zoom objet et il marche très bien donc je te remercie. Aurais-tu une idée par contre pour faire une sélection par attribut de bloc à l'intérieur d'une autre sélection (en gros filtrer une sélection courante selon un attribut donné) Merci par avance.
  23. Bonjour à tous, J'ai plusieurs blocs différents dans mon dessin qui ont des attributs communs, j'aimerais si c'est possible créer un jeu de sélection en fonction de deux de ces attributs quel que soit le nom du bloc. Ce jeu de sélection devra au final me donner qu'un seul bloc vu que les attributs concernés sont la commune (nom d'étiquette: COMMUNE) et un numéro (nom d'étiquette: NUMGEOREF) (il n'y a pas deux fois le numéro dans la même commune). Mon but étant de faire apparaitre en gros plan le bloc sélectionné. Je pense que c'est possible en lisp mais ça dépasse mes compétences... Ma commune et mon numéro sont déjà attribué aux variables commune et numg A savoir que le zoom objet ne fonctionne pas correctement sur mon poste donc si il y a moyen de le contourner pour zoomer sur le bloc au final... J'espère avoir été assez clair dans ma demande. Merci par avance.
  24. asptt9

    Zoom sur un jeu de sélection

    Peut-être aussi que le zoom objet ne marche pas bien chez moi car j'ai essayé sur un autre dessin et ça fonctionne
  25. asptt9

    Zoom sur un jeu de sélection

    Tout d'abord merci pour votre rapidité, Le problème avec le zoom objet c'est qu'il zoome de loin, j'aimerais par exemple que si il n'y a qu'un seul bloc dans ma sélection qu'il n'y ai que lui qui apparaisse à l'écran.
×
×
  • 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é