Aller au contenu

excel et les attributs


Messages recommandés

Posté(e)

bonjour...

 

mon pb est dans l'utilisation de "ExcelLink.dvb" dans les samples de autocad 2006...

 

ce script est senssé exporter les attibuts vers un tableau excel puis de les re importer aprés modification. ce qui correspond tout a fait a ce que je doit faire pour mon bouot: j'envoie un fichier avec les objets indexé de 1 à n, et le client me renvoie les 2 référence a noter pour chaque index (dans un fichier excel ce qui tombe bien ).

 

1er soucis, cete macro n'a pas été mis a jour depuis un mnt et il faut rajouter le code pour excel 11 dans la fonction ConnectExcel si on veux travailler avec office 2003... jusque la , ça va...j'arrive a exporter.

 

pour faire des test, j'ai créer un fichier autocad avec qqs ocurence d'un objet qui compte 3 attributs: un qui sert d'index et deux a metre a jour.

 

à l'importation j'ai un message : " ImportData error 9 (l'indice n'appartien pas à la selection.) from ExcelLink"

 

 

je met la fonction qui le pose pb...

 

 
Sub ImportData(X As Variant)
' X is only used to suppress this routine from the Run Macro dialog

' We have to late-bind the object because the user
' might not have Excel installed

Dim objWorksheet As Object, objCell As Object
Dim objAutoCad As Object, objModelSpace As AcadModelSpace, objEntity As Object
Dim iRowNum As Long
Dim TableData As Variant
Dim iCount As Long
Dim Header As Boolean
Dim RowCount As Long
Dim CurrentItem As String

' AutoCAD Table Index
Const TABLE_ITEM_NUMBER = 0
Const TABLE_PARTNUMBER = 1
Const TABLE_DESCRIPTION = 2
Const TABLE_QUANTITY = 3

' Excel column numbers
Const CELL_ITEM_NUMBER = 1
Const CELL_PARTNUMBER = 2
Const CELL_DESCRIPTION = 3
Const CELL_QUANTITY = 4

On Error GoTo HandleErr

' Connect to Excel
ConnectExcel 1
If ExcelServer Is Nothing Then
GoTo ExitHere
End If

' Open the parts list in Excel
On Error GoTo NO_BOM_WORKSHEET
Set objWorksheet = ExcelServer.ActiveWorkbook.Worksheets(BOM_SHEET_NAME)
On Error GoTo HandleErr

' Retrieve the AutoCAD modelspace, so we can look
' at the various entities in this drawing
Set objAutoCad = ThisDrawing.Application
Set objModelSpace = objAutoCad.ActiveDocument.ModelSpace()

' Walk through spreadsheet and grab data for our table in the drawing
' Note that we start at row 2 since we don't allow users to modify
' the header

For iRowNum = 2 To 26 ' Table numbers are hardcoded for this sample

CurrentItem = objWorksheet.Cells(iRowNum, CELL_ITEM_NUMBER).Value

' Look for corresponding table object and update data
For Each objEntity In objModelSpace

With objEntity

If StrComp(.EntityName, "AcDbBlockReference", 1) = 0 Then
If .HasAttributes Then
TableData = .GetAttributes

' Make sure we have the correct table entry and
' update with new data from Excel
If TableData(TABLE_ITEM_NUMBER).TextString = CurrentItem Then
TableData(TABLE_PARTNUMBER).TextString = objWorksheet.Cells(iRowNum, CELL_PARTNUMBER).Value
TableData(TABLE_DESCRIPTION).TextString = objWorksheet.Cells(iRowNum, CELL_DESCRIPTION).Value
TableData(TABLE_QUANTITY).TextString = objWorksheet.Cells(iRowNum, CELL_QUANTITY).Value
End If

End If
End If
End With
Next objEntity
Next iRowNum

ExitHere:
' Regenerate to see new table
ThisDrawing.Regen acAllViewports

Exit Sub

NO_BOM_WORKSHEET:
MsgBox "The AutoCAD bill of materials Worksheet was not found in the active Excel Workbook." & vbCrLf & vbCrLf & _
"Please load or regenerate the Workbook containing this Worksheet and make it the active Workbook.", vbExclamation
Exit Sub

HandleErr:
MsgBox "ImportData error " & Err.Number & " (" & Err.Description & ") from " & _
Err.Source, vbCritical, conDemoName
End Sub

 

 

j'ai bricoler pas mal et chercher a comprendre... mais je suis pas programmeur pour 2 sous...

un truc que je comprend particuliairement pas c'est cette partie

 

' AutoCAD Table Index
Const TABLE_ITEM_NUMBER = 0
Const TABLE_PARTNUMBER = 1
Const TABLE_DESCRIPTION = 2
Const TABLE_QUANTITY = 3

' Excel column numbers
Const CELL_ITEM_NUMBER = 1
Const CELL_PARTNUMBER = 2
Const CELL_DESCRIPTION = 3
Const CELL_QUANTITY = 4

 

 

..... en effet que si je change Const TABLE_QUANTITY = 2, ça tourne.... enfin pas comme je le souhaite...

car, mes objets comportents 3 atributs, et en changeant la variable seul les 2 1ere sont mis a jour...mais ça ne fait plus d'erreur et se termine normalement.

 

je capte pas pourquoi ces valeurs sont codée en dur...sauf peut etre que c'est un fichier d'exemple et que j'aurai pas du m'attendre a ce que ça fonctionne du 1er coup idem pour "For iRowNum = 2 To 26", là je teste avec 6 objets ça pase mais le vrai plan comporte 100 ou 150 projecteur a réfférencer...bon c'est pas le plus compliquer a modifier

 

si un gourou du vba passe par ici ce sera cool de m'éclairer un peu... j'avais posté sur le forum autocad2006 mais personne a d'idée, vrai que c'est pas vraiment de l'autocad ..

 

 

Posté(e)

bon...

 

me demandez pas pourquoi, mais si on suprime la ligne "TableData(TABLE_QUANTITY).TextString = objWorksheet.Cells(iRowNum, CELL_QUANTITY).Value"

 

ben ça marche...

merci a christophe, qui connais pas vba mais qui connait bien les débugger...

 

 

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é