Macro plans détachés, attachés?

Bonjour,

Tous nos fichiers plans sont en mode déttachés sous SolidWorks et j'ai des cotes qui sautent.

Je souhaite ratacher les plans au solid.

Savez vous s'il existe une macro pour rendre les fichiers plans détachés, attachés?

en masse serait un + (4000 plans)

1 « J'aime »

actuellement je ne connais rien d'exsistant qui le ferrai.

je laisse la main au pro des Api pour apporté une réponse plus compléte

2 « J'aime »

Bonjour,

 

J'ai eu le même problème il y a 2 ans, solutionné en utilisant l'utilitaire Update version de MyCADServices.

 

Il faut décocher l'option "ne pas convertir les fichiers déja dans la version à convertir" et cocher l'option "enregistrer les mises en plan au format non détaché".

3 « J'aime »

Qu'est ce que le mode détaché ?

 

Edit : une petite recherche m'a permis de voir ce que c'était.

 

Si tu n'as pas les utilitaires MyCAD, ça n'est pas très compliqué avec une macro, mais il faut connaitre un peu le VBA !

 

Tu peux commencer par une macro par apprentissage pour voir quel est le code qui se cache derrière ce que tu fais quand tu converti en MEP attachée.

Bonjour,

 

Pour passer une mise en plan du type détachée au type attachée il faut utiliser l'API SaveAs Method (IModelDocExtension) avec l'option swSaveAsVersion égale à 3.

 

Ci-dessous un bout de code exemple qui fonctionne pour la mise en plan ouverte en remplacement le "chemin+nom de sauvegarde"

  Dim swApp As Object

  Dim swModel As SldWorks.ModelDoc2

  Dim swModelExt As SldWorks.ModelDocExtension

  Dim boolstatus As Boolean

  Dim ExportData As Object

  Dim Warnings As Long, Errors As Long

 

  Sub main()

 

  Set swApp = Application.SldWorks

  Set swModel = swApp.ActiveDoc

  Set swModelExt = swModel.Extension

  boolstatus = swModelExt.SaveAs("chemin+nom de sauvegarde", 3, 1, ExportData, Errors, Warnings)

 

  End Sub

 

Pour le traitement de masse, je n'ai pas de code sous la main pour faire une boucle sur tous les fichiers mise en plan d'un dossier. Quelqu'un d'autre peut-être?

 

1 « J'aime »

D'après vos réponse cela a l'air aisé, malheuresement je n'ai pas My cad services.fgirard tu a l'air de maitriser la programmation. Je n'ai jamais réalisé ce genre de choses. Le bout de script suffit il a convertir un fichier en attaché? faut il placer une macro dans chaque fichier? (jai 4000 plans autant les ouvrir 1 par 1 et enregistrer sous...cela sera moins compliqué?)

Est-ce que les 4000 plans sont tous dans le même répertoire?

Je regarde pour la macro complete qui traite tous les fichiers mise en plan dans 1 repertoire.

Je reviens dès que c'est fait.

merci fgirard. meme si la macro traite par paquet de plans, se serait quand meme interessant.

J'ai terminé la macro pour traiter toutes les mise en plan d'un répertoire.

La macro ouvre une boite de dialogue pour sélectionner un fichier à ouvrir.

Elle récupère ensuite l'emplacement du fichier et traite toutes les mises en plan s'y trouvant.

Voici le code :

 

Dim swApp As Object

Dim swModel As SldWorks.ModelDoc2

Dim swModelExt As SldWorks.ModelDocExtension

Dim boolstatus As Boolean

Dim ExportData As Object

Dim Warnings As Long, Errors As Long

Dim oFSO As Scripting.FileSystemObject

Dim oFld As Scripting.Folder

Dim oFile As Scripting.File

Dim chemin As String

Dim Filter                      As String

Dim fileName                    As String

Dim fileConfig                  As String

Dim fileDispName                As String

Dim fileOptions                 As Long

 

 

Sub main()

 

Set swApp = Application.SldWorks

 

'filtre sur mise en plan

Filter = "Mise en plan (*.slddrw)|*.slddrw|"

 

'ouverture boite de dialogue

fileName = swApp.GetOpenFileName("Sélectionner un fichier", "", Filter, fileOptions, fileConfig, fileDispName)

 

'vérif fichier sélectionné

If fileName = "" Then Exit Sub

 

'récupération du chemin

chemin = Left(fileName, InStrRev(fileName, "\"))

 

'déclaration FSO

Set oFSO = New Scripting.FileSystemObject

Set oFld = oFSO.GetFolder(chemin)

'boucle sur les fichiers du répertoire "chemin"

For Each oFile In oFld.Files

    'test type de fichier = mise en plan

    If oFile.Type = "SolidWorks Drawing Document" Then

        'ouverture de la mise en plan

        Set swModel = swApp.OpenDoc6(oFile.Path, swDocDRAWING, 1, "", Errors, Warnings)

        Set swModelExt = swModel.Extension

        'sauvegarde version attaché

        boolstatus = swModelExt.SaveAs(oFile.Path, 3, 1, ExportData, Errors, Warnings)

        'fermeture du fichier

        swApp.CloseDoc swModel.GetTitle

    End If

Next oFile

 

End Sub

 

 

 

3 « J'aime »

merci fgirard, n'ayant jamais fait de macro je vais essayer ton programme. Bonne journée.

 

Avec l'outil Integration de myCADtools on peut lancer une macro en batch en utilisant les opérations disponible dans integration.

 

Cela permet rapidement de créer un macro simple et de la lancer en masse sur un grand nombre de fichiers.

 

Philou

3 « J'aime »

Merci prossignol, ce sera la solution si je narrive pas a creer la macro.

Je n'ai pas réussi a faire tourner la macro.

fgirard, tu dis que tu as créé la macro. Si je pouvais abuser, pourrais tu m'envoyer un fichier quelconque avec plan associé integrant la macro? Bonnes fetes

Ci-joint le fichier swp de la macro.

Tu l'enregistres sur ton PC.

Ensuite tu fais "outil/macro/éxecuter"

Tu sélectionnes le fichier "Detache.swp"

Une fenêtre s'ouvre, tu sélectionnes le premier fichier slddrw dans le dossier où se trouvent tes plans à convertir.

Tu regardes le logiciel ouvrir et enregistrer tes plans tout seul comme un grand.

 

Ca c'est la théorie. Dans la pratique tu peux avoir des problêmes avec des références à des .dll non active et des problêmes avec le code en lui-même.

 

Lance la macro une fois et si tu as un message d'erreur, fais une copie d'écran et post le. Je verrai ce que je peux faire.

 

Autrement, comme le signal prossignol intégration est un outil très puissant qui peux faire le job.

 

Bonne fêtes à tous.

 


detache.swp
1 « J'aime »