Compatibilité Excel VBA / Autocad 2015

Résolu
Alissois Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
 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
A voir également:

5 réponses

pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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...
2
Alissois Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pijaku, ça fonctionne ! J'ai défini acadobj As Variant et calque As Variant.
Par contre, je ne comprends pas pourquoi l'ancienne définition fonctionne avec Autocad 2013 et non 2015, mais bon...
0
viking76
 
parce que ca devient un poil restrictif
0
borntobealive Messages postés 138 Date d'inscription   Statut Membre Dernière intervention  
 
Je suis pas caler en compatibilité Autocad/vba mais
  AcadPlan.ModelSpace
aurait pas une propriété
objects
ou
items
?
0
Alissois Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
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....
0
borntobealive Messages postés 138 Date d'inscription   Statut Membre Dernière intervention  
 
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)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
borntobealive Messages postés 138 Date d'inscription   Statut Membre Dernière intervention  
 
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
elements.item
(là encore s or not s that is the question)
0
Alissois Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
j'ai essayé les 2 solutions (avec s et sans) et ça ne fonctionne pas. Merci qd mm !
0