Enregistrement de lot de plans en version antérieur

Bonjour à tous,
Je suis sur Solidworks 2024 Sp5 sur laquelle j’ai créé un ASM, des pièces et une cinquantaine de fichiers plans.

Je parviens à réaliser un « pack and go » en version antérieur (2022 et 2023) cependant cela n’est fonctionnel que pour les pièces et assemblage. Les mises en plans cochées et exportées via le « pack and Go » restent en 2024…

Aprés contact et échange avec le support la réponse est: « c’est le fonctionnement normal de solidworks » (comprendre: débrouillez vous! ça ne nous regarde pas!)

J’ai tenté le planificateur de tâche, j’ai tenté de passer par une macro… bref je suis sec!
La seule méthode qui fonctionne: c’est d’ouvrir les plans un a un, puis de les enregistrer en version antérieur.
Dans ma logique de féniant (et de qualité!) ça me semble impensable pour 50 plans ainsi que pour les projets futurs.

Quelquequ’un a t il trouvé une combine pour exploiter cette MAGNIFIQUE fonction « d’enregistrement en version antérieur » pour des lots de fichiers de mise en plan?

Merci d’avance!

Réponse de l’IA:

Question Réponse
Bug connu ? :white_check_mark: Oui, largement signalé (mais pas reconnu officiellement comme bug)
Comportement normal ? :warning: Officiellement oui… mais très contesté
Correctif annoncé ? :x: Non
Contournement viable ? :white_check_mark: Macro VBA ou sauvegarde manuelle
Pack and Go fiable pour DRW rétro ? :x:

Solution macro VBA pour convertir un dossier de plan (Non testé sortie tel quel par IA copilot):

Option Explicit

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim errors As Long
Dim warnings As Long

Sub main()

    Set swApp = Application.SldWorks

    ' ⚠️ MODIFIER LE CHEMIN DU DOSSIER ICI
    Dim folderPath As String
    folderPath = "C:\TEMP\Plans_2024"

    ' Choisir la version cible :
    ' swSaveAsVersion_e.swSaveAsCurrentVersion
    ' swSaveAsVersion_e.swSaveAs2023
    ' swSaveAsVersion_e.swSaveAs2022
    Dim targetVersion As Long
    targetVersion = swSaveAsVersion_e.swSaveAs2023

    Dim fileName As String
    fileName = Dir(folderPath & "\*.slddrw")

    Do While fileName <> ""

        Dim fullPath As String
        fullPath = folderPath & "\" & fileName

        Set swModel = swApp.OpenDoc6( _
            fullPath, _
            swDocumentTypes_e.swDocDRAWING, _
            swOpenDocOptions_e.swOpenDocOptions_Silent, _
            "", _
            errors, _
            warnings)

        If Not swModel Is Nothing Then

            swModel.ForceRebuild3 False

            Dim savePath As String
            savePath = folderPath & "\OLDVER_" & fileName

            swModel.SaveAs4 _
                savePath, _
                targetVersion, _
                swSaveAsOptions_e.swSaveAsOptions_Silent, _
                errors, _
                warnings

            swApp.CloseDoc swModel.GetTitle

        End If

        fileName = Dir
    Loop

    MsgBox "Conversion terminée !", vbInformation

End Sub

Pas possible pour moi de testé la macro car sw2023, mais le code semble correct à 1ère vue.

2 « J'aime »

Merci pour ta recherche!

Mais j’ai déjà passé quelques heure à tenter une macro avec copilot, avant qu’il me disent que c’est finalement impossible.

J’espère être passé a côté de quelquechose… :confused:

Essai et fait nous un retour, si bug et où (capture de l’erreur).
Si fonctionnalité (enregistrer en version antérieur) non existante dans l’API, on fera pas grand chose.
Si bug autre possiblement on pourra t’aider à débugger.

effectivement la fonctionnalité est inexistante en VBA…

Pas la 1ère fois que l’IA invente une fonctionnalité dans l’API, malheureusement…

Essaie celle ci au cas ou avec SaveAs3 Method (IModelDocExtension) au lieu de saveas4.
Cette fonctionnalité existe après elle est bien documenté avec une option version, donc à tester.

Option Explicit

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swExt As SldWorks.ModelDocExtension
Dim errors As Long
Dim warnings As Long

Sub main()

    Set swApp = Application.SldWorks

    ' ⚠️ CHEMIN À ADAPTER
    Dim folderPath As String
    folderPath = "C:\TEMP\Plans_2024"

    ' Version cible
    Dim targetVersion As Long
    targetVersion = swSaveAsVersion_e.swSaveAs2023
    ' swSaveAs2022 possible aussi

    Dim fileName As String
    fileName = Dir(folderPath & "\*.slddrw")

    Do While fileName <> ""

        Dim fullPath As String
        fullPath = folderPath & "\" & fileName

        Set swModel = swApp.OpenDoc6( _
            fullPath, _
            swDocumentTypes_e.swDocDRAWING, _
            swOpenDocOptions_e.swOpenDocOptions_Silent, _
            "", _
            errors, _
            warnings)

        If Not swModel Is Nothing Then

            Set swExt = swModel.Extension
            swModel.ForceRebuild3 False

            Dim savePath As String
            savePath = folderPath & "\OLDVER_" & fileName

            swExt.SaveAs3 _
                savePath, _
                swSaveAsOptions_e.swSaveAsOptions_Silent, _
                targetVersion, _
                errors, _
                warnings

            swApp.CloseDoc swModel.GetTitle

        End If

        fileName = Dir
    Loop

    MsgBox "Conversion terminée", vbInformation

End Sub

Malheureusement « swSaveAs2023 » n’existe pas :confused:

Bonjour
Il n’est pas possible de dire à une macro d’ouvrir tous les plans un par un, et de les imprimer ? sous 2024 extraordinaire :grinning:
Avez vous PDM? C’était une macro qui nous faisait cela à une autre époque après sélection des MEP.

C’est ballot :upside_down_face:

Les limites de l’IA!
Dernière tentative, pas facile quand on ne peut pas tester.
Visiblement il faut utiliser « AdvancedSaveAsOptions.SaveAsPreviousVersion` »:

Option Explicit

Dim swApp   As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swExt   As SldWorks.ModelDocExtension
Dim advOpts As SldWorks.AdvancedSaveAsOptions

Dim errs    As Long
Dim warns   As Long

Sub main()

    Set swApp = Application.SldWorks

    ' >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    ' A MODIFIER
    Dim folderPath As String
    folderPath = "C:\TEMP\Plans_2024"

    ' -1 = version précédente
    ' -2 = deux versions précédentes
    Dim previousOffset As Long
    previousOffset = -1   ' 2024 -> 2023
    ' previousOffset = -2 ' 2024 -> 2022
    ' >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    Dim fileName As String
    fileName = Dir(folderPath & "\*.slddrw")

    Do While fileName <> ""

        Dim fullPath As String
        fullPath = folderPath & "\" & fileName

        Set swModel = swApp.OpenDoc6( _
            fullPath, _
            swDocumentTypes_e.swDocDRAWING, _
            swOpenDocOptions_e.swOpenDocOptions_Silent, _
            "", _
            errs, _
            warns)

        If swModel Is Nothing Then
            Debug.Print "❌ Impossible d’ouvrir : " & fileName
            GoTo NextFile
        End If

        Set swExt = swModel.Extension

        Set advOpts = swExt.GetAdvancedSaveAsOptions( _
            swSaveWithReferencesOptions_e.swSaveWithReferencesOptions_None)

        advOpts.SaveAsPreviousVersion = previousOffset
        advOpts.SaveAllAsCopy = True

        Dim savePath As String
        savePath = folderPath & "\OLDVER_" & fileName

        If False = swExt.SaveAs3( _
            savePath, _
            swSaveAsVersion_e.swSaveAsCurrentVersion, _
            swSaveAsOptions_e.swSaveAsOptions_Silent, _
            Nothing, _
            advOpts, _
            errs, _
            warns) Then

            Debug.Print "❌ ERREUR SaveAs : " & fileName & _
                        " | Code = " & errs
        Else
            Debug.Print "✅ OK : " & fileName
        End If

        swApp.CloseDoc swModel.GetTitle

NextFile:
        fileName = Dir
    Loop

    MsgBox "Traitement terminé (voir Ctrl+G pour le log)", vbInformation

End Sub
``

Merci encore pour cette piste.

Mais aprés de nombreuses itérations, et debugguage voici la conclusion :confused:

Désolé pour les pistes froides.
La piste la plus sérieuse est celle-ci:

Teste là sur une MEP si cela fonctionne, cela veut dire que c’est possible de le faire en lot. (Via Intégration, ou en modifiant cette macro).
Codestack est une source fiable contrairement à l’IA…

1 « J'aime »