Aller au contenu

Curlygoth

Membres
  • Compteur de contenus

    813
  • Inscription

  • Dernière visite

  • Jours gagnés

    7

Tout ce qui a été posté par Curlygoth

  1. 👍
  2. heu non mais tu peux geler directement dans le dessin tu dois avoir tous les calques du fichier en reference
  3. pour les vues google => j'utilise l'emplacement géographique 😉 et j'automatise les prise de vues de l'emprise dont j'ai besoin : https://www.youtube.com/watch?v=B0hFYuIgHAA&t=50s
  4. alors met les en référence ^^ tu n'aurais plus de problème ^^
  5. avec un peu de programmation on peut faire ça : https://www.youtube.com/watch?v=j3jWlFGDsFc
  6. ben completement ! sauf que tu monte vers Autocad ! et que tu ne descends pas vers tes données (ta base).... donc c'est pas tout a fait pareil ^^ la ou pour créer un calque dans excel tu vas avoir besoin de déclarer l'objet puis le fichiers puis le calque dans autocad tu fais QUE le calque ! Pour la BDD c'est toi qui choisi ! si tu veux faire du excel avant de faire de la BDD tu peux et tu verras : c'est vachement plus facile ! mais pour les BDD pour beaucoup faut passé par SQL... Ajout de la librairie Microsoft ADO Ext. X.X dor ddl and Security Les 2 premiers blocs dans module SYS_SQL et tu verras même si je ne connais pas tout en SQL je fais plein de chose avec ça : Je t'invite à te renseigner sur le module et le fonctionnement ADO pour comprendre le code tu verras, il n'est pas compliqué au final Content d'être là 😉 Function CHAMPS_ID() CHAMPS_ID = "N°" End Function Function TXT_OR_NUM(Valeur) On Error Resume Next Z = CDbl(Valeur) If Err.Number = 0 Then TXT_OR_NUM = Valeur Else TXT_OR_NUM = "'" & Valeur & "'" End If On Error GoTo 0 End Function Function AJOUT_CHAMP_ID_A_LA_LISTE(LISTE_CHAMPS) Dim TAB_LISTE() As Variant MAX_LISTE = UBound(LISTE_CHAMPS) + 1 ReDim Preserve TAB_LISTE(MAX_LISTE) For NUMERO_DE_LA_LISTE = LBound(LISTE_CHAMPS) To MAX_LISTE If NUMERO_DE_LA_LISTE = 0 Then TAB_LISTE(NUMERO_DE_LA_LISTE) = CHAMPS_ID Else TAB_LISTE(NUMERO_DE_LA_LISTE) = LISTE_CHAMPS(NUMERO_DE_LA_LISTE - 1) End If Debug.Print TAB_LISTE(NUMERO_DE_LA_LISTE) Next NUMERO_DE_LA_LISTE AJOUT_CHAMP_ID_A_LA_LISTE = TAB_LISTE End Function Function AJOUT_NUMERO_ENREGISTREMENT_A_LA_LISTE(LISTE_VALEUR, NUMERO_ENREGISTREMENT) Dim TAB_LISTE() As Variant MAX_LISTE = UBound(LISTE_VALEUR) + 1 ReDim Preserve TAB_LISTE(MAX_LISTE) For NUMERO_DE_LA_LISTE = LBound(LISTE_VALEUR) To MAX_LISTE If NUMERO_DE_LA_LISTE = 0 Then TAB_LISTE(NUMERO_DE_LA_LISTE) = CInt(NUMERO_ENREGISTREMENT) Else TAB_LISTE(NUMERO_DE_LA_LISTE) = LISTE_VALEUR(NUMERO_DE_LA_LISTE - 1) End If Debug.Print TAB_LISTE(NUMERO_DE_LA_LISTE) Next NUMERO_DE_LA_LISTE AJOUT_NUMERO_ENREGISTREMENT_A_LA_LISTE = TAB_LISTE End Function Dim enr As Recordset Dim base As Database Dim UsF As Object Dim TAB_VAL() As String Function LISTING_DU_CHAMP(CHEMIN_FICHIER_BDD, NOM_TABLE, NOM_CHAMP) Set base = DBEngine.OpenDatabase(CHEMIN_FICHIER_BDD) Set enr = base.OpenRecordset("SELECT DISTINCT `" & NOM_CHAMP & "` FROM `" & NOM_TABLE & "`ORDER BY `" & NOM_CHAMP & "` ASC") d = enr.RecordCount - 1 If d = -1 Then LISTING_DU_CHAMP = "" GoTo fin: Else End If ReDim TAB_VAL(d) ITE = 0 enr.MoveFirst Do TAB_VAL(ITE) = enr.Fields(NOM_CHAMP).Value ITE = ITE + 1 enr.MoveNext Loop Until enr.EOF = True enr.Close LISTING_DU_CHAMP = TAB_VAL fin: base.Close Set enr = Nothing Set base = Nothing End Function Function RESULTAT_LIRE(CHEMIN_FICHIER_BDD, NOM_TABLE, NOM_CHAMP_DEP, VALEUR_CHAMP_DEP, NOM_CHAMP_RETOUR) 'Retourne une liste !!!! CHEMIN_FICHIER_BDD = CHEMIN_BDD(CHEMIN_FICHIER_BDD) Set base = DBEngine.OpenDatabase(CHEMIN_FICHIER_BDD) If NOM_CHAMP_RETOUR = "" Then NOM_CHAMP_RETOUR = "*" Else End If REQUETE = "SELECT DISTINCT `" & NOM_CHAMP_RETOUR & "` FROM `" & NOM_TABLE & "` WHERE `" & NOM_CHAMP_DEP & "` = " & SYS_SQL.TXT_OR_NUM(VALEUR_CHAMP_DEP) Debug.Print REQUETE Set enr = base.OpenRecordset(REQUETE) d = enr.RecordCount - 1 If d = -1 Then ReDim TAB_VAL(0) TAB_VAL(0) = -1 RESULTAT_LIRE = TAB_VAL GoTo fin: Else End If ReDim TAB_VAL(d) ITE = 0 enr.MoveFirst Do TAB_VAL(ITE) = enr.Fields(NOM_CHAMP_RETOUR).Value 'On ajoute 1 pour la ligne de la liste et On bouge 1 pour l'enregsitrement ITE = ITE + 1 enr.MoveNext Loop Until enr.EOF = True RESULTAT_LIRE = TAB_VAL fin: enr.Close Set enr = Nothing base.Close Set base = Nothing End Function Function ENTREE_DONNEE(CHEMIN_FICHIER_BDD, NOM_TABLE, LISTE_CHAMPS, VALEUR_CHAMPS, N_ENR) Dim LISTE_CHAMPS_SQL As String Dim VALEUR_CHAMPS_SQL As String If UBound(LISTE_CHAMPS) <> UBound(VALEUR_CHAMPS) Then MsgBox "Le nombre de champs n'est pas égale au nombre de valeur" Exit Function Else End If If LBound(LISTE_CHAMPS) = UBound(LISTE_CHAMPS) Then LISTE_CHAMPS_SQL = "(" & SYS_SQL.CHAMPS_ID & "," & LISTE_CHAMPS(LBound(LISTE_CHAMPS)) & ")" VALEUR_CHAMPS_SQL = "(" & N_ENR & "," & VALEUR_CHAMPS(LBound(VALEUR_CHAMPS)) & ")" Else LISTE_CHAMPS_MODIF = SYS_SQL.AJOUT_CHAMP_ID_A_LA_LISTE(LISTE_CHAMPS) VALEUR_CHAMPS_MODIF = SYS_SQL.AJOUT_NUMERO_ENREGISTREMENT_A_LA_LISTE(VALEUR_CHAMPS, N_ENR) For L_v = LBound(LISTE_CHAMPS_MODIF) To UBound(LISTE_CHAMPS_MODIF) If L_v = LBound(LISTE_CHAMPS_MODIF) Then test = VALEUR_CHAMPS_MODIF(L_v) LISTE_CHAMPS_SQL = "(" & LISTE_CHAMPS_MODIF(L_v) & "," VALEUR_CHAMPS_SQL = "(" & SYS_SQL.TXT_OR_NUM(VALEUR_CHAMPS_MODIF(L_v)) & "," Else If L_v = UBound(LISTE_CHAMPS_MODIF) Then LISTE_CHAMPS_SQL = LISTE_CHAMPS_SQL & LISTE_CHAMPS_MODIF(L_v) & ")" VALEUR_CHAMPS_SQL = VALEUR_CHAMPS_SQL & SYS_SQL.TXT_OR_NUM(VALEUR_CHAMPS_MODIF(L_v)) & ")" Else LISTE_CHAMPS_SQL = LISTE_CHAMPS_SQL & LISTE_CHAMPS_MODIF(L_v) & "," VALEUR_CHAMPS_SQL = VALEUR_CHAMPS_SQL & SYS_SQL.TXT_OR_NUM(VALEUR_CHAMPS_MODIF(L_v)) & "," End If End If Next L_v End If Set base = DBEngine.OpenDatabase(CHEMIN_FICHIER_BDD) REQUETE = "INSERT INTO " & NOM_TABLE & " " & LISTE_CHAMPS_SQL & " VALUES " & VALEUR_CHAMPS_SQL & ";" Debug.Print REQUETE base.Execute REQUETE base.Close Set base = Nothing End Function Function RECUP_NOM_CHAMPS(CHEMIN_FICHIER_BDD, NOM_TABLE) Dim fld As Field Dim tdf As TableDef Dim TAB_CHAMP() C = 0 Set base = DBEngine.OpenDatabase(CHEMIN_FICHIER_BDD) Set tdf = base.TableDefs(NOM_TABLE) For Each fld In tdf.Fields ReDim Preserve TAB_CHAMP(C) TAB_CHAMP(C) = fld.Name C = C + 1 'Debug.Print "Champ " & fld.Name Next fld RECUP_NOM_CHAMPS = TAB_CHAMP base.Close Set base = Nothing End Function Function RECUP_NOMBRE_ENR(CHEMIN_FICHIER_BDD, NOM_TABLE) Dim tdf As TableDef Set base = DBEngine.OpenDatabase(CHEMIN_FICHIER_BDD) Set tdf = base.TableDefs(NOM_TABLE) RECUP_NOMBRE_ENR = tdf.RecordCount base.Close Set base = Nothing End Function
  7. moi oui, c'est le principe que j'appelle vulgairement : "Tout est OBJET"
  8. Curlygoth

    Symboles PMR alternatifs Décathlon

    A content de cette nouvelle ! Enfin une reconnaissance pour ces personnes !
  9. Curlygoth

    Etat de calque

    Mes calques se masquent à la générations des présentations sinon je n'aurais pas fini... Après si je dois afficher/masquer des calques pour certaines présentations je peux le faire apres aussi c'est pas un probleme... mais pas a chaque génération de calque... j'ai l'algorithme qui va masqué des calques en auto (masqué les menuiseries pour la présentations du plan de coffrage par exemple) + une bdd + une liste que je peux alimenter via objets sélectionnés en gros faire du dynamique c'est possible. mais bon tu vas boucler un peu voir trop souvent sur les présentataions (mieux vaut un bouton à appuyer une fois le traitement fait) enfin c'est mon avis et c'est ce que je fais
  10. Curlygoth

    Etat de calque

    Je l'ai fait ! ... mais comme dit didier : par programmation. j'ai un formulaire ou je peux sélectionner des calques (ou les calques d'objets) et j’enregistre la liste dans une BDD. et quand je génères les présentations et le cartouche ça génère aussi la fenêtre et ca masque les calques de la BDD.
  11. ben il y a un code en lisp qui fait ça : (ça extrait le code de la ligne) (defun c:model_typline ( / ent ent_dxf nam_tl def_tl prec m_adir m_abas nam_lin def_lin nbr_lin w_line lg_tiret tp_cpx cod_shx ss_ent styl_tl file_shx scal_motif rot_motif x_motif y_motif str_motif) (setvar "cmdecho" 0) (while (not (setq ent (entsel "\nChoix du TypeLigne modèle: ")))) (setq ent_dxf (entget (car ent)) nam_tl (assoc 6 ent_dxf)) (cond ((and (cdr nam_tl) (/= (cdr nam_tl) "ByLayer") (/= (cdr nam_tl) "ByBlock")) (initget 4) (setq def_tl (entget (tblobjname "Ltype" (cdr nam_tl))) prec (getint (strcat "\nPrécision décimale désirée<" (itoa (getvar "LUPREC")) ">: ")) ) (if (not prec) (setq prec (getvar "LUPREC"))) (setq m_adir (getvar "angdir") m_abas (getvar "angbase") nam_lin (strcat "*" (cdr (assoc 2 def_tl))) def_lin (strcat "," (cdr (assoc 3 def_tl))) lg_lin (cdr (assoc 40 def_tl)) nbr_line (cdr (assoc 73 def_tl)) w_line "\nA" ) (setvar "angdir" 0) (setvar "angbase" 0) (textscr) (princ (strcat "\n" nam_lin def_lin)) (princ w_line) (while (/= (caar def_tl) 49) (setq def_tl (cdr def_tl)) ) (while def_tl (cond ((eq 49 (caar def_tl)) (setq lg_tiret (cdar def_tl)) (princ (strcat "," (rtos lg_tiret 2 prec))) ) ((eq 74 (caar def_tl)) (setq tp_cpx (cdar def_tl)) ) ((eq 75 (caar def_tl)) (setq cod_shx (cdar def_tl)) (cond ((eq tp_cpx 2) (princ (strcat ",[\"" (cdr (assoc 9 def_tl)) "\"")) ) ((eq tp_cpx 4) (princ ",[*") ) ) ) ((eq 340 (caar def_tl)) (setq ss_ent (entget (cdr (assoc 340 def_tl)))) (if ss_ent (setq styl_tl (cdr (assoc 2 ss_ent)) file_shx (cdr (assoc 3 ss_ent)) ) (setq styl_tl "" file_shx " ") ) (if (eq styl_tl "") (princ (strcat (itoa cod_shx) "," file_shx)) (princ (strcat "[" nam_lin "," styl_tl)) ) ) ((eq 46 (caar def_tl)) (setq scal_motif (cdr (assoc 46 def_tl))) (princ (strcat ",S=" (rtos scal_motif 2 prec))) ) ((eq 50 (caar def_tl)) (setq rot_motif (cdr (assoc 50 def_tl))) (princ (strcat ",R=" (angtos rot_motif 0 prec))) ) ((eq 44 (caar def_tl)) (setq x_motif (cdr (assoc 44 def_tl))) (princ (strcat ",x=" (rtos x_motif 2 prec))) ) ((eq 45 (caar def_tl)) (setq y_motif (cdr (assoc 45 def_tl))) (princ (strcat ",y=" (rtos y_motif 2 prec) "]")) ) ((eq 9 (caar def_tl)) (setq str_motif (cdr (assoc 9 def_tl))) ) ) (setq def_tl (cdr def_tl)) ) (setvar "angdir" m_adir) (setvar "angbase" m_abas) ) (T (princ "\nImpossible de récuperer le type de ligne de l'objet pointé.")) ) (setvar "cmdecho" 1) (prin1) )
  12. Hors sujet mais ca va t'interresser en VBA : Sub Charge_Type_ligne(NOM_TYPE_LIGNE as string, Optional fich = "acad.lin") 'Fonction pour verifier que le type de ligne existe ou non 'fin de fonction If "" = NOM_TYPE_LIGNE Or NOM_TYPE_LIGNE= "Continuous" Then Exit Sub On Error Resume Next ThisDrawing.Linetypes.load NOM_TYPE_LIGNE, fich If Err Then ThisDrawing.Utility.prompt "Type de Ligne non chargée: " & NOM_TYPE_LIGNE & "'" & vbCr & Err.DESCRIPTION Else End If End Sub La Variable Fich doit être un chemin complet 😉
  13. Tu veux voir ce qu'il est possible sur mon site... sinon je pense qu'il existe des lisps mais je ne les ai pas
  14. coucou, Je tombe dessus par hasard, Ton texte a des coordonnées de base quand itu l'inseres et effectivement le texte "bouge" en fonction de la modification du nouveau point d'accroche du texte... Personnellement, je calcul la différence en X et En Y (avant/apres modification et je deplace le texte en conséquence ^^)
  15. Curlygoth

    projection de vue 3D

    rendu pdf ? enfin moi je te conseil de créer une caméra (pour le rendu), des lumières et de faire un rendu tu verras c'est beaucoup mieux !
  16. Alors c'est précisement la que tu te trompe ! c'est tekllement plus facile d'aller chercher un fichier et de le lire via vba autocad que de faire du excel vers autocad ! c'est pas vraiment plus compliqué mais en treme d'ergonomie tu n'as pas besoin d'aller sur excel pour faire des chose dans autocad qui sont native en VBA... Faux ! j'ai des clients et notre fonctionnement interne qui avec toutes les possibilités devrais avoisiner les 1000 calque et encore je suis gentil... j'ai UN module qui me génère les calques quand j'en est besoin ! je veux implanter un poteau eclairage ? ben le module va creer le calque pour les blocs eclairages avec son numero de départ par exemple... j'ai pas a le sélectionner ou mettre l'objet dans tout ce fait seul (encore une fois via autocad vba) et ca m'evite aussi de charger le dessin de calque que je n'utiliserais jamais... fait quelque chose de dynamique et d'intelligent tu n'en auras plus besoin... ou passe par une base de données tu auras un accès quasi instantanée Oui UNE base de données
  17. Voila la regles pour les couleurs Dim table(0 To 2) table(0) = Int(COULEUR_LONG Mod 256) 'rouge table(1) = Int((COULEUR_LONG Mod 65536) / 256) 'Vert table(2) = Int(COULEUR_LONG / 65536) 'Bleu RVB = table
  18. @DenisHen content de ne pas etre le seul à te le répéter ^^ Comme je te l'ai toujours dit : j'utilise excel pour gérer mes dossiers et c'est tout (j'ai aucune données enregistrer dans excel maintennant) ! mais pour mémoriser variable, données utilisateur (donne stats), gérer calque, gérer objet via handle (je te remercie car tu m'a donner des idées avec ça) je stocke tout dans des bases de données et l'avantage (je trouve du VBA) ce que tu peux gérer TOUTES la suite office d'une facilité déconcertante contrairement au lisp je générer des rapports dans word, des extractions dans excel pour mes collègues ou clients... Envoie d'un document par mail via autocad ou excel automatiquement et pour tes calques ou chartre graphique : Les règles de chartre graphiques ? dans une base via prpogramme! et je vais les chercher via autocad ! ne t’embête pas avec excel pour ça... sinon utilise excel comme base de données dans un premier temps mais tu verras que l'ouverture et au bout d'un moment est longue à supporter
  19. Bonjour, Je l'ai installé ^^ et ce sur tous les pcs de toutes les entreprises auquel j'ai travaillé. Et à mes modestes connaissances : en France on est pas nombreux...
  20. Curlygoth

    Propriétés d'un dossier

    Bon je vais pas aider ici mais bon ... en vba : Dim fso As New Scripting.FileSystemObject Dim fld As Scripting.Folder Set fld = fso.GetFolder("c:\windows") 'a mettre en variable le dossier DATE_CREATION = fld.DateCreated
  21. bah ca dépend ou tu vas... Le VPN te permet juste de contourner les lois d'accès et d'accéder à plus de contenu.... MAIS si tu télécharge une connerie ben tu l'auras.... et si ce n'est pas dans la base de recherche de ton antivirus ben tu chopera le virus XD c'est pas beaucoup plus compliqué XD Le meilleur anti virus c'est toi !
  22. c'est faisable (et reprend notre conversation sur signal :p) Fais directement dans autocad avec lecture d'une basse de données tu passera à moins d'une seconde... mais je te le redis : c'est mieux de générer à la volée ! sinon ca ressemble à ca : (j'ai écris ici pas testé) mais l'idée c'est d'ouvrir ton classeur aller dans ta feuille puis dans tes cellules mais je te l'ai dit plusieurs fois ça charge ton dessin pour rien... Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks("NOM_CLASSEUR") Set xlSheet = xlBook.Worksheets("NOM_FEUILLE") C = NUMERO_COLONNE_A_EXTRAIRE For L = 1 to X 'ta derniere ligne Calque à creer = xlSheet.Cells(L,C) Set CALQUE = ThisDrawing.Layers.Add(Calque à creer) next i je suis la ^^ J'ai deja une fonction pour générer calque avec les propriétés faut aller voir l'aide il y a tout ^^ pour le filtre de calque j'ai proposé dans un autre post qui contourne la gestion des code DXF...
  23. je pense qu'il faut passer par la prog pour ça ^^
  24. fait des screens car je comprends pas bien si tu l'as dans transferer à droite tu vas l'avoir aussi dans le volet de gauche non ?
  25. tu l'avais appelé comment ton cuix ? si tu l'as nommés comme le nom par défaut... il faut le renommer. Sinon il est deja cghargé dans ton dessin et il faut l'afficher via la barre de menu
×
×
  • 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é