Aller au contenu

Comment connaitre les versions d'AutoCAD installées et comment charger la bonne librairie sous Excel.


DenisHen

Messages recommandés

Bonjour à la communauté.

@(gile) : de quels liens tu parles ? Je n'ai pas saisi.

En outre, je progresse lentement, car je suis plus que débordé en ce moment. Mais je vais m'orienter, je pense, vers un classeur Excel qui gèrera les calques et avec une commande pour créer un fichier script (merci à @rebcao ), ce qui servira au plus grand nombre, je l'espère (pour les versions complètes comme des LT) et un DVB pour les autres qui lira un classeur Excel (merci à @(gile), à @Curlygoth...)...

Car je n'ai pas encore trouvé comment remplacer tous mes appels au VBA AutoCAD dans Excel par des objets, comme dans :

    Dim layerObj As AcadLayer
    Dim DaRec As AcadXRecord
    Dim Dict1 As AcadDictionary, Dict2 As AcadDictionary

Je cherche encore les renseignements pour changer tous les "DIM xxxx as AutoCAD..." et les remplacer par les mots clefs en faire des objets...

Comme pour les types de ligne, la notion d'impression du calque, les couleurs (mais (gile) m'a donné la solution) et surtout les filtres de propriété de calques.

Je continu de vous remercier, tous et toute la communauté...

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)

Lien vers le commentaire
Partager sur d’autres sites

Il y a 7 heures, DenisHen a dit :

Car je n'ai pas encore trouvé comment remplacer tous mes appels au VBA AutoCAD dans Excel par des objets

As-tu attentivement lu, décortiqué, analysé le code donné ici ? les réponses à tes question y sont.

 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @(gile) et merci pour ton aide.

Oui, j'ai bien lu tes liens sur les liaisons anticipées et les liaisons tardives. J'air bien compris la différence entre les deux, mais je n'arrive pas tellement à les mettre en œuvre. 

Je pense qu'il me manque les "mots clefs autocadiens" pour la création des liens et surtout des objets, mais je continu de chercher dans l'aide AutoCAD. Tu m'avais envoyé un lien sur tout ce qu'il fallait savoir pour faire du Lisp dans AutoCAD, je cherche la même chose pour le VBA. Mais je vais trouver...

Encore 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)

Lien vers le commentaire
Partager sur d’autres sites

Toute la documentation du développeur AutoCAD : https://help.autodesk.com/view/OARX/2018/ENU/

Tu peux remplacer 2018 par 2019, 2020, 2021 ou 2022 pour les versions d'AutoCAD plus récentes (mais ça ne devrait pas changer grand chose en VBA).

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Merci mille fois @(gile)...
Mais je me rend compte qu'il faut que je me familiarise avec l'Orientation Objet, que je n'utilise absolument pas ! ! !
Et je vais corriger ça, j'ai déjà lu pas mal de trucs là-dessus (comme sur developpez.com, pas exemple)...
Encore merci à toi...

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)

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Salut à tous...
J'ai bien fouillé le Orienté Object... Sur plein de site (le meilleur reste, à mon avis, Developpez.com)
Mais j'ai beaucoup de mal avec ça...
Je pense peut-être être à mon maximum de mes compétences, d'intelligences...
J'ai bien lu, et longuement, les liaisons anticipées et les liaisons tardives...
Mais j'ai beaucoup de mal à trouver les "mots clefs" VBA pour créer les bons Objets Orientés, tels que type de ligne, épaisseurs de ligne...
J'ai fouillé l'aide AutoCAD VBA... Mais elle n'est pas très explicite...
Je vais donc continuer à faire tel que je peut (et la sais, un peu)  le faire, et vous me direz comment me passer de la librairie, si toutes fois est votre volonté...
Je continu donc l'élaboration de mon fichier Excel, et je le posterais pour que vous puissiez me dire là où j'ai un manque...
Ca vous tente ? Êtes-vous d'accord ?
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)

Lien vers le commentaire
Partager sur d’autres sites

Ce n'est pas compliqué, en liaison anticipée, dans le code, on déclare les objets avec leur type fort :

Dim layerObj As AcadLayer

Ça aide le compilateur (ou l'interpréteur) à exécuter le code plus rapidement et ça permet à l'IDE de contrôler que les propriétés et méthodes sont bien applicables à ce type d'objet et, suivant l'IDE d'aider à coder avec des infobulles, des signalements d'erreur au moment de l'édition, etc. Mais ceci nécessite de référencer les bibliothèques qui, en VBA, sont dépendantes de la version.

En liaison tardive, dans le code, en VB(A), on déclare les objets avec le type Object :

Dim layerObj As Object

Là, l'éditeur ne peut plus donner aucune aide et les erreurs ne seront détectées qu'au moment de l'exécution. C'est le lot de tous les langages dits "à typage dynamique" (LISP, Python, Ruby, etc). Mais avec les langages basé objet (VBA) ou orienté objet (VB.NET, C#) on n'a plus de bibliothèque à référencer.

Dans la pratique, comme dit précédemment, on commence en codant en liaison anticipée avec les bibliothèques nécessaires (celles d'AutoCAD quand on code depuis Excel ou inversement) jusqu'à ce qu'on soit satisfait du fonctionnement. Puis, pour diffuser le programme, on supprime les références et on remplace tous les types fort par le type Object. Un bon IDE soulignera les erreurs de type dès qu'on aura supprimé les références.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Ok, je ne connaissais pas l'astuce de coder en premier en liaison anticipée, et, une fois le code satisfaisant, on le modifie pour l'adapter en liaison tardive...
Je pense que c'est lors de cette phase que j'aurais sans doute besoin d'un peu d'aide...
Car en liaison anticipé, je me débrouille, mais pas en liaison tardive... D'où mon post...
Et c'est bien mon envie, ne faire que de la liaison tardive pour que mon projet puisse être utilisé par n'importe quelle version "complète" d'AutoCAD. Sans devoir référencer une bibliothèque...
Donc, d'après ce que j'ai compris, la liaison anticipé est comprise par l'IDE, avec des aides sur la correction des objets, les propositions de méthodes, les infos bulles... Alors que dans les liaisons tardives, ça n'existe pas...
Dans ton code "exemple", tu écris :

Set color = acadApp.GetInterfaceObject("AutoCAD.AcCmColor." & Left(acadApp.Version, 2))

J'ai longtemps cherché la liste des "GetInterfaceObject", mais je n'ai trouvé que des trucs sur "Save & Restore layers", mais rien sur, par exemple, "AutoCAD.AcCmColor." ou autres, comme le type de ligne, l'épaisseur...
Encore un grand merci @(gile) pour ton aide...
Denis...

PS : je pense avoir trouvé quelque chose, je peux partir de 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)

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Salut la communauté...
J'ai longtemps contemplé les différentes discutions sur les liaisons "anticipée" et les liaisons "tardives"...

Et j'ai appris beaucoup, j'ai même réussi à faire un classeur Excel qui commande à AutoCAD des créations de calques... uniquement par liaisons tardives...
J'arrive même à récupérer les types de ligne d'un dessin dans AutoCAD depuis un classeur Excel... @(gile), comment te remercier ! ! !

Mais j'ai encore une toute petite question, comment faire de ce code une relation tardive ?
J'ai saisi, maintenant, la notion de relation, et je comprend de plus en plus la différence entre tardive et anticipée...
Mais je ne sais pas comment transcrire ce code en relation anticipé vers une relation tardive...
Je pense que le "dictionary" pose problème...
 

Sub ExpAutoCAD_TestSansLib()
    NomFeuille = ActiveSheet.name
    'Création des filtres ------------------------------
    Do While OnFouilleLesLignes <> ""
        NomFiltre = Sheets(NomFeuille).Cells(OnFouilleLesLignes, 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
    OnFouilleLesLignes = OnFouilleLesLignes + 1
    Loop
End Sub

Car, je le répète, @(gile) m'a été d'une grande aide... Incroyable...

Mais après une multitude de recherche, je n'arrive pas à transformer ce code "anticipé" vers un code "tardif"...

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)

Lien vers le commentaire
Partager sur d’autres sites

Dans le code que tu montres, tu affectes les valeurs aux variables Dict1, Dict2 et DaRec mais on ne voit pas comment ce variables sont déclarées.

Encore une fois, je connais très mal le VB(A), mais il me semble qu'il devrait y avoir des déclarations du style:

Dim Dict1 As Object
Dim Dict2 As Object
Dim DaRec As Object

 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @(gile) et mille mercis.
Effectivement, j'étais passé à coté.
Maintenant, ça fonctionne super.

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)

Lien vers le commentaire
Partager sur d’autres sites

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é