x_all Posté(e) le 29 juin 2006 Posté(e) le 29 juin 2006 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 .. quelques trucs sur autocad
x_all Posté(e) le 1 juillet 2006 Auteur Posté(e) le 1 juillet 2006 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... quelques trucs sur autocad
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant