Compatibilité Excel VBA / Autocad 2015
Résolu
Alissois
Messages postés
6
Statut
Membre
-
viking76 -
viking76 -
Bonjour à tous,
J'ai réalisé un programme VBA permettant d'extraire des polylignes sur Autocad 2013, ainsi que leurs calques, leurs couleurs, etc...
En voulant exécuter le programme sur un dessin Autocad 2015, le programme ne semble plus fonctionner, comme s'il ne trouvait aucun élément dans le dessin.
Je me retrouve avec l'erreur 13 : incompatibilié de type, à la ligne : For Each acadobj In elements (cf en bold ci-dessous)
Avez-vous une idée d'où cela pourrait venir ?
Voici mon programme :
Sub RE()
'Bloque le calcul automatique et l'affichage Excel
Application.ScreenUpdating = False
Application.Calculation = xlManual
'Déverrouille la page
'ActiveSheet.Protect
'Affiche les feuilles masquées
'Call Show_Sheets
'Nécessite la référence Autocad xxx Type Library (Menu Outils > Références)
Dim AcadApp As AcadApplication, AcadPlan As AcadDocument
'Création de l'objet AutoCAD dans Excel :
Set AcadApp = AcadApplication
'Set AcadApp = New AcadApplication
'Rend AutoCAD visible
AcadApp.Visible = True
'utilise le document ouvert :
Set AcadPlan = AcadApp.ActiveDocument
'Dim varAttributes As Variant
'Dim varDyn As Variant
Dim elements As Variant
Dim acadobj As AcadObject
Dim Calque As AcadLayer
'Dim varDyn1 As Variant
Dim xN As Integer
Dim xF As Integer
xN = 1
xF = 3
'Suppression des données existantes
Sheets("DONNEES AUTOCAD").Select
Range("A2:I100").Select
Selection.ClearContents
Cells(10, 11).Select
Selection.ClearContents
Range("M2:M100").Select
Selection.ClearContents
'recupere l'unité du dessin
Cells(10, 11) = AcadPlan.GetVariable("InsUnits")
'Analyser tous les éléments du fichier Autocad
Set elements = AcadPlan.ModelSpace
For Each acadobj In elements
Set Calque = AcadPlan.Layers(acadobj.Layer)
'Supprime du jeu les objets dans des calques gelés
If Calque.Freeze = False And Left(Calque.Name, 8) = "GTM-METH" Then
If acadobj.ObjectName = "AcDbPolyline" Then
Set Pol = acadobj
xN = xN + 1
Cells(xN, 1) = Pol.Layer
Cells(xN, 2) = Pol.Length
Cells(xN, 4) = Pol.Color
Cells(xN, 5) = Pol.Plinewid
End If
End If
Next
'recupere les noms des calques
Set mondico = CreateObject("Scripting.Dictionary")
For Each c In Range("A2", "A100")
mondico(c.Value) = ""
Next c
[m2].Resize(mondico.Count, 1) = Application.Transpose(mondico.keys)
'Libérer la mémoire des objets ouverts
Set Bloc = Nothing
Set elements = Nothing
Set AcadApp = Nothing
Set AcadPlan = Nothing
Set acadobj = Nothing
Set LigneRep = Nothing
Set Calque = Nothing
'Réactive le calcul automatique, l'affichage Excel et retour sur la page initiale
Sheets("RENSEIGNEMENTS METRES").Select
Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
'Masque les feuilles
'Call Hide_Sheets
'Reverrouille la page
ActiveSheet.Unprotect
End Sub
J'ai réalisé un programme VBA permettant d'extraire des polylignes sur Autocad 2013, ainsi que leurs calques, leurs couleurs, etc...
En voulant exécuter le programme sur un dessin Autocad 2015, le programme ne semble plus fonctionner, comme s'il ne trouvait aucun élément dans le dessin.
Je me retrouve avec l'erreur 13 : incompatibilié de type, à la ligne : For Each acadobj In elements (cf en bold ci-dessous)
Avez-vous une idée d'où cela pourrait venir ?
Voici mon programme :
Sub RE()
'Bloque le calcul automatique et l'affichage Excel
Application.ScreenUpdating = False
Application.Calculation = xlManual
'Déverrouille la page
'ActiveSheet.Protect
'Affiche les feuilles masquées
'Call Show_Sheets
'Nécessite la référence Autocad xxx Type Library (Menu Outils > Références)
Dim AcadApp As AcadApplication, AcadPlan As AcadDocument
'Création de l'objet AutoCAD dans Excel :
Set AcadApp = AcadApplication
'Set AcadApp = New AcadApplication
'Rend AutoCAD visible
AcadApp.Visible = True
'utilise le document ouvert :
Set AcadPlan = AcadApp.ActiveDocument
'Dim varAttributes As Variant
'Dim varDyn As Variant
Dim elements As Variant
Dim acadobj As AcadObject
Dim Calque As AcadLayer
'Dim varDyn1 As Variant
Dim xN As Integer
Dim xF As Integer
xN = 1
xF = 3
'Suppression des données existantes
Sheets("DONNEES AUTOCAD").Select
Range("A2:I100").Select
Selection.ClearContents
Cells(10, 11).Select
Selection.ClearContents
Range("M2:M100").Select
Selection.ClearContents
'recupere l'unité du dessin
Cells(10, 11) = AcadPlan.GetVariable("InsUnits")
'Analyser tous les éléments du fichier Autocad
Set elements = AcadPlan.ModelSpace
For Each acadobj In elements
Set Calque = AcadPlan.Layers(acadobj.Layer)
'Supprime du jeu les objets dans des calques gelés
If Calque.Freeze = False And Left(Calque.Name, 8) = "GTM-METH" Then
If acadobj.ObjectName = "AcDbPolyline" Then
Set Pol = acadobj
xN = xN + 1
Cells(xN, 1) = Pol.Layer
Cells(xN, 2) = Pol.Length
Cells(xN, 4) = Pol.Color
Cells(xN, 5) = Pol.Plinewid
End If
End If
Next
'recupere les noms des calques
Set mondico = CreateObject("Scripting.Dictionary")
For Each c In Range("A2", "A100")
mondico(c.Value) = ""
Next c
[m2].Resize(mondico.Count, 1) = Application.Transpose(mondico.keys)
'Libérer la mémoire des objets ouverts
Set Bloc = Nothing
Set elements = Nothing
Set AcadApp = Nothing
Set AcadPlan = Nothing
Set acadobj = Nothing
Set LigneRep = Nothing
Set Calque = Nothing
'Réactive le calcul automatique, l'affichage Excel et retour sur la page initiale
Sheets("RENSEIGNEMENTS METRES").Select
Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
'Masque les feuilles
'Call Hide_Sheets
'Reverrouille la page
ActiveSheet.Unprotect
End Sub
A voir également:
- Compatibilité Excel VBA / Autocad 2015
- Compatibilite windows 11 - Guide
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Ancienne version autocad gratuite - Télécharger - CAO-DAO
- Déplacer colonne excel - Guide
5 réponses
Bonjour,
L'erreur 13 : incompatibilité de type est due, la plupart du temps, à une mauvaise déclaration des variables.
Dans ce cas, elements est déclaré As Variant et acadobj As AcadObject. Par conséquent, les types n'étant pas identiques, tu ne peux pas boucler.
Par contre, je ne connais absolument pas Autocad ni ces collections d'objets.
Essaye déjà en déclarant acadobj As Variant et vois ce qu'il peut contenir...
L'erreur 13 : incompatibilité de type est due, la plupart du temps, à une mauvaise déclaration des variables.
Dans ce cas, elements est déclaré As Variant et acadobj As AcadObject. Par conséquent, les types n'étant pas identiques, tu ne peux pas boucler.
Par contre, je ne connais absolument pas Autocad ni ces collections d'objets.
Essaye déjà en déclarant acadobj As Variant et vois ce qu'il peut contenir...
Je suis pas caler en compatibilité Autocad/vba mais
AcadPlan.ModelSpaceaurait pas une propriété
objectsou
items?
En principe oui : AcadPlan.ModelSpace est censé contenir des objets (AcadObject) mais quand je passe la souris dans ma programmation sur le terme "acadobj", il apparait : acadobj=nothing ! Comme si mon dessin était vide....
Ce que je veux dire c'est que dans ta boucle for il faut peut-être essayer :
For Each acadobj In elements.objects(peut-être sans le s je sais jamais)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
je viens d'aller là : http://help.autodesk.com/view/ACD/2015/ENU/?guid=GUID-C541B6F2-1279-4D1C-8DC0-788F27F644EF
donc pas la peine d'essayer objects ça ne marchera pas.
essaye plutôt
donc pas la peine d'essayer objects ça ne marchera pas.
essaye plutôt
elements.item(là encore s or not s that is the question)
Par contre, je ne comprends pas pourquoi l'ancienne définition fonctionne avec Autocad 2013 et non 2015, mais bon...