Du coup tu trouveras dans le zip ci-joint une DLL nommée RELOAD_XREF.dll.
Il se peut que tu ais besoin de la débloquer car transmise par internet.
Pour le savoir faire un clic-droit dessus, puis propriétés, s'il y a le bouton "Débloquer" (ou case à cocher selon la version de Windows)
Exemple :
Une fois débloquer, elle se charge dans AutoCAD via la commande NETLOAD
Tu auras ensuite accès à la commande RELOAD_XREF
Je te conseille de créer un dossier dans lequel tu mets cette DLL et d'ajouter ce dossier dans les "Chemins de recherche des fichiers de support de travail" ainsi que dans les "Emplacements approuvés" (Outils\Options onglet fichier)
Nota , les fichiers envoyés n'étaient pas des e-transmit et donc ne permettaient pas de faire des tests car je n'avais pas les XREF associés.
Ci-dessous le code :
Option Compare Text
Imports System.IO
Imports System.Linq
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.Runtime
Public Class CmdXREF
<CommandMethod("RELOAD_XREF")>
Public Sub RELOAD_XREF()
Dim doc As Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
Dim db As Database = doc.Database
Dim ed As Editor = doc.Editor
Dim FpDWG As String = doc.Name
Dim FnDWG As String = FpDWG.Split("\").Last
Dim FpDoss As String = Microsoft.VisualBasic.Left(FpDWG, Len(FpDWG) - Len(FnDWG))
Dim TMP() As String
TMP = FpDWG.Split("\")
Dim TMP_X() As String
Dim collection As ObjectIdCollection = New ObjectIdCollection()
Using tr As Transaction = db.TransactionManager.StartTransaction()
Dim bt As BlockTable = TryCast(tr.GetObject(db.BlockTableId, OpenMode.ForRead), BlockTable)
For Each btrId As ObjectId In bt
Dim btr As BlockTableRecord = TryCast(tr.GetObject(btrId, OpenMode.ForRead), BlockTableRecord)
If btr.IsFromExternalReference Then
btr.UpgradeOpen()
Dim oldPath As String = btr.PathName
Dim oldFN As String = oldPath.Split("\").Last
Dim FpDossXREF As String = ""
If oldPath Like "..\*" Then
TMP_X = oldPath.Split("\")
Dim NbRetour As Integer = 0
For i As Integer = 0 To UBound(TMP_X)
If TMP_X(i) = ".." Then NbRetour += 1
Next
Dim TmpPath As String = ""
For i As Integer = 0 To UBound(TMP) - (NbRetour + 1)
If TmpPath = "" Then
TmpPath = TMP(i)
Else
TmpPath = TmpPath & "\" & TMP(i)
End If
Next
For i As Integer = 0 To UBound(TMP_X) - 1
If TMP_X(i) <> ".." Then
TmpPath = TmpPath & "\" & TMP_X(i)
End If
Next
FpDossXREF = TmpPath & "\"
ElseIf oldPath Like ".\*" Then
FpDossXREF = FpDoss & Microsoft.VisualBasic.Right(oldPath, Len(oldPath) - 2)
FpDossXREF = Microsoft.VisualBasic.Left(FpDossXREF, Len(FpDossXREF) - Len(oldFN))
Else
FpDossXREF = Microsoft.VisualBasic.Left(oldPath, Len(oldPath) - Len(oldFN))
End If
If Not Directory.Exists(FpDossXREF) Then
MsgBox("Le dossier " & FpDossXREF & " n'a pas été trouvé", MsgBoxStyle.Exclamation, "Annulation")
Exit Sub
End If
Dim newFN As String = ""
Dim newPath As String = ""
Dim Texte_a_trouver = Microsoft.VisualBasic.Right(oldFN, Len(oldFN) - Len(oldFN.Split("-").First))
Dim di As System.IO.DirectoryInfo = New System.IO.DirectoryInfo(FpDossXREF)
For Each fi As System.IO.FileInfo In di.GetFiles
If fi.Name Like "*" & Texte_a_trouver Then
newFN = fi.Name
Exit For
End If
Next
If newFN <> "" Then
newPath = oldPath.Replace(oldFN, newFN)
btr.PathName = newPath
btr.Name = Microsoft.VisualBasic.Left(newFN, Len(newFN) - 4) ' -4 pour ".dwg"
collection.Add(btrId)
ed.WriteMessage(String.Format("{0}Ancien chemin : {1} Nouveau Chemin : {2}", Environment.NewLine, oldPath, newPath))
End If
End If
Next
tr.Commit()
End Using
If collection.Count > 0 Then
db.ReloadXrefs(collection)
End If
db.SaveAs(db.OriginalFileName, True, db.OriginalFileVersion, db.SecurityParameters)
End Sub
End Class
A+ Yoan
Yoan AUBRY