Macro export automatique à l'ouverture d'un plan

Merci Cyril.f . Je viens de comprendre que "l'exécutable de lancement", c'est jute le .bat qui ordonne l'ouverture de mon fichier...

j'ai écris ca:

start "C:\Program Files\SLDWORKS.exe" "C:\Plan1.SLDDRW" /m "C:\Export PDF.swp"

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.

Bonjour,

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.

Bonjour,

 

@Legnano 

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.

Up...

Pourquoi dans ce cas ne pas tout faire le code depuis excel?

On peut en effet contrôler SW depuis Excel (même si je n'ai jamais essayé personnellement)

Voir ce sujet et plus particulièrement CONTROLLING Solidworks In an Excel Macro :

https://www.cadsharp.com/blog/using-microsoft-excel-with-the-solidworks-api/

EDIT: un autre sujet du forum traitant la façon de faire depuis Excel: https://www.lynkoa.com/forum/solidworks/macro-solidworks-excel

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

Pourtant tu dit:

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

 

1 « J'aime »

Je suis du même avis que @sbadenis les 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.

1 « J'aime »

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 ?

Voici une macro a utilisé sur ton plan et changé le chemin de la macro dans le 'HandlerModule'

Il va te crée un objet dans l'arbre de conception.

 

Normalement ça devrait fonctionné, lancement a l'ouverture du fichier (plan/piece ou asm)


macrotest2.swp
2 « J'aime »

Super , MERCI Mandragore!

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?

Encore merci

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.


macrotest2.swp
1 « J'aime »

Tout à fait d'accord avec @mandragore ce 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 trouvé ce fil de conversation qui traite d'un code qui permet de lancer un action une fois la reconstruction du plan terminée:

https://r1132100503382-eu1-3dswym.3dexperience.3ds.com/#community:yUw32GbYTEqKdgY7-jbZPg/iquestion:Fr2GDcHYThK6PjOZubrVPg

il y a une déclaration n'est pas reconnue et qui s'affiche en rouge dans la macro :

Dim WithEvents swDraw As SldWorks.DrawingDoc 

Vous avez un explication à ca? version de VB différente?  référence manquante?

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?

 

Oui c'est possible. je ne connais pas le code par contre mais tu trouvera tous ce que tu cherche ici :  

http://help.solidworks.com/2022/English/api/sldworksapiprogguide/Welcome.htm

 

Sur le forums on utilise presque que le VBA, je pense que c'est plus simple pour se familiarisé avec le code et beaucoup de gens sont autodidacte.

Bonjour à tous,

petite mise a jour de mon sujet:

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.

Merci