Aller au contenu

liaison d\'attribut de bloc avec excel


Messages recommandés

Posté(e)

boujour les cadipciens :D

 

j'ai un travail trés répétitif de mise a jour d'attribut a faire....

 

j'ai donc chercher a faire ça avec excel...

 

j'ai créer des blocs avec un N° de reférence plus les atributs que je doit metre a jour...

heureux utilisateur d'autocad 2006, j'ai essayer d'utiliser "ExcelLink.dvb"

 

1er soucis, le script ne reconaissait pas ma verstion d'excel (office 2003)

 

j'ai donc rajouter :

 

'---------------------------------

' Try to find a version of Excel 11

'---------------------------------

 

' Attempt to activate an existing instance

Err.Clear

Set ExcelServer = GetObject(, "Excel.Application.11")

If Err.Number = 0 Then

ExcelVer = 11

GoTo FINISH

End If

 

' Create a new instance

Err.Clear

Set ExcelServer = CreateObject("Excel.Application.11")

If Err.Number = 0 Then

ExcelVer = 11

GoTo FINISH

End If

 

dans le code .. depuis, ça marche trés bien, .... a l'exportation.

 

un clic sur le bouton d'export ouvre excel, et rempli un tableau avec le listing de mes blocs

mais la ou ça se corse, c a l'importation... quand je veux faire une mise a jour de mes bloc aprés corection des références dans excel j'ai un mesage pas cool:

" ImportData error 9 (l'indice n'appartien pas à la selection.) from ExcelLink"

 

mes maigres notions de vba ne m'ont pas permis de trouver l'origine de ce bug... en effet, ce message semble pas etre ds le code de la macro.... le mess vient t il d'excel?

seulle le 1ere attribut que je corige est mis a jour...

 

 

bref je sèche... si qqu1 a réussi a faire marcher cette macro avec excel 2003 ....

 

merci d'avance [Edité le 28/6/2006 par x_all]

 

[Edité le 28/6/2006 par x_all]

Posté(e)

semble que je suis pas encore bien au pts avec votre forum aussi <acronym class=dict title=

je recopie le post qu j'ai du mal à éditer....

 

 

boujour les cadipciens :D

 

j'ai un travail trés répétitif de mise a jour d'attribut a faire....

 

j'ai donc chercher a faire ça avec excel...

 

j'ai créer des blocs avec un N° de reférence plus les atributs que je doit metre a jour...

heureux utilisateur d'autocad 2006, j'ai essayer d'utiliser "ExcelLink.dvb"

 

1er soucis, le script ne reconaissait pas ma verstion d'excel (office 2003)

 

j'ai donc rajouter :

 

'---------------------------------

' Try to find a version of Excel 11

'---------------------------------

 

' Attempt to activate an existing instance

Err.Clear

Set ExcelServer = GetObject(, "Excel.Application.11")

If Err.Number = 0 Then

ExcelVer = 11

GoTo FINISH

End If

 

' Create a new instance

Err.Clear

Set ExcelServer = CreateObject("Excel.Application.11")

If Err.Number = 0 Then

ExcelVer = 11

GoTo FINISH

End If

 

dans le code .. depuis, ça marche trés bien, .... a l'exportation.

 

un clic sur le bouton d'export ouvre excel, et rempli un tableau avec le listing de mes blocs

mais la ou ça se corse, c a l'importation... quand je veux faire une mise a jour de mes bloc aprés corection des références dans excel j'ai un mesage pas cool:

" ImportData error 9 (l'indice n'appartien pas à la selection.) from ExcelLink"

 

mes maigres notions de vba ne m'ont pas permis de trouver l'origine de ce bug... en effet, ce message semble pas etre ds le code de la macro.... le mess vient t il d'excel?

seulle le 1ere attribut que je corige est mis a jour...

 

 

bref je sèche... si qqu1 a réussi a faire marcher cette macro avec excel 2003 ....

 

merci d'avance

Posté(e)

bhouuuu !!! personne ne m'aime....

 

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 comportent 3 atributs, et en changeant la variable seul les 2 1ere sont mis a jour...

(j'envoie les plans avec un index, et on me renvoie les 2 attibuts positioner...)

 

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 <acronym class=dict title=

indem 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 ya un gourou du vba qui pase par se message je serai heureux qu'il m'éclaire un peu... je patauge ..

:(

 

d'autant que ce genre de méga macro sera utile a plus d'un je crois... [Edité le 28/6/2006 par x_all][Edité le 28/6/2006 par x_all]

 

[Edité le 28/6/2006 par x_all]

Posté(e)

Salut

Cela aurait été en vlisp, je t'aurais volontier donné un coup de main et de plus, tu aurais du poster ton message dans le rubrique VBA, tu aurais eu peut-être plus de réponses

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

j'ai pas eu plus de réponce dans le forun vba...

 

mais un bon poto m'a trouvé la chenille...

 

il faut supprimer la ligne "TableData(TABLE_QUANTITY).TextString = objWorksheet.Cells(iRowNum, CELL_QUANTITY).Value"

 

me demandez pas pourquoi.. ni surtout pourquoi il y avait cette ligne ... mais ça marche ... :casstet:

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é