Macro packandgo (composition à emporter)

Pour intégrer les mises en plan tu dois ajouter :

swPackAndGo.IncludeDrawings = True

 

Voir ici.

1 « J'aime »

A remrem, oui cette ligne est bien mise dans la macro proposée :

' Include any drawings, SOLIDWORKS Simulation results, and SOLIDWORKS Toolbox components
swPackAndGo.IncludeDrawings = True
swPackAndGo.IncludeSimulationResults = True
swPackAndGo.IncludeToolboxComponents = True

mais effectivement, lors du changement de nom des fichiers inclus dans le PackAndGo, le nom du fichier 2D n'est pas pris en compte, je n'ai pas trouvé de fonction permettant de renommer ces plans de manière automatique, comme on peut trouver dans la fonction "Sélectionner / Remplacer..." du Pack and Go :

Si tu as cette fonction via les API, je suis aussi preneur...

Cordialement,

Merci de vos réponses désolé pour la repose tardive,

cela fonctionne au niveau de l'exclusion des pieces sans "xxxxx" par contre cela me copie les plans des pieces sans "xxxxx", est -ce possible de les enlever?

Bonjour,

Je pense que cela n'est pas possible, ou tout au moins je connais pas la fonction permettant de le faire, mais tu peux prévoir dans ta macro de récupérer le nom de tous ces fichiers (sans oublier les préfixes et suffixes) au moment du pgFileNames(i) = "" puis de supprimer tous les plans concernés, après la fonction de PackAndGo, par les fonctions VBA standard de gestion des fichiers.

Cordialement,

oui au final c'est ce que je viens de faire.

par contre quand je lance la macro depuis solidworks cela fonctionne mais je l'excute depuis le fichier excel cela ne fonctionne pas.

Avez-vous une idée?

Donne nous ton code final dans Excel.

As tu exécuté en mode en pas à pas ?

j'ai pris le code SW que j'ai mis dans Excel 

 

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 pgFileNames As Variant
Dim pgFileStatus As Variant
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 namesCount As Long
Dim myPath As String
Dim statuses As Variant

Sub main()

    Set swApp = Application.SldWorks

    ' Open assembly
    Set swModelDoc = swApp.ActiveDoc
    'openFile = "C:\Users\DRO\Desktop\Nouveau dossier\Assemblage1.SLDASM"
    'Set swModelDoc = swApp.OpenDoc6(openFile, swDocASSEMBLY, swOpenDocOptions_Silent, "", errors, warnings)
    'Set swModelDoc = swApp.ActiveDoc
    Set swModelDocExt = swModelDoc.Extension
              

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

    ' Get number of documents in assembly
    namesCount = swPackAndGo.GetDocumentNamesCount

    ' Include any drawings, SOLIDWORKS Simulation results, and SOLIDWORKS Toolbox components
    swPackAndGo.IncludeDrawings = True
    swPackAndGo.IncludeSimulationResults = True
    swPackAndGo.IncludeToolboxComponents = True

    ' Get current paths and filenames of the assembly's documents
    'status = swPackAndGo.GetDocumentNames(pgFileNames)

    ' Get current save-to paths and filenames of the assembly's documents

    status = swPackAndGo.GetDocumentSaveToNames(pgFileNames, pgFileStatus)


    ' Set document paths and names for Pack and Go
    For i = 0 To (namesCount - 1)
        If InStr(pgFileNames(i), "xxxxx") <> 0 Then
            pgFileNames(i) = Replace(pgFileNames(i), "xxxxx", "85000")
        Else
        pgFileNames(i) = ""
        End If
    Next i
    status = swPackAndGo.SetDocumentSaveToNames(pgFileNames)
    

    ' Set folder where to save the files
    
    myPath = "G:\Intégration\BA\QRM\enregistrement\85000\"
    status = swPackAndGo.SetSaveToName(True, myPath)
    
    ' Flatten the Pack and Go folder structure; save all files to the root directory
    swPackAndGo.FlattenToSingleFolder = True

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

End Sub

 

Donc il doit te manquer des choses dans Outils / Références ... de l'éditeur de macros Excel !!!

Et il faut créer un objet Solidworks et s'y rattacher ce qui est fait automatiquement via les macros Solidworks mais pas à partir de Excel ...

Comment fait-on cela?

Ben !!!! Euh !!!! Comment dire !!!! Peut-être comme je te l'ai déjà indiqué lors de ta question qui se trouve ICI, dans ma première réponse du 24/01/2019, là ou il y a :

Sub Macro()
    
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2

Set swApp = CreateObject("SldWorks.Application")
swApp.Visible = True
        
Set swModel = swApp.ActiveDoc

....

End Sub

 

Sans oublier les références à mettre dans "outils / référence ....", notamment celle à "SLDWORKS xxxx type library".

Cordialement,

Bonjour, 

au niveau des references j'ai bien les memes.

Par contre j'ai fait un appel de Solidworks par la fonction

Set swApp = Application.SldWorks

alors que la fonction qui marche est :

Set swApp = CreateObject("SldWorks.Application")

Quel est la difference entre Application.SldWorks et CreateObjet("SldWorks.Application")?

car j'ai des macro Excel qui fonctionne avec Application.SldWorks

Je vous remercie.

Bonjour,

Regarde par ICI, tu y trouveras les explications demandées.

Cordialement,

1 « J'aime »

Great material,

If you want to replace the path too I could do it this way:

  For i = 0 To (namesCount - 1)
        If InStr(pgFileNames(i), "ActualName") <> 0 Then
            pgFileNames(i) = Replace(pgFileNames(i), "ActualName", "NameToReplace")
         End If
       '  If InStr(pgFileNames(i), myPath)
          pgFileNames(i) = Replace(pgFileNames(i), "ParentFolder", "ParentFolder\ChildFolder")
         Debug.Print pgFileNames(i)
         'End If
    Next i

independent of the path declared