Pour ceux qui cherchent : j'ai trouvé
Voici un code à adapter selon les besoins (mon code édite les dimensions d'une menuiserie)
Function editAcad(nomMenuiserie As String, largeurHorsTout As Double, hauteurHorsTout As Double, chantier As String)
Dim sSMenuiserie As AcadSelectionSet
Dim objBloc As AcadBlockReference
Dim objAttribut
Dim objAttributs As Variant
Dim i As Integer
Dim sSMenuiserieNom As String
sSMenuiserieNom = nomMenuiserie
'Recherché si la sélection existe
For Each sSMenuiserie In ThisDrawing.SelectionSets
If sSMenuiserie.Name = sSMenuiserieNom Then
sSMenuiserie.Delete
Exit For
End If
Next sSMenuiserie
'Création de la selection
Set sSMenuiserie = ThisDrawing.SelectionSets.Add(sSMenuiserieNom)
'Selection de la Menuiserie
sSMenuiserie.Select acSelectionSetAll
'Test de la sélection
If sSMenuiserie.Count > 0 Then
For Each objBloc In sSMenuiserie 'Parcourir tous les blocs de la sélection
If objBloc.IsDynamicBlock Then
objAttributs = objBloc.GetDynamicBlockProperties 'ATTRIBUTS DYNAMIQUES DU BLOC
'On Error Resume Next
For i = LBound(objAttributs) To UBound(objAttributs) ' parcours des att, comme For Each, mais avec 'iterateur'
'MsgBox objAttributs(i).Value
If UCase(objAttributs(i).PropertyName) = UCase("Etat d'inversion1") Then
objAttributs(i).Value = 1 'index de la liste : 2eme élément de la liste : "inversé"
End If
If UCase(objAttributs(i).PropertyName) = UCase("LARGEUR_HORS_TOUT") Then
objAttributs(i).Value = largeurHorsTout
End If
Next i 'end for
End If
If objBloc.HasAttributes Then 'vérifier si le bloc à des attributs
objAttributs = objBloc.GetAttributes 'ATTRIBUTS NORMAUX DU BLOC
'MsgBox objAttributs
For Each objAttribut In objAttributs
'MsgBox objAttribut.TagString
If UCase("CHANTIER") = UCase(objAttribut.TagString) Then
MsgBox objAttribut.TagString & " = " & objAttribut.TextString
objAttribut.TextString = chantier
End If
Next objAttribut
Exit For
End If
Next objBloc
End If
End Function
L'appel :
editAcad "PF_S_2VT", 1111#, 2222#, "chantier01"