Macro enregistrement sous pdf feuille active

Bonjour à tous,

J'ai actuellement une macro qui me permet d'enregistrer en pdf mon document .slddrw en pdf sous le même répertoire et le même nom.

Jusque là tout va bien, le soucis c'est qu'il m'enregistre toutes les feuilles de ma mise en plan et je souhaite qu'il ne m'enregistre que la feuille active au moment où je lance ma macro.

Je suis sûr que la solution est simple mais rien à faire je ne trouve pas le bon code, voici la macro que j'ai récupéré su le forum et que j'utilise :

'**************************************************************************************************************************
'* Exemple de macro qui permet d'enregistrer les document au format PDF
'* Vous pouvez Changer l'extention pour enregistrer le document dans n'importe quelle format supporté par SW
'* Basé sur l'Exemple réalisé par Axemble "Saveas_pdf"
'* Modifier par MCD
'**************************************************************************************************************************
Sub main()
    Dim swApp As SldWorks.SldWorks
    Dim swmodel As SldWorks.ModelDoc2
    Dim stPath As String
    Dim lgFichier As Long
    Dim blretval As Boolean
    Dim Errors As Long
    Dim Warnings As Long
    
    Set swApp = Application.SldWorks
    'on récupére le document actif
    Set swmodel = swApp.ActiveDoc
    
    If Not swmodel Is Nothing Then
       'on vérifie que le fichier est enregisté
        If swmodel.GetPathName = "" Then
            MsgBox "Veuillez enregistrer votre document avant de lancer la macro", vbInformation
            End
        Else
            'on récupére l'emplacement du fichier
            stPath = swmodel.GetPathName
            'on récupére le nombre de caractére jusqu'au . de l'extension
            lgFichier = InStrRev(stPath, ".", -1, vbTextCompare) - 1
            'on récupére le chemin sans l'extention
            If lgFichier > 0 Then
                  stPath = Left(stPath, lgFichier)
            End If
        End If
        
        'si le document est une pièce
        If swmodel.GetType = swDocPART Then
           'on créer le développé
            'blretval = swmodel.ExportFlatPatternView(stPath & ".DXF", 1)
            'on créer le DXF
            'blretval = swmodel.SaveAs3(stPath & ".DXF", 0, 0)
             MsgBox "C'est un fichier Piéce. Ouvrir la mise en plan pour faire le PDF", vbInformation
            
            'si le document est une mise en plan
        ElseIf swmodel.GetType = swDocDRAWING Then
            'on créer le DXF
            'blretval = swmodel.SaveAs3(stPath & "_drw.pdf", 0, 0)
            'on créer le PDF
            blretval = swmodel.SaveAs3(stPath & ".pdf", 0, 0)
            
            
        End If
    
        'on sauvegarde le fichier
        blretval = swmodel.Save3(0, 0, 0)
   
    End If

End Sub

 

Bonjour,

Tu utilises la méthode SaveAs3, en se rendant sur la page d'aide on peut voir que cette méthode est obsolète :

http://help.solidworks.com/2012/English/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IModelDoc2~SaveAs3.html

Et qu'il faut plutôt utiliser SaveAs :

http://help.solidworks.com/2012/English/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IModelDocExtension~SaveAs.html

Avec cette dernière methode, on peut spécifier quelle feuille on veut enregistrer, voir cet exemple :

http://help.solidworks.com/2012/English/api/sldworksapi/Save_File_as_PDF_Example_VB.htm

Pour les détails du choix des feuilles :

http://help.solidworks.com/2012/English/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IExportPdfData.html

 

4 « J'aime »

ça commence à être compliqué pour moi, tu peux essayer de modifier ma macro  stp ?

Tu as toutes les informations pour le faire.

Sinon, comme tu as myCADtools, tu peux utiliser un des outils pour le faire, ça sera peut-être plus simple pour toi : Integration ou Batch Converter en seront capable.

3 « J'aime »

Je suis assez d'accord avec .PL, tout le boulot est pré-maché ;). Maintenant si le VBA te semble complexe et que tu ne souhaites pas t'y frotter (ce qui se comprends tout à fait, il n'y a pas de jugement de valeurs !), les petits logiciel déjà tout fait sont très bien.

 

Cependant, je me permet d'attenuer un peu les propos de @PL. Je suis sur que si tu te tentes des choses, demande des explications sur des points obscures, etc, lui ou une autre personne ici saura t'aiguiller et te guider. Mais donner des choses déjà tout faite ... ce n'est pas trop la philosophie du forum :)

1 « J'aime »

Loin de moi l'idée d'être hautain, mais je n'ai pas SolidWorks sous la main, donc tester une macro à l'aveugle je peux le faire quand j'ai du temps, ce qui n'est pas le cas aujourd'hui !

Bonsoir,

essayez voir celle-ci:

 

Dim swApp As SldWorks.SldWorks
Dim swModel As ModelDoc2
Dim lErrors As Long
Dim lWarnings As Long

Sub main()

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
swModel.Extension.SaveAs GetFilename(swModel.GetPathName) & " rev." & swModel.GetCustomInfoValue("", "Révision") & ".pdf", swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nothing, lErrors, lWarnings

End Sub

Function GetFilename(strPath As String) As String
Dim strTemp As String
strTemp = Mid$(strPath, InStrRev(strPath, "\") + 1)
GetFilename = Left$(strTemp, InStrRev(strTemp, ".") - 1)
End Function

Merci pour vos réponses, désolé Manu67, rien ne se produit en lançant la macro.

Si elle ne fonctionne pas, c'est que vous etes sur 2015... Elle fonctionnait chez moi sur 2014 mais pas sur 2015 et fonctionne a nouveau sur 2016. Je ne me l'explique pas. Essayez de passer en 2016 SP2 ou attendre quelque temps pour la SP3 si vous pouvez le faire.