Nous utilisons une macro trouvée sur ce site pour enregistrer un pdf et un dxf d'une mise en plan, la connection à notre serveur est souvent tres tres lente et nous sommes contraints de "tuer" solidworks pour arrêter le process de la macro qui essaie vainement de se connecter, est-il possible d'ajouter un code qui la stopperait au bout d'un certain temps et nous permettrait de rebasculer sur solidworks.
Je suis plutôt d'accord avec remrem, il va falloir que tu gère les erreurs dans ton code.
Maintenant, si tu veux juste un bout de code qui te permettes de sortir de la macro au bout d'un certain temps tu dois pouvoir faire quelque chose du genre (pas testé complètement) :
Sub main()
Dim ts As Date
Dim tshour1 As Date
Dim tshour2 As Date
ts = Now
tshour1 = DateAdd("s", 20, ts)
tshour2 = Now
Do While True
If Len(Dir("ton fichier pdf avec chemin")) <> 0 Then
Exit Do
End If
tshour2 = Now
If DateDiff("s", tshour2, tshour1) <= 0 Then
Exit Sub
End If
Loop
End Sub
Ce bout de code permet de sortir de la boucle si ton fichier pdf existe ou de sortir de la macro au bout de 20 secondes si ton fichier n'existe pas, à adapter à ton code bien sûr.
Bonjour, Grosse déception! apres essai avec serveur inaccessible, je ne sors pas de la macro... Peut être que je n'ai pas inséré le code de d.roger au bon endroit ? J'ai pourtant supprimé la partie qui vérifie la présence du fichier. qq'un aurait des précisions à m'apporter?
Sub main()
Dim ts As Date
Dim tshour1 As Date
Dim tshour2 As Date
ts = Now
tshour1 = DateAdd("s", 20, ts)
vont en début de code.
Puis les lignes :
tshour2 = Now
Do While True
If Len(Dir("ton fichier pdf avec chemin")) <> 0 Then
Exit Do
End If
tshour2 = Now
If DateDiff("s", tshour2, tshour1) <= 0 Then
Exit Sub
End If
Loop
vont juste après la ligne ou tu sauvegarde ton fichier.
Maintenant, il est fort possible que cela ne fonctionne, cela signifie que ton code se met en attente ou en erreur avant d'arriver à ces lignes. Que se passe t'il et quel retour as-tu en mode débogage quand le problème se produit ?
On en revient à la remarque initiale de remrem, avec laquelle je suis complétement d'accord, il va falloir que tu gère les erreurs dans ton code. La méthode "SaveAs2 (IModelDoc2)" étant obsolète il serait préférable de passer sur la méthode "SaveAs (IModelDocExtension)" (voir ici), celle-ci permet de gérer un certain nombre d'erreurs au travers les retours "swFileSaveError_e Enumeration" et " swFileSaveWarning_e Enumeration " (voir ici et ici). Attention, la façon d'enregistrer en pdf est différente et doit passer par " ExportPdfData " (voir exemple ici).
Pour gérer les erreurs en vba, tu peux aussi voir ici.
Pour info, les macros trouvées sur ce site sont en général des bouts de code dans lesquels la gestion des erreurs n'est jamais faite, charge au demandeur de compléter et fiabiliser sa macro sinon cela peut vite devenir du développement spécifique sur cahier des charges, là ça devient un métier...