Compatibilité Excel VBA / Autocad 2015

Résolu/Fermé
Alissois Messages postés 5 Date d'inscription mercredi 27 août 2014 Statut Membre Dernière intervention 28 août 2014 - 27 août 2014 à 15:22
 viking76 - 4 sept. 2015 à 17:27
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 750
28 août 2014 à 07:42
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 mercredi 27 août 2014 Statut Membre Dernière intervention 28 août 2014
28 août 2014 à 09:50
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
parce que ca devient un poil restrictif
0
borntobealive Messages postés 138 Date d'inscription jeudi 17 juillet 2014 Statut Membre Dernière intervention 25 février 2019 7
27 août 2014 à 16:04
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 mercredi 27 août 2014 Statut Membre Dernière intervention 28 août 2014
27 août 2014 à 16:44
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 jeudi 17 juillet 2014 Statut Membre Dernière intervention 25 février 2019 7
27 août 2014 à 17:07
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 jeudi 17 juillet 2014 Statut Membre Dernière intervention 25 février 2019 7
27 août 2014 à 17:11
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 mercredi 27 août 2014 Statut Membre Dernière intervention 28 août 2014
28 août 2014 à 09:51
j'ai essayé les 2 solutions (avec s et sans) et ça ne fonctionne pas. Merci qd mm !
0