Bonjour,
Pas de soucis, j'espère que tu arriveras à programmer le reste.
Pour le reste, du coup, je te conseille de faire quelque chose comme cela (je n'ai pas fait de test)
Public Sub ExportNomenclatureTeemo()
Call Concat_Mat
Call Ecriture_Nomenclature1
Call Ecriture_Nomenclature2
'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
'Rend AutoCAD visible
AcadApp.Visible = True
'ou sinon, utilise le document ouvert :
Set AcadPlan = AcadApp.ActiveDocument
Dim Cible As Integer, i As Integer, j As Integer
Dim Repertoireactuel As String
Dim Name As String
Dim nbcar As Integer
Dim val As Integer
' --- Demande du chemin pour export ---
Name = AcadPlan.Name
Name = Left(Name, Len(Name) - 4)
Dim Wb As Workbook
Set Wb = ActiveWorkbook
Dim WsR As Worksheet
Set WsR = Wb.Worksheets("Resultats")
Dim DL As Integer 'dernière ligne du tableau
DL = WsR.Cells(Rows.Count, 1).End(xlUp).Row
If MsgBox("Voulez vous exporter la Nomenclature sur la feuille active:" & vbLf & Name & " ?", 4 + 64 + 256, "Chemin d'acces") = 6 Then
Dim ent As AcadEntity
Dim Block, BlkTSO As AcadBlockReference
Dim bFound As Boolean
bFound = False
For Each ent In ThisDrawing.PaperSpace
If TypeOf ent Is AcadBlockReference Then
Set Block = ent
If UCase(Block.EffectiveName) = "TSO-anc" Then
Set BlkTSO = Block
bFound = True
Exit For
End If
End If
Next
'Si le bloc "TSO-anc" a été trouvé
If bFound = True Then
'Récupération de la position X, Y du bloc TSO pour pouvoir ajouter les
'blocs Nom_Anc avec une position relative par rapport à ce bloc
Dim X_TSO, Y_TSO As Double
X_TSO = Block.InsertionPoint.X
Y_TSO = Block.InsertionPoint.Y
'Mise à jour des attributs du bloc TSO-anc
Dim Att As Variant
Dim AttCount As Integer
For Each Att In BlkTSO.GetAttributes
Select Case Att.TagString
'A modifier
Case "AAAA"
Att.TextString = WsR.Range("A" & 1).Value
Case "BBBB"
Att.TextString = WsR.Range("A" & 1).Value
Case "CCCC"
Att.TextString = WsR.Range("A" & 1).Value
Case "DDDD"
Att.TextString = WsR.Range("A" & 1).Value
End Select
Next
BlkTSO.Update
Dim NumCol, NbL_Anc1, NbL_Anc2 As Integer
NbL_Anc1 = 0 'Nombre de ligne du coté Ancrage 1 pour la gestion du Y de l'insertion des blocs
NbL_Anc2 = 0
For NumCol = 13 To DL
If WsR.Range("B" & NumCol).Value <> "" Then
If WsR.Range("B" & NumCol).Value = "------------------------------------------------" Then
NbL_Anc1 = NbL_Anc1 + 1
Else
Dim DESIGNATION, PLAN, REPERE, QTE As String
DESIGNATION = WsR.Range("A" & NumCol).Value
PLAN = WsR.Range("B" & NumCol).Value
REPERE = WsR.Range("C" & NumCol).Value
QTE = WsR.Range("D" & NumCol).Value
'Insertion d'un bloc "Nom_Anc" dans l'espace papier en coursavec mise à jour des attributs
Insert_Bloc_Nom_Anc AcadPlan, X_TSO + 10, Y_TSO + 110 - 3.692 * NbL_Anc1, DESIGNATION, PLAN, REPERE, QTE
NbL_Anc1 = NbL_Anc1 + 1
End If
End If
Next
For NumCol = 13 To DL
If WsR.Range("F" & NumCol).Value <> "" Then
If WsR.Range("F" & NumCol).Value = "------------------------------------------------" Then
NbL_Anc2 = NbL_Anc2 + 1
Else
Dim DESIGNATION, PLAN, REPERE, QTE As String
DESIGNATION = WsR.Range("F" & NumCol).Value
PLAN = WsR.Range("G" & NumCol).Value
REPERE = WsR.Range("H" & NumCol).Value
QTE = WsR.Range("I" & NumCol).Value
'Insertion d'un bloc "Nom_Anc" dans l'espace papier en coursavec mise à jour des attributs
Insert_Bloc_Nom_Anc AcadPlan, X_TSO + 105, Y_TSO + 110 - 3.692 * NbL_Anc2, DESIGNATION, PLAN, REPERE, QTE
NbL_Anc2 = NbL_Anc2 + 1
End If
End If
Next
End If
End If
End Sub
Public Sub Insert_Bloc_Nom_Anc(AcadPlan As AcadDocument, X As Double, Y As Double, ByVal DESIGNATION As String, ByVal PLAN As String, ByVal REPERE As String, ByVal QTE As String)
Dim objBRef As AcadBlockReference
Dim PtIns(0 To 2) As Double
PtIns(0) = X
PtIns(1) = Y
PtIns(2) = 0
Dim Att As Variant
Dim AttCount As Integer
Set objBRef = AcadPlan.PaperSpace.InsertBlock(PtIns, "Nom_Anc", 1, 1, 1, 0)
objBRef.Layer = "0"
objBRef.Update
For Each Att In objBRef.GetAttributes
Select Case Att.TagString
Case "DESIGNATION"
Att.TextString = DESIGNATION
Case "PLAN"
Att.TextString = PLAN
Case "REPERE"
Att.TextString = REPERE
Case "QTE"
Att.TextString = QTE
End Select
Next
objBRef.Update
End Sub
Yoan AUBRY
