macro packandgo (composition à emporter)

Bonjour a tous,

J'essaie de faire fonctionne cette macro extrait de l'aide solidworks mais elle ne fonctionne pas sous solidworks

Quelqu'un peut-il m'aider?

http://help.solidworks.com/2015/English/api/sldworksapi/Pack_and_Go_an_Assembly_Example_vb.htm?verRedirect=1

 

 

Bonjour,

Pour moi elle fonctionne très bien, sous réserve de modifier le chemin du fichier à ouvrir ("C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\samples\tutorial\advdrawings\handle.sldasm") qui n'existe pas sur mon PC et de le remplacer par un chemin valide.

Cordialement,

oui j'ai bien changé le chemin 

mais cela me donne une erreur "erreur d'execution '91': Variable objet ou varable de bloc With non définie" lorsque que je fais débogage cela but sur "Set swModelDocExt = swModelDoc.Extension" au début du programme

Par contre j'ai copié le code dans un fichier .SWP et je l'execute la macro depuis solidworks, je ne vois pas pourquoi cela ne fonctionne pas.

est-ce que je n'aurais pas une reference de bibilotheque manquantes?

 

Salut,

Non. Si tu avais une références manquantes, tu aurais un autre type d'erreur.

Je pense que tu as une erreur de chemin, de droit ou de lecture seule. Et ton objet swModelDoc doit rester vide. Essaye de faire un pas à pas avec [F5] pour vérifier la valeur de ton objet.

1 « J'aime »

C'est exactement ce que j'ai fait et j'ai les mêmes références que toi (à la version de SW prêt).

Es-tu sur que les chemins et noms d'assemblage que tu as mis sont valides ?

Pour voir si cela vient de là, remplace les lignes :

openFile = "C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\samples\tutorial\advdrawings\handle.sldasm"
Set swModelDoc = swApp.OpenDoc6(openFile, swDocASSEMBLY, swOpenDocOptions_Silent, "", errors, warnings)

par :

Set swModelDoc = swApp.ActiveDoc

puis ouvre un assemblage avant de lancer la macro.

Petite question aussi, c'est bien un assemblage que tu as mis comme fichier dans le chemin ?

Encore une petite question, tu as bien mis l'extension de ton assemblage dans le nom du fichier même si celle-ci n'est pas affichée dans l'explorateur Windows (.sldasm) ?

cela fonctionne j'avais du faire une erreur dans la copie du chemin .

Je voudrais rajouter une fonction au "PackAndGo" renommer toutes les fichiers qui contient "XXXXX" et les renommer avec un numero 44444 (precision le XXXXX n'est pas en suffixe ou en prefixe)

 

oui c'est bien un assemblage dans le fichier du chemin avec le nom de l'extention

    Essaye un truc comme cela :

' Verify document paths and filenames after adding prefix and suffix
ReDim pgGetFileNames(namesCount - 1)
ReDim pgDocumentStatus(namesCount - 1)
status = swPackAndGo.GetDocumentSaveToNames(pgGetFileNames, pgDocumentStatus)
For i = 0 To (namesCount - 1)
     If Instr(pgGetFileNames(i), "XXXXXX") <> 0 Then
          pgGetFileNames(i) = Replace(pgGetFileNames(i), "XXXXX", "444444")
     End If
Next i

 

Cela ne  fonctionne pas?

il faut que je le place ou dans le code? je l'ai mis a la fin comme ceux-ci

'[.....]

' Add a prefix and suffix to the new Pack and Go filenames-------------------- (Aplatissez la structure de dossiers Pack and Go; enregistrer tous les fichiers dans le répertoire racine)
swPackAndGo.AddPrefix = "SW_"
swPackAndGo.AddSuffix = "_PackAndGo"


' Verify document paths and filenames after adding prefix and suffix----------------- (Aplatissez la structure de dossiers Pack and Go; enregistrer tous les fichiers dans le répertoire racine)
ReDim pgGetFileNames(namesCount - 1)
ReDim pgDocumentStatus(namesCount - 1)
status = swPackAndGo.GetDocumentSaveToNames(pgGetFileNames, pgDocumentStatus)
For i = 0 To (namesCount - 1)
If InStr(pgGetFileNames(i), "xxxxx") <> 0 Then
pgGetFileNames(i) = Replace(pgGetFileNames(i), "xxxxx", "yyyyy")
End If
Next i



 ' Verify document paths and filenames after adding prefix and suffix------------------ (Vérifier les chemins d'accès aux documents et les noms de fichiers après avoir ajouté un préfixe et un suffixe)
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

 

Il ne suffit pas de coller des bouts de code à la suite des autres. Il faut essayer de comprendre un peu...

swPackAndGo.AddPrefix = "SW_"
swPackAndGo.AddSuffix = "_PackAndGo"

Ajoute un préfixe et un suffixe. Vu que tu n'as pas changé les valeurs je doute que tu en ais besoin. Tu peux le supprimer.

 

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

Cela ne fait qu'afficher les noms finaux des documents dans le débugeur. Je pense que tu n'en a pas besoin.

 

Fait un test en pas à pas pour voir si les noms des fichiers évoluent correctement.

1 « J'aime »

Voici un bout de macro fonctionnelle et épurée des affichages dans le débogueur :

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
    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", "44444")
        End If
    Next i
    status = swPackAndGo.SetDocumentSaveToNames(pgFileNames)
    
    ' Set folder where to save the files
    myPath = "C:\Users\DRO\Desktop\Temp PDF\"
    status = swPackAndGo.SetSaveToName(True, myPath)
    
    ' Flatten the Pack and Go folder structure; save all files to the root directory
    swPackAndGo.FlattenToSingleFolder = True

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

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

End Sub

Attention à ne pas oublier la ligne :

status = swPackAndGo.SetDocumentSaveToNames(pgFileNames)

après la boucle permettant de renommer les fichiers comprenant "XXXXX" sinon le PackAndGo ne tient pas compte de la modification.

Cordialement,

1 « J'aime »

Bonjour, apres essai de ta macro épurée cela ne change pas le nom du fichier

je  vous joins un asm pour essai pour voir ci cela fonctionne chez vous

 


xxxxx.zip

Bonjour,

après essai de ma macro sur ton assemblage, celle-ci fonctionne en mettant la série de X en minuscule (x).

Cordialement,

2 « J'aime »

J'avais fais plusieurs essai mais je n'avais pas penser à cela. Merci

Par contre cela ne modifie pas le nom des plans qui sont avec mon assemblage et mes pieces? avez-vous une idée?

 

Bonjour,

Non cela ne modifie pas le nom du plan car le fichier plan ne fait pas, à proprement parlé, parti de la liste des fichiers du PackAndGo mais n'est embarqué que par l'intermédiaire d'une coche de la fonction. Tu peux cependant dans ta macro prévoir de renommer tous les plans concernés, après la fonction de PackAndGo, par les fonctions VBA standard de gestion des fichiers, tu trouveras des informations permettant de le faire ICI.

Cordialement,

1 « J'aime »

Merci beaucoup, je pourrais me débrouiller avec cette gestion externe à Solidworks.

J'ai une dernière requête, est-ce possible d'exclure dans la macro PackAndGo les fichiers qui n'ont pas dans le nom de fichiers 'XXXXX'

Bonjour,

Essayes en mettant :

For i = 0 To (namesCount - 1)
    If InStr(pgFileNames(i), "xxxxx") <> 0 Then
        pgFileNames(i) = Replace(pgFileNames(i), "xxxxx", "44444")
    Else
        pgFileNames(i) = ""
    End If
Next i
status = swPackAndGo.SetDocumentSaveToNames(pgFileNames)

 

Cordialement,