Macro enregistrement pdf avec gestion d'erreur

Bonjour j'utilise actuellement le code suivant pour enregistré une MEP en PDF 

longstatus = Part.SaveAs3(FilePath + FileName + ".PDF", 0, 0)

 

Aucun soucis de ce coté la SAUF quand le dis PDF est déja ouvert et donc pas écrasble a ce moment la solidworks et bloqué et attend indéfiniment que le pdf soit a nouveau ecrasble je ne sait pas si mon soucis et tres comprehensible mais si quelqu'un à une solution je suis preneur :)

Il faut passer par une gestion d'erreur à l'intérieur de ta macro

ou une boucle avec un delais de validité.

tu trouve ca asser facilement sur les forum de programation

2 « J'aime »

Perso, j'utilisais un long programme VBA pour ce faire ... du coup je ne vais pas tout te ressortir ;)

Mais pour la partie qui t'interessais, ma ligne était légérement différente mais me demandais si je voulais écrire sur un dossier déjà existant et m'indiquait une impossibilité d'écriture si déjà ouvert.

 

Du coup, je penses que ça devrait marcher avec ça :)

 

boolstatus = swpdfext.SaveAs(nomPDF, 0, 0, swPDF, IErrors, IWarnings)

 

avec

Dim swpdfext As SldWorks.ModelDocExtension

Dim swPDF As SldWorks.ExportPdfData

Dim swpdfext As SldWorks.ModelDocExtension

Dim IErrors As Long

Dim IWarnings As Long

Dim boolstatus As Boolean

 

Set swpdfext = swdoc.Extension

Set swPDF = swapp.GetExportFileData(1)

Set swpdfext = swdoc.Extension

 

nomPDF = FilePath & newname & ".pdf"

FilePath étant le dossier d'enregistrement

Newname étant le nom de ton fichier

Et si l'ouverture du pdf se fait en lecture seule. L'écrasement ne devrait pas poser de soucis.

Merci todescocoin37coin & Bart☺

pour vos reponse mais rien y fait la macro fige tant que le fichier PDF n'est pas ferme j'ai bien essaye une gestion d'erreur mais il ne reagis pas non plus :/

Bonjour,

Je pense uqe le lien ci-dessous doit pouvoir t'aider:

http://www.cpearson.com/excel/IsFileOpen.aspx

Bonjour,

Possible de faire ça par exemple :

        protected virtual bool IsFileLocked(FileInfo file)
        {
            FileStream stream = null;
            try
            {
                stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None);
            }
            catch (IOException)
            {
                return true;
            }
            finally
            {
                if (stream != null)
                    stream.Close();
            }
            return false;
        }

à appeler de la façon suivante :

           ModelDoc2 SWPart = null;
            SWPart = ((ModelDoc2)(SolidWorksMacro.swapp.ActiveDoc));
            // On créer le pdf sur bureau
            string namePDF = string.Empty;
            namePDF = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop) + "\\test.pdf";
            
            FileInfo namePDFinfo = new FileInfo(namePDF);
            if (IsFileLocked(namePDFinfo))
            {
                MessageBox.Show("Lecture seule");
                return;
            }
            SWPart.SaveAs(namePDF);

 

Désolé c'est du C# (donc à traduire en vba) mais le principe est :

1°) créer une fonction qui permet de savoir si le fichier est utilisé.

2°) Tester si le fichier est utilisé avant de l'enregistrer en PDF.

Cordialement,

Merci à toi Cyril.f 

 

Cela donne le code suivant

If IsFileOpen(FilePath + FileName + ".DWG") = True Then
MsgBox "Le Fichier " & FilePath + FileName + ".DWG est actuellement utilisé par un utilisateur et ne peut donc etre écrasé."
Else
longstatus = Part.SaveAs3(FilePath + FileName + ".DWG", 0, 0)
End If

a adapter suivant DWG ou PDF sans oublier d'ajouter une module avec le contenu du lien de Cyril.f