Renommage dossier, pièces, sous-ensemble et plans

vos questions concernant les API SolidWorks

Renommage dossier, pièces, sous-ensemble et plans

Messagepar Agadoudou » Jeu 12 Nov 2015, 11:44

Bonjour à tous,

J'ai vraiment peur de poser une question qui a déjà été posée 100 fois, mais je cherche sur le forum depuis lundi, et je n'ai rien trouvé d'explicite en fait...

Ce que je voudrais faire, c'est depuis un Ensemble ou une mise en plan d'ensemble, exécuter une macro pour ouvrir chaque pièce (ou sous-ensemble), l’enregistrer avec un nouveau nom et faire pareil avec sa mise en plan. La mise en plan portera le même nom que la pièce.

J'ai commencé ce bout de code qui doit être un peu olé-olé et d'ailleurs, si il y a des trucs pas propres, je veux bien qu'on m'explique :

Code: Tout sélectionner
Sub Renommage_Solid()

Set swApp = _
Application.SldWorks
Dim Sw_Model As SldWorks.ModelDoc2
Dim OldName, NewName As String
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

OldName = "Ecrou"
NewName = "Ecrou - Copié"

'Ouverture pièce
Set Part = swApp.ActiveDoc
Set Part = swApp.OpenDoc6("C:\Users\technicien.be\Desktop\TEST\" & OldName & ".SLDPRT", 1, 0, "", longstatus, longwarnings)

'Ouverture plan
Set Part = swApp.OpenDoc6("C:\Users\technicien.be\Desktop\TEST\" & OldName & ".SLDDRW", 3, 0, "", longstatus, longwarnings)

'Enregistre copie sous du plan
swApp.ActivateDoc2 OldName & " - Feuille1", False, longstatus
Set Sw_Model = swApp.ActiveDoc
Sw_Model.Save
Dim GetSAve As Boolean
GetSAve = Sw_Model.SaveAs4("C:\Users\technicien.be\Desktop\TEST\" & NewName & ".SLDDRW", swSaveAsCurrentVersion, swSaveAsOptions_Silent, 0, 0)

'Enregistre copie sous de la pièce
swApp.ActivateDoc2 OldName & ".SLDPRT", False, longstatus
Set Sw_Model = swApp.ActiveDoc
GetSAve = Sw_Model.SaveAs4("C:\Users\technicien.be\Desktop\TEST\" & NewName & ".SLDPRT", swSaveAsCurrentVersion, swSaveAsOptions_Silent, 0, 0)

'Fermeture des pièces et plans
swApp.CloseDoc NewName & ".SLDPRT" 'sans sauvegarde
longstatus = Part.Save 'Sauvegarde du plan
swApp.CloseDoc NewName & " - Feuille1"

'Revient au plan d'ensemble
swApp.ActivateDoc2 "Coffrets - Feuille1", False, longstatus
Set Part = swApp.ActiveDoc
longstatus = Part.Save 'Sauvegarde du plan

End Sub


Ce code me permet donc d'ouvrir et renommer la pièce et son plan sans les supprimer du dossier. Je ferais le nettoyage à la fin.

Là où il y a un HIC, c'est concernant mes variables :

Code: Tout sélectionner
OldName = "Ecrou"
NewName = "Ecrou - Copié"


Pour l'instant elle sont en dur, mais j'aimerais que la macro balaye les éléments composant l'assemblage un a un et qu'il mette en lieu et place de la variable OldName.

Pour la Newname, je la rentrerai soit par une userform soit par un tableau excel... je sais pas trop encore.

Ensuite, une fois que la pièce (ou SE) est renommée, j'aimerais y intégrer des propriétés personnalisées. Mais là encore, j'ai cru comprendre qu'on pouvait écrire dans les fichiers mais que le volet de droite (Propriétés personnalisées) n'affichait pas ces valeurs...

Image

Si c'est vraiment le cas, je les remplirait "à la main". Si elles s'affichent dans le volet de propriétés personnalisées alors oui, je complèterais mon code pour qu'elles se remplissent via l'userform ou via Excel.

Pour ce qui est des éléments du commerce ou standards... je sais pas trop comment m'y prendre... peut-être un filtre... je sais pas, je verrais plus tard...

Merci pour vos aides...

Tchuss

Agadoudou qui pousse la banane. (Patrick Zabé si tu nous regarde... on t'aime)
Merci à TOUS !!!!!
Agadoudou
Padawan SolidWorks
 
Messages: 84
Inscription: Ven 13 Avr 2012, 7:19
Localisation: Clermont Fd

Re: Renommage dossier, pièces, sous-ensemble et plans

Messagepar liryc » Jeu 12 Nov 2015, 12:03

Bonjour,

Moi je mouds le café :D
Sinon, j'ai regardé rapidement le code, je pense que passer par le module de composition à emporter en renommant les fichier serait peut-être plus simple.
Celui-ci est utilisable dans les macro, voir fonction packandgo.
liryc
Chevalier Jedi SolidWorks
 
Messages: 479
Inscription: Ven 02 Mar 2007, 8:14
Localisation: Paris - SW2009 SP5.0

Re: Renommage dossier, pièces, sous-ensemble et plans

Messagepar Agadoudou » Jeu 12 Nov 2015, 13:36

Haaaaaa !!! Les classiques.... :lol:

Revenons à nos moutons....

Si je passe par la composition à emporter, je ne pourrais qu'ajouter des préfixes ou suffixes non ? Moi je veux changer tout le nom des fichiers...
Merci à TOUS !!!!!
Agadoudou
Padawan SolidWorks
 
Messages: 84
Inscription: Ven 13 Avr 2012, 7:19
Localisation: Clermont Fd

Re: Renommage dossier, pièces, sous-ensemble et plans

Messagepar liryc » Jeu 12 Nov 2015, 13:55

Les deux mon capitaine.
La fonction permet le renommage des fichiers et a surtout l'avantage de conserver correctement les liens.
liryc
Chevalier Jedi SolidWorks
 
Messages: 479
Inscription: Ven 02 Mar 2007, 8:14
Localisation: Paris - SW2009 SP5.0

Re: Renommage dossier, pièces, sous-ensemble et plans

Messagepar Agadoudou » Jeu 12 Nov 2015, 14:07

Ok, mais comment ça fonctionne... là j'ai trouvé ça dans l'aide API :

Code: Tout sélectionner
Option Explicit

Dim swApp As SldWorks.SldWorks
Dim swModelDoc As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swPackAndGo As SldWorks.PackAndGo
Dim openFile As String
Dim myFileName As String
Dim pgFileNames As Variant
Dim pgFileStatus As Variant
Dim pgSetFileNames() As String
Dim pgGetFileNames As Variant
Dim pgDocumentStatus As Variant
Dim status As Boolean
Dim warnings As Long
Dim errors As Long
Dim i As Long
Dim j As Long
Dim namesCount As Long
Dim myPath As String
Dim statuses As Variant

Sub main()

Set swApp = Application.SldWorks

' Open assembly
openFile = "C:\Users\technicien.be\Desktop\TEST\Coffrets.sldasm"
Set swModelDoc = swApp.OpenDoc6(openFile, swDocASSEMBLY, swOpenDocOptions_Silent, "", errors, warnings)
Set swModelDocExt = swModelDoc.Extension

' Get Pack and Go object
Debug.Print "Pack and Go"
Set swPackAndGo = swModelDocExt.GetPackAndGo

' Get number of documents in assembly
namesCount = swPackAndGo.GetDocumentNamesCount
Debug.Print "  Number of model documents: " & namesCount

' Get current paths and filenames of the assembly's documents
status = swPackAndGo.GetDocumentNames(pgFileNames)
Debug.Print ""
Debug.Print "  Current path and filenames: "
If (Not (IsEmpty(pgFileNames))) Then
    For i = 0 To UBound(pgFileNames)
        Debug.Print "    The path and filename is: " & pgFileNames(i)
    Next i
End If

' Get current save-to paths and filenames of the assembly's documents
status = swPackAndGo.GetDocumentSaveToNames(pgFileNames, pgFileStatus)
Debug.Print ""
Debug.Print "  Current default save-to filenames: "
If (Not (IsEmpty(pgFileNames))) Then
    For i = 0 To UBound(pgFileNames)
        Debug.Print "   The path and filename is: " & pgFileNames(i)
    Next i
End If

' Folder where to save the files
myPath = "C:\Users\technicien.be\Desktop\temp"

' Create your own filenames for the model's documents
ReDim pgSetFileNames(namesCount - 1)
Debug.Print ""
Debug.Print "  My Pack and Go path and filenames before adding prefix and suffix: "
j = 0
For i = 0 To (namesCount - 1)
         myFileName = pgFileNames(i)
         ' Determine type of SolidWorks file based on file extension
             If InStr(LCase(myFileName), "sldprt") > 0 Then
                 myFileName = j & ".sldprt"
             ElseIf InStr(LCase(myFileName), "sldasm") > 0 Then
                 myFileName = j & ".sldasm"
            ElseIf InStr(LCase(myFileName), "slddrw") > 0 Then
                 myFileName = j & ".slddrw"
             Else
                 ' Only packing up SolidWorks files
                 Exit Sub
             End If
        pgSetFileNames(i) = myPath & myFileName
        Debug.Print "    My path and filename is: " & pgSetFileNames(i)
         j = j + 1
Next i

' If a drawing document existed for the assembly or part document
' used in this example, then you have to ensure that the
' drawing document copied by Pack and Go references the assembly
' or part document copied by Pack and Go and not the original
' assembly or part document
' Calling IPackAndGo::SetSaveToName sets the target for drawings
' included in Pack and Go and overrides a call to
' IPackAndGo::SetDocumentSaveToNames
'status = swPackAndGo.SetSaveToName(True, myPath)

' Set document paths and names for Pack and Go
status = swPackAndGo.SetDocumentSaveToNames(pgSetFileNames)

' Add a prefix and suffix to the new Pack and Go filenames
swPackAndGo.AddPrefix = "SW"
swPackAndGo.AddSuffix = "PackAndGo"

 ' Verify document paths and filenames after adding prefix and suffix
ReDim pgGetFileNames(namesCount - 1)
ReDim pgDocumentStatus(namesCount - 1)
status = swPackAndGo.GetDocumentSaveToNames(pgGetFileNames, pgDocumentStatus)
Debug.Print ""
Debug.Print "  My Pack and Go path and filenames after adding prefix and suffix: "
For i = 0 To (namesCount - 1)
     Debug.Print "    My path and filename is: " & pgGetFileNames(i)
Next i

' Pack and Go
statuses = swModelDocExt.SavePackAndGo(swPackAndGo)

End Sub


En l'essayant, je vois bien qu'il me fait une copie du dossier mais il me renomme ça juste avec des préfixes et suffixes...

Moi je voudrais que le fichier qui s'appelle par exemple : Banane.sldprt .... par exemple...

devienne Ananas.sldprt.... par exemple aussi....
Merci à TOUS !!!!!
Agadoudou
Padawan SolidWorks
 
Messages: 84
Inscription: Ven 13 Avr 2012, 7:19
Localisation: Clermont Fd

Re: Renommage dossier, pièces, sous-ensemble et plans

Messagepar liryc » Jeu 19 Nov 2015, 11:08

Bonjour,

Pas trop le temps en ce moment de regarder plus que ça mais la fonction semble avoir des bugs dans son accès via les api.
Je regadre dès que j'ai un peu plus de temps.
liryc
Chevalier Jedi SolidWorks
 
Messages: 479
Inscription: Ven 02 Mar 2007, 8:14
Localisation: Paris - SW2009 SP5.0

Re: Renommage dossier, pièces, sous-ensemble et plans

Messagepar Agadoudou » Mar 15 Déc 2015, 11:04

Salut,

J'ai trouvé un bout de code qui fait l'affaire. En gros, je me sers de la fonction de pack and go pour compter les occurrences présentes dans l'ensemble et je fais des "enregistrer sous" pour renommer et remplacer les fichiers. C'est bourrin je vous l'accorde, mais ça fonctionne au poil !

Là où j'ai un hic, c'est que par exemple sur mon poste de travail, j'ai 3 versions de solid (2012,2013 et 2014). Suivant pour quel client je bosse, la version va changer. Comment puis-je donner le choix de la version à l'utilisateur avant le lancement de Solid ???

Ha ha ha !!!! Elle est bonne la question hein ???
Merci à TOUS !!!!!
Agadoudou
Padawan SolidWorks
 
Messages: 84
Inscription: Ven 13 Avr 2012, 7:19
Localisation: Clermont Fd


Retourner vers Questions générales sur les API

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 7 invités

banniere