Le fichier Plan1.SLDDRW s'ouvre bien mais la macro ne se lance pas. Je pense que ça vient du fait qu'aucune application par défaut n'est définie pour les fichiers .swp
J'ai essayé d'applique swvbaserver.exe et drawcompare.exe comme application par défaut mais sans succès.
Je ne pense pas que ça provienne d'une application non définie pour les fichiers swp mais plutôt liée à la macro qui n'a aucune execution "automatique". Un peu à l'image des macros Word/Excel il faut une execution au moment de l'évènement d'ouverture pour déclencher par la suite des actions.
Un autre point qui me chiffonne, et qui vous aura peut être aussi piqué les yeux, c'est la fermeture automatique du document après l'export. si je souhaite travailler sur mon document de façon normale, il va y avoir un problème: j'ouvre, et paf, ca se ferme. Si je n’intégrer pas ma macro au document, je devrait pouvoir ruser en déplaçant temporairement la macro dans un autre répertoire. Mais y aurait-il un autre moyen?
Comme tu a pu deviner c'est problématique de faire ce genre de macro. Le mieux, selon moi, c'est de faire un bouton macro qui te permettra d'enregistré ton document en PDF/JPEG dans les dossiers de ton choix et de fermé la mise en plan.
Tu peu aussi faire un macro qui ouvre la mise en plan du document que tu a sélectionné dans ton arborescence, enregistré et fermé la mise en plan.
Il faut aussi faire attention car a l'ouverture de certaine mise en plan les document sont en alléger et donc le 'bullage de pièce' se met en invisible (c'est un de mes problème de mise en plan et je cherche l'action en macro pour rendre les vue résolue)
Personnellement je n'utilise aucun exécutable de lancement je trouve ça un peu trop intrusif même si sur certaines de mes macro l'application pourrait être utile mais elles sont utile que sur des anciens fichier et je pense que je ne peu pas incorporé ce genre de macro a des fichiers déjà existant.
Retour au point de départ/ selon toutes vos remarques, ce qui me convient le mieux est une macro A intégrée dans le plan qui demande à l'ouverture du plan l'exécution d'une macro B présente dans un répertoire. Cette macro B doit demander:
1: chargement du plan et des composant en résolu
2: export du plan
3: fermeture du plan sans enregistrer
Si je veux travailler normalement sur le plan, je supprime la macro B de son répertoire, ce qui bloque les actions précédantes. je gère le message d'erreur "macro B introuvable" manuellement car c'est un cas particulier exceptionnel.
Pour ceux qui trouve ma demande étrange je veux bien expliquer le pourquoi, mais je ne veux pas que cela transforme cette conversation en champ de bataille pour me dire si c'est selon eux une bonne ou mauvaise idée. J'ai un fichier excel qui modifie les porpriétés personnalisé d'une pièce sans avoir à l'ouvrir.La géométrie de la pièce est mise a jour avec les valeur de l'excel. Un simple clic sur un bouton doit permettre l'édition d'un plan de la pièce en pdf. Tout ceci pour que l'utilisateur n'ai pas à utiliser solidworks.
Merci mais ça ne va pas convenir pour mon application. Je vais continuer à plancher sur la solution macro intégré qui appel à l'ouverture d'autres macro. Pour le moment ça patinne
Pour ceux qui trouve ma demande étrange je veux bien expliquer le pourquoi, mais je ne veux pas que cela transforme cette conversation en champ de bataille pour me dire si c'est selon eux une bonne ou mauvaise idée. J'ai un fichier excel qui modifie les porpriétés personnalisé d'une pièce sans avoir à l'ouvrir.La géométrie de la pièce est mise a jour avec les valeur de l'excel. Un simple clic sur un bouton doit permettre l'édition d'un plan de la pièce en pdf. Tout ceci pour que l'utilisateur n'ai pas à utiliser solidworks.
Il suffirait donc sur ton bouton excel de programmer l'ouverture de ta pièce et de ton plan dans solidworks, d'exporter ton plan folio 1 en pdf et ton plan folio 2 en jpeg. Puis de fermer la pièce et l'assemblage. Tout cela en codant dans excel.
Voici un bout de code qui depuis excel ouvre une pièce et une MEP, je viens de tester par curiosité et cela fonctionne parfaitement.
Sub EssaiSW()
Dim swApp As SldWorks.SldWorks
Dim swModelUn As SldWorks.ModelDoc2
Dim swModelDeux As SldWorks.ModelDoc2
If swApp Is Nothing Then
Set swApp = CreateObject("SLDWORKS.application")
swApp.Visible = True
Else
Set swApp = Application.SldWorks
End If
Set swDocSpecification = swApp.GetOpenDocSpec("C:\Users\sebastien.denis\Desktop\Pièce5.sldprt")
Set swModelUn = swApp.OpenDoc7(swDocSpecification)
MsgBox swModelUn.GetTitle
Set swDocSpecification = swApp.GetOpenDocSpec("C:\Users\sebastien.denis\Desktop\Pièce5.slddrw")
Set swModelUn = swApp.OpenDoc7(swDocSpecification)
MsgBox swModelUn.GetTitle
swApp.CloseDoc swModelUn.GetTitle
Set swModelUn = swApp.ActiveDoc
MsgBox swModelUn.GetTitle
Set swDocSpecification = swApp.GetOpenDocSpec("C:\Users\sebastien.denis\Desktop\Pièce6.sldprt")
Set swModelDeux = swApp.OpenDoc7(swDocSpecification)
swApp.CloseDoc swModelUn.GetTitle
MsgBox swModelDeux.GetTitle
swApp.CloseDoc swModelDeux.GetTitle
End Sub
Merci @d.rogerpour ce code disponible par ailleurs dans mon lien plus haut.
Il reste plus ensuite à exporter le pdf et le jpeg. Ce qui est largement réalisable et devrait être assez simple.
A moins bien sûr qu'un point ne m'échappe encore?
Pour info les macros intégrés pour en avoir testés plusieurs c'est compliqué à mettre en ouvre et reste dangereux sans parler des plantages avec.
Je suis du même avis que @sbadenisles macro incorporé au plan/pièce je n'ai jamais pratiqué mais il me semble que c'est assez complexe et je trouve ça trop 'intrusif'.
Vue que tu part d'un fichier excel ou tu renseigne les cotes a modifier je pense que le plus simple reste un bouton macro excel qui envoi travaillé sur Solidworks.
Le bouton peu te permettre d'ouvrir la pièce renseigné les dimensions, ouvrir le plan enregistré puis fermé, ou continué a travailler en modifiant les cotes puis enregistré a nouveaux si tu a un tableau de cote ce qui peu te faire gagné quelques seconde a chaque ouverture/fermeture.
Si tu veux éviter a tes utilisateur d'utilisé Solidworks je pense que c'est la meilleur solution. Tu risque de vite être agacé si tu dois changer un plan et tu a oublié de bougé la macro, ou si Solidworks t'ouvre une fenêtre a chaque modification/création de plan disant qu'il n'a pas trouvé la macro sans parlé des erreurs/bug éventuel de Solidworks.
Sinon, si je comprend bien ta demande, tu voudrais que l'utilisateur clic sur le fichier DRWG de la pièce dans l'explorateur Windows. que Solidworks ouvre ce plan fasse une corrélation avec le fichier excel d'ouvert, mette a jours les données puis enregistre/ferme automatiquement le plan sans que l'utilisateur ne le vois.
Je voudrais quand même essayer la macro intégrée, si ca ne vous embête pas trop.
Pouvez vous m'expliquer quel est la méthode pour fusionner cette macro qui lance une action à l'ouverture d'un fichier, avec cette macro qui exécute un série de macro ?
En plus, c'est super simple à déployer sur une série de documents.
j'ai un peu bataillé avec les références à activer, mais ça avance bien.
J'ai quand même un petit bug : la macro "exortPDF" appelée pat la macro intégrée plante sur la récupération du chemin du fichier, alors que si je la lance manuellement ça fonctionne.
On dirait que c'est parceque la macro "exportPDF" se lance avant que le fichier solid ne soit complétement chargé (le fenetre d'erreur me propose le degeugage, mais le fichier solidworks n'apparait pas) Est il possible de mettre un genre de temporisation pour voir si c'est bien ca?
J'ai eu le même soucis, impossible de lancé une macro extérieur avec la méthode qu'il propose et j'ai pas eu le temps de creuser le sujet.
Je viens de réussir a en lancé une essaye avec ça :
Option Explicit Dim swApp As SldWorks.SldWorks Dim boolstatus As Boolean Sub main() Set swApp = Application.SldWorks Dim runMacroError As Long boolstatus = swApp.RunMacro2("chemin", "module", "nom", 1, 0) End Sub
J'ai aussi remplacé 'swRunMacroUnloadAfterRun' par 1 et 'runMacroError' par 0
[ Malheur, ca ne fonctionne plus... les modifications que tu porpose ne touchent que le handlermodule, mais c'est dans l'autre module que ca coince...] Erreur résolue
J'ai replacé le contenu du handlermodul par ce que tu m'a proposé, ca ne fonctionne toujours pas. J'ai toujours le message d'erreur au niveau de la macro appelée par le andlermodule alors que le plan n'est pas encore affiché dans SW. Si la macro essaye d'exporter un plan qui n'est pas encore ouvert, c'est pas étonnant. Mais je pensais que le handlermodule n'etait déclanché qu'une fois le plan complétement chargé...
Par ailleurs je ne comprends pas ce que tu entends par "J'ai aussi remplacé 'swRunMacroUnloadAfterRun' par 1 et 'runMacroError' par 0"
Cette macro fonctionne chez moi mais effectivement après essai il lance la macro demandé avant que le document ne s'affiche sous SolidWorks donc la macro doit se lancé avant l'affichage du document, il faut trouvé une autre macro pour faire ce genre de requête.
Par ailleurs je ne comprends pas ce que tu entends par "J'ai aussi remplacé 'swRunMacroUnloadAfterRun' par 1 et 'runMacroError' par 0"
C'est juste pour simplifier la lecture sur le forum. Mais c'est la même chose.
A mon avis la solution serait d'ouvrir le document, le passé en résolue, reconstruire puis lancé ce genre de macro
Mais concrètement je pense que ce serait plus simple de travailler uniquement sous excel pour ce genre de chose.
Tout à fait d'accord avec @mandragorece genre de macro devient très vite galère car impossible de savoir si elle est lancé quand il faut ou pas, et pas de retour si elle s'exécute bien intégralement ou si elle a juste démarré puis bugué. Lancer une macro depuis une macro pour l'avoir déjà fait c'est pas terrible.
Et depuis une macro feature, c'est encore pire et risque de te faire changer d'avis rapidement, crois moi c'est du vécu, je suis passé par là avant, j'ai testé les 2 avec un retour rapide en arrière en raison de nombreux problèmes..
Le but est de générer ce plan PDF automatiquement depuis une plateforme web. Donc par définition, ca sera full automatique. si un incident empèche la création du PDF, je pense pouvoir etre alerté à un autre niveau que SW.
Il est possible d'attaquer l'API en C++. J'ai pas trouvé de sujet sur ce forum. Vous savez si ca se pratique bien?
J'ai fini par trouver mon bonheur avec Batch+, un outil qui permet d'exécuter des macro en ligne de commande.
J'ai au final un .bat qui permet de lancer ma macro "export-PDF.swp" sans avoir à toucher SW, exactement ce qu'il me fallait.
Au passage, je recommande grandement de regarder les outils qu'il proposent. C'est probablement moins cher que MyCad, avec certaines fonctions en moins, mais aussi d'autres en plus.