Arreter macro

Bonjour,

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.

D'avance merci

1 « J'aime »

Salut,

En fait tu dois plutôt gérer l'erreur dans ton code.

Essaye d'utiliser la méthode OpenDoc7 comme dans cet exemple. Ensuite tu gères chaque erreurs.

Je n'ai pas testé...

3 « J'aime »

Merci de ta réponse mais ça ne m'aide pas beaucoup, je ne suis pas assez calé en vb pour faire ça tout seul.
 

 

Voici notre macro...

 


pdf-dxf.swp

Bonjour,

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.

Cordialement,

3 « J'aime »

Bonjour,

Merci beaucoup d.roger, je viens d'adapter ton code à notre macro et ça à l'air de fonctionner,

pour tester j'ai renommé le répertoire de destination.

l'adaptation ressemble plus à du bricolage mais bon si ça marche...

Je teste en réel plusieurs jours et je reviendrai vers le forum.

A bientôt

 

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?

Cordialement

 

 

Bonjour,

les lignes :

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...

Cordialement,

 

1 « J'aime »