Enregistrement DXF/PDF via macro

Bonjour,

J'essaye actuellement de reprendre le code d'une macro que j'ai trouvé (http://www.lynkoa.com/forum/documents-commerciaux/ma-macro-pdf-dxf-quoi-en-dire). Elle fonctionnait sous SW2013 (je suis sous SW2015). Je précise que je ne m'y connais pas en VBA, j'essaye donc de transposer mes connaissances dans d'autres langagues pour resoudre les soucis.

J'ai d'abord eu l'erreur Erreur projet ou bibliothèque introuvable. J'ai copié le code du fichier d'origine et recollé dans une nouvelle macro et il semblerait que ça a resolu le probleme.

Maintenant, il semblerait que ma macro ne tourne plus comme elle le devrait (enfin, elle tourne mais pas comme je le voudrais). Je l'execute et elle me dit qu'elle n'a pu enregistrer de fichiers en DXF. 

Les pistes que j'envisage: 

-La macro ne detecte pas que SW2015 est ouvert 

-La macro ne trouve la MEP actuellement ouverte (mais normalement, ça devrait m'afficher une erreur)

 

PS: j'ai tenté de rajouter un petit bout de code pour vérifier que le dossier de destination existe. Cependant, il ne se lançait pas non plus, je l'ai mis en commentaire et j'ai repris le code d'origine.

Je vous remercie d'avance de votre aide et je commence à apprendre le VBA de mon coté.

 

 


macro1.swp

Bonjour,

Est-ce qu'il y a un message d'erreur ?

C'est possible de voir le code dans un fichier texte ? (Pas de SolidWorks sous la main pour l'instant).

Bonjour,

Tiens @PL je t'es vite recopier la macro en format txt ;)

Moi je m'y connais trop peu  et sa ma l'aire ultracomplexe suis un peu perdu @_@


macro.txt
1 « J'aime »

Merci @Centor

@nuemishra : c'est toi qui a ajouté cette ligne :

  'Les lignes suivantes ne semblent pas fonctionnelles, j'ai remis le code de base au dessus. Le code étant vérifié, cela doit venir de l'erreur principale

 

 

Oui, c'est moi qui ait rajouté cette ligne. Mais je sais pourquoi ça ne fonctionne pas: j'avais oublié d'ajouter Dim fs As Scripting.FileSystemObject et de référencer Microsoft scripting runtime. Il me reste à corriger mon Adresse (qui recupere actuellement path\nom_fichier.slddraw et pas juste path\), j'ai la solution, c'est pas parfait mais ça fonctionne. J'ameliorerais ça si c'est validé.

 

Le probleme principal (celui qui m'a conduit à poster) est que je peux faire fonctionner le programme en mode pas à pas du debogage mais pas en executant la macro. En mode debogage, tout semble fonctionner (sauf peut-etre l'enregistrement des DXF, ça fait planter le debogage mais ça créé bien les fichiers).

Concernant le plantage du debogage sur l'enregistrement des DXF, quand j'arrive au niveau de l'instruction Rép = swModel.SaveAs4(NomCompletDocEn, 0, 0, 0, 0), le debogage mouline puis s'arrete. Apres vérification, il semblerait qu'il enregistre les trois feuilles de ma MEP de test (il semblerait que la fonction enregistre les trois feuilles d'un coup). Quand je relance, il me demande si je souhaite ecraser le fichier existant (et il me le demande pour chaque page)

Je remets à ma macro corrigée en .txt

EDIT: Maj du macro1.txt

 


macro1.txt

Je serai tenté de dire que SolidWorks n'a pas le temps de créer son DWG que l'on demande d'en faire un autre. Il faudrait essayer d'inclure des pauses dans le code :

Deux exemples de pause :

1)

Application.Wait Time + TimeSerial(0, 0, 5) 'pause de 5 secondes

2)

Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)

 

Sleep 2000 'pause de 2 secondes

Mince, je dois etre trop mauvais encore.

J'obtiens deux erreurs differentes et je n'arrive pas à les resoudre.

Pour la premiere methode de pause, il me dit: "Erreur d'execution '438': Propriété ou methode non gérée par cet objet"

Pour la seconde methode, il me dit : "Erreur de compilation: Le code contenu dans ce projet doit etre mis à jour pour pouvoir etre utilisé sur les systemes 64bits. Vérifiez et mettez à jour les instructions Declare, puis marquez les d'un attribut PtrSafe"

Pour la premiere methode, j'ai essayé d'abord de tester directement dans le main sub (juste en dessous de AffecterVar01), pour la seconde, j'ai mis le Declare en dessous de Public RepUtil (j'ai aussi essayé de la mettre dans le main sub par desespoir... Qui sait, peut-etre que j'avais rien compris au VBA)

 

EDIT:

J'ai trouvé une rustine. Un sub que j'ai trouvé en fouillant sur google qui attend dans une boucle. Malheureusement, ça ne solutionne pas le probleme. Quand j'execute normalement, ça me renvoie encore et toujours qu'il n'enregistre aucun DXF (d'ailleurs, il n'enregistre pas non plus les PDF mais comme tu le disais, ça doit venir du fait que la macro va trop vite pour le systeme). 

ENFIN !! Je suis revenu parce qu'un collegue m'a proposé de faire tourner la macro avec des pauses enormes et ça a enfin fonctionné!  Apres quelques tests, ça a fonctionné avec 100 dans chaque tempo, j'ai reussi a le faire marcher une fois avec 20 dans la premiere et 5 dans la seconde. Je vais continuer les tests pour voir le temps minimal d'attente.

Un grand merci à toi !

 

EDIT²:Bon, j'ai parlé un peu vite. Quand je l'execute depuis l'editeur de macro, ça marche, quand je fais Outils=>Macro=>Executer, ça fonctionne plus. Comme je dois lier ça à Smart Properties, c'est peut-etre pas problematique, je verrais si via Smart Properties, ça fonctionne (dans tous les cas, Outils=>Macro=>Executer ne passe pas dans la macro vu que j'obtiens immediatement le message comme quoi il n'y a rien d'enregistré et ce, malgré les quelques 3 fois 20 secondes de tempo)

 

Finalement, même si SW refuse que je lance la macro à la main, elle fonctionne sans aucun soucis via Smart Properties.


macro1.txt
1 « J'aime »

Donc si j'ai bien compris, la macro fonctionne comme tu le voulais, avec Smart Properties, et en pas à pas, mais pas en la lançant par le menu macro ?

C'est ça. Quand je la lance via le menu executer dans Outils => Macro, ça ne marche pas. Mais comme je ne compte pas l'utiliser comme ça, c'est pas tres grave. 

1 « J'aime »