DenisHen Posté(e) le 6 novembre 2021 Posté(e) le 6 novembre 2021 Un grand bonjour à la communauté. Je suis en train de développer un classeur Excel (.XLSM) qui créé des calques directement dans AutoCAD. Mon problème est en deux partie, causé par un futur partage. Sachant que tout le monde n'a pas la même version d'Excel que moi ni la même version d'AutoCAD que moi : - Comment, en VBA bien-sur, connaitre la et/ou les versions d'AutoCAD installées sur le poste ? - Comment charger le ou les "AutoCAD XXXX Type Library" correspondants aux AutoCAD lancées et/ou installés ? (il faut aussi tenir compte aussi que, grâce à une lumineuse idée de @rebcao, je compte créer aussi une macro qui créera un fichier script (.SCR), donc, sans AutoCAD sur la machine) Actuellement, je lance mon Excel 365 depuis mon poste et contrôle mon AutoCAD 2022, mais si je partage mon classeur avec un utilisateur d'AutoCAD 2019 (par exemple), mes macros ne fonctionnerons pas, car je ne charge que la librairie d'AutoCAD 2022 et non celle d'AutoCAD 2019. Mon but étant de partager ce classeur (qui sera autant pour les versions "complètes" que les versions LT), comment charger le ou les "AutoCAD * Type Library" existantes dans le système ? Si quelqu'un a une astuce, un conseil, un lien, une solution... Je suis preneur. Bien à toi, la communauté. 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 6 novembre 2021 Posté(e) le 6 novembre 2021 Pour trouver les versions d'AutoCAD installées sur un poste, tu peux lire la base de registre (HKEY_CURRENT_USER (ou HKEY_LOCAL_MACHINE)\SOFTWARE\Autodesk\AutoCAD. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 6 novembre 2021 Auteur Posté(e) le 6 novembre 2021 Salut (gile), et un grand merci pour ton aide. Mais j'ai toujours hésiter à fouiller la base de registre (car j'ai lu que, même en lecture seule (en consultation), ça pouvait être dangereux, cela réveille certains logiciels latents (lu sur www.developpez.net mais je ne sais plus où), surtout que je ne sais pas comment faire... Et, comme tu me le conseilles, je n'ai pas trouvé comment : - fouiller la totalité de cette clef, et en VBA, sans autorisation "utilisateur" ou "administrateur", - et ensuite, comment faire pour, éventuellement, charger tous les "Type Library" existants, dans le système trouvés dans cette clef.. Je pense à un "Do While" tant qu'il existe une clef (mais laquelle), ou à un "For...Next" du nombre de clef. Encore un grand merci à toi, mais je vais fouiller... Bien à toi (gile). 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)
lecrabe Posté(e) le 6 novembre 2021 Posté(e) le 6 novembre 2021 Hello HKEY_CURRENT_USER / Software / Autodesk / AutoCAD / R1x.x Cle : R17.0 pour MAP/CIVIL 2007 Cle : R17.1 pour MAP/CIVIL 2008 Cle : R17.2 pour MAP/CIVIL 2009 Cle : R18.0 pour MAP/CIVIL 2010 Cle : R18.1 pour MAP/CIVIL 2011 Cle : R18.2 pour MAP/CIVIL 2012 Cle : R19.0 pour MAP/CIVIL 2013 Cle : R19.1 pour MAP/CIVIL 2014 Cle : R20.0 pour MAP/CIVIL 2015 Cle : R20.1 pour MAP/CIVIL 2016 Cle : R21.0 pour MAP/CIVIL 2017 Cle : R22.0 pour MAP/CIVIL 2018 Cle : R23.0 pour MAP/CIVIL 2019 Cle : R23.1 pour MAP/CIVIL 2020 Cle : R24.0 pour MAP/CIVIL 2021 Cle : R24.1 pour MAP/CIVIL 2022 Bon WE, La Sante, Bye, lecrabe Autodesk Expert Elite Team
DenisHen Posté(e) le 6 novembre 2021 Auteur Posté(e) le 6 novembre 2021 Salut à toi, Ô Décapode. Mais tu ne me proposes que les version "Civil", qu'en est-il des autres version (LT, MAP...), et sans les librairies disponibles à charger, quel "Type Library" charger, si elles sont "disponibles", sur le système courant... En tous cas, mille mercis... Bon week-end à toi aussi... Moi, Nous, Et malheureusement encore triste, même si on ne le dit plus...☹️ 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 6 novembre 2021 Posté(e) le 6 novembre 2021 Il y a 4 heures, DenisHen a dit : mes macros ne fonctionnerons pas, car je ne charge que la librairie d'AutoCAD 2022 et non celle d'AutoCAD 2019. Es-tu sûr de ça ? La librairie n'a-t-elle pas juste besoin d'être chargée dans l'IDE ? Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 6 novembre 2021 Posté(e) le 6 novembre 2021 Le 06/11/2021 à 19:05, DenisHen a dit : Mais tu ne me proposes que les version "Civil", qu'en est-il des autres version (LT, MAP...) Ces numéros de version (release number) valent pour toutes les versions d'AutoCAD (LT, Vanilla et verticaux). Les clés enfant donne les identifiants locaux (LocaleId) et de produit (ProductId). Par exemple AutoCAD-5101:40C pour AutoCAD 2020(5), Vanilla (01), français (40C). Voir ce sujet. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 6 novembre 2021 Auteur Posté(e) le 6 novembre 2021 Ok. Merci à toi, LeCrabe et à toi aussi Ô (gile). Donc, je suis allé dans ma base de registre et j'ai trouvé "une" clef : "Ordinateur\HKEY_CURRENT_USER\SOFTWARE\Autodesk\AutoCAD\R24.1\CurVer", qui semble être le centre de mon intérêt. Mais comment obtenir la totalité de ces clefs et surtout, comment charger les "Type Library" de ces versions existantes en VBA ? Merci encore, je fouille actuellement pour une solution grâce à votre aide... Bien à toi, la communauté... 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)
lecrabe Posté(e) le 6 novembre 2021 Posté(e) le 6 novembre 2021 Hello Remarque du vieux Decapode NUL en développement ! Si tu fais du Dev en VBA sur AutoCAD 20XX, comment peux tu savoir si le VBA AutoCAD 20XX a ete installe ou pas sur le PC concerne qui va tenter d'exécuter ta routine VBA ?? Bon WE, la Sante, Bye, lecrabe Autodesk Expert Elite Team
DenisHen Posté(e) le 6 novembre 2021 Auteur Posté(e) le 6 novembre 2021 Salut à toi, Ô Décapode... C'est justement ce que je recherche... Je ne cherche pas la version du VBA, mais la/les version(s) d'AutoCAD installés(es), et en VBA... Et ensuite, quel est l'AutoCAD en cours d'exécution... PS : tu dois être loin du NUL, sérieusement... 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)
DenisHen Posté(e) le 6 novembre 2021 Auteur Posté(e) le 6 novembre 2021 Salut à toutes et à tous. Bon, je viens de faire un tour de plusieurs heures, sur "Registry values for ProductID and LocaleID for AutoCAD and the vertical products". J'ai bien compris que je n'entravais rien... Je ne sais pas quoi faire avec ça... Comment faire ? ? ? Je cherche juste à connaitre les éventuelles version d'AutoCAD installées sur un poste et, charger les "Type Library" présent le cas échéant. Je suis novice en tout et débutant pour le reste... Et là, @(gile) tu m'as nettement surestimé ! ! ! Bien à toi, la communauté... 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 6 novembre 2021 Posté(e) le 6 novembre 2021 Denis, j'ai vraiment le sentiment que tu te compliques la vie parce que tu prends problème dans le mauvais sens. Si tu veux utiliser le VBA pour faire communiquer AutoCAD et Excel, il serait beaucoup plus simple de le faire depuis AutoCAD, ce qui résoudrait tes soucis de version de bibliothèque (qui serait forcément installée sur le poste pour pouvoir utiliser le programme). Sinon, depuis Excel, la solution de générer un script est, à mon sens, la plus simple et elle permettrait de lancer ce script dans les versions LT comme dans les versions pleines sur lesquelles le module VBA n'est pas installé (ce qui représente très probablement la grande majorité). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 6 novembre 2021 Auteur Posté(e) le 6 novembre 2021 Bonjour @(gile), je commence à comprendre ta remarque (ö combien) et celle de @rebcao et aussi de @Curlygoth, je viens de tomber sur plusieurs problèmes dans Excel (presque insolubles)... : - la distribution, quelles versions (AutoCAD 20XXX, LT..., Excel...) avec laquelle interagir. - vos remarques importantes (et toujours judicieuses, donc, systématiquement donnant à réflexion), - effectivement, le lien Excel<->AutoCAD restent discutables (je me souvient des interventions de @Curlygoth entre autres, (et pour lequel j'ai un grand respect) et je vous comprends maintenant (car je travaille sur mon projet en ce moment et me heurte à plusieurs problèmes qui seraient bien plus simple à résoudre dans AutoCAD/VBA que dans Excel/VBA), - la notion de script m'a été proposée par @rebcao et j'ai tellement été souvent d'accord avec lui presque toujours, et si souvent, (j'en rajoute ?) que je ne me pose plus la question : s'il le dit, c'est que c'est bien. Il m'a orienté dans mes projets de développement, comme toi @(gile) ou d'autres ( @didier, @Patrick Emin, Autodesk, @Patrick_35, @Tramber, @rebcao et j'en oublie forcément, autant dans le VBA que dans le Lisp...). Et c'est pour toutes ces raisons (que je commence à comprendre que rester sur Excel me pose plusieurs soucis et dont je n'en vois pas l'issus), que je vais maintenant m'orienter vers un DVB. Je pense que les complications ne seront pas les mêmes, mais elles devraient être plus simple à résoudre, bien que...). Mon seul problème est, que si je fais un DVB, les utilisateurs de LT ne pourront pas en profiter (peut-être aussi pour les utilisateur de ZWCad ou autres...)... Je vous remercie toutes et tous pour votre soutient, votre aide, vos conseils et vos remarques. Bien à toi, la communauté... 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 7 novembre 2021 Posté(e) le 7 novembre 2021 @DenisHen Il me semble bien que : 1. Comme dit plus haut, tu n'as pas besoin de connaître la version d'AutoCAD, ni si le module VBA est installé sur cette version. Comme avec d'autre langages (.NET, Python, ...), tu peux accéder l'application AutoCAD via ActiveX sans spécifier la version : Dim acadApp As Object On Error Resume Next Set acadApp = CreateObject("AutoCAD.Application") If 0 < Err.Number Then Err.Clear() MsgBox("Impossible de créer une instance de 'AutoCAD.Application'.") Exit Sub End If Dim ThisDrawing As Object = acadApp.ActiveDocument 2. Un programme VBA, que ce soit du VBA Excel ou de VBA AutoCAD, ne fonctionnera pas sur une version LT. Ces versions sont bridées pour ne supporter aucune programmation. Ceci dit, je persiste à penser que créer des calques dans AutoCAD devrait logiquement se faire depuis AutoCAD... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 7 novembre 2021 Posté(e) le 7 novembre 2021 Hello Je supporte a 200% notre grand Maitre Marseillais Gilles !! Bon Dimanche, La Sante, Bye, lecrabe Autodesk Expert Elite Team
(gile) Posté(e) le 7 novembre 2021 Posté(e) le 7 novembre 2021 Je suis têtu, j'ai testé. La macro suivante dans Excel ouvre une nouvelle session d'AutoCAD (dernière version utilisée sur le poste), crée le calque "TOTO" et le rend courant ; et ceci sans aucune référence aux bibliothèques AutoCAD. Sub Test() Dim acadApp As Object On Error Resume Next Set acadApp = CreateObject("AutoCAD.Application") If 0 < Err.Number Then Err.Clear MsgBox ("Impossible de créer une instance de 'AutoCAD.Application'.") Exit Sub End If acadApp.Visible = True Dim doc As Object Set doc = acadApp.ActiveDocument Dim color As Object Set color = acadApp.GetInterfaceObject("AutoCAD.AcCmColor." & Left(acadApp.Version, 2)) color.SetRGB 80, 100, 244 Dim layer As Object Set layer = doc.layers.Add("TOTO") layer.TrueColor = color doc.ActiveLayer = layer End Sub Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 7 novembre 2021 Posté(e) le 7 novembre 2021 Hello @(gile) BRAVO !! Et en plus tu affectes une True Color au Calque (si j'ai bien compris ?!) La Santé, Bye, lecrabe Autodesk Expert Elite Team
Curlygoth Posté(e) le 8 novembre 2021 Posté(e) le 8 novembre 2021 @DenisHen Citation Ceci dit, je persiste à penser que créer des calques dans AutoCAD devrait logiquement se faire depuis AutoCAD... 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 Mon site Web (en cours de construction) : Site DA-CODE de @didier
DenisHen Posté(e) le 8 novembre 2021 Auteur Posté(e) le 8 novembre 2021 Bonjour à la communauté. @(gile) : un grand merci pour ton aide, toujours aussi précieuse. j'avais écris ça : Dim AcadApp As AcadApplication Dim DocAutoCad As Object ------------- On Error Resume Next Set AcadApp = GetObject(, "AutoCAD.Application") On Error GoTo 0 If AcadApp Is Nothing Then Set AcadApp = New AutoCAD.AcadApplication End If Select Case MsgBox("Créer un nouveau DWG [Oui] ?" & vbCrLf & "Ou mettre à jour le DWG courant [Non] ?", vbYesNo, "Confirmation") Case vbYes Set DocAutoCad = AcadApp.Documents.Add Case vbNo Set DocAutoCad = AcadApp.ActiveDocument End Select AcadApp.visible = True Ton exemple va beaucoup m'aider, et aussi pour les couleurs RGB. Mais je ne savais absolument pas que les macros VBA d'Excel ne fonctionnaient pas pour les versions LT d'AutoCAD. Je vais donc prévoir de créer un script pour ces versions. J'ignorais aussi qu'il n'était pas nécessaire de charger les "Type Librairy" dans le VBA d'Excel... Encore un grand merci à toi. 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)
Curlygoth Posté(e) le 8 novembre 2021 Posté(e) le 8 novembre 2021 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 Mon site Web (en cours de construction) : Site DA-CODE de @didier
DenisHen Posté(e) le 9 novembre 2021 Auteur Posté(e) le 9 novembre 2021 Salut @Curlygoth. Merci pour ton aide, j'en prends bien note... 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)
DenisHen Posté(e) le 11 novembre 2021 Auteur Posté(e) le 11 novembre 2021 Bonjour à la communauté. Voilà, j'ai un mal fou pour créer des "As Objet" pour les calques, le type de ligne, la couleur... Mais j'ai un autre petit souci, que faire avec : 'Création des filtres ------------------------------ NomFiltre = Sheets(NomFeuille).Cells(Lign, 54).Value If NomFiltre <> "" Then DaType(0) = 1: DaValue(0) = NomFiltre DaType(1) = 1: DaValue(1) = NomFiltre & "*" DaType(2) = 1: DaValue(2) = "*" DaType(3) = 1: DaValue(3) = "*" DaType(4) = 70: DaValue(4) = 0 DaType(5) = 1: DaValue(5) = "*" DaType(6) = 1: DaValue(6) = "*" Set Dict1 = DocAutoCad.Layers.GetExtensionDictionary Set Dict2 = Dict1.AddObject("ACAD_LAYERFILTERS", "AcDbDictionary") Set DaRec = Dict2.AddXRecord(NomFiltre) DaRec.SetXRecordData DaType, DaValue End If Faut-il le "Type Library" ? Ou, comment faire ? Car là, je ne sais absolument pas quoi faire... Je me noie déjà dans un verre d'eau pour suivre les conseils (toujours très avisés) de (gile), mais là... 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 11 novembre 2021 Posté(e) le 11 novembre 2021 Difficile de répondre à tes dernières questions avec si peu d'information (on n'est pas dans ta tête). Si tu as du mal à coder avec la liaison tardive (As Object), tu peux le faire en liaison anticipée (As AcadApplication, As AcadDocument, As AcadLayer, etc) avec les bibliothèques (ou directement dans AutoCAD) et quand tu es satisfait avec le fonctionnement de ton code, tu remplaces tous les types AutoCAD* par Object et tu peux supprimer les références aux bibliothèques. (CF Liaison anticipée et liaison tardive et Early ou Late Binding). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 11 novembre 2021 Auteur Posté(e) le 11 novembre 2021 Encore merci à toi @(gile) pour ton aide. Mais je pense, pour mon projet, devoir tout remettre en cause... Je pense faire un Classeur Excel pour gérer la nomination de calque (avec couleur, type de ligne...) et d'y inclure un export script (je pense toujours aux utilisateurs de LT) et ne rien faire d'autre, en fait... Et le fichier script sera toujours disponible dans toutes les versions d'AutoCAD... Mais j'aimerais garder le lien entre AutoCAD<->Excel pour récupérer les types de lignes, par exemple, au moins dans un classeur Excel... Qu'en pensez-vous ? 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)
DenisHen Posté(e) le 11 novembre 2021 Auteur Posté(e) le 11 novembre 2021 Et surtout : 'Création des filtres ------------------------------ NomFiltre = Sheets(NomFeuille).Cells(Lign, 54).Value If NomFiltre <> "" Then DaType(0) = 1: DaValue(0) = NomFiltre DaType(1) = 1: DaValue(1) = NomFiltre & "*" DaType(2) = 1: DaValue(2) = "*" DaType(3) = 1: DaValue(3) = "*" DaType(4) = 70: DaValue(4) = 0 DaType(5) = 1: DaValue(5) = "*" DaType(6) = 1: DaValue(6) = "*" Set Dict1 = DocAutoCad.Layers.GetExtensionDictionary Set Dict2 = Dict1.AddObject("ACAD_LAYERFILTERS", "AcDbDictionary") Set DaRec = Dict2.AddXRecord(NomFiltre) DaRec.SetXRecordData DaType, DaValue End If 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