Je cherche une maccro permettant de promouvoir tous les sous-assemblage d'un assemblage ouvert. Après le petit plus serait de promouvoir tous les sous-assemblage sauf un dans lequel le titre comporte toujours "VER". Mais déjà avec une maccro qui ferait la 1ère action expliquée, ça serait top! Je mets en lien une maccro trouvée ailleurs qui s'en rapproche.
Je dois m'attaquer au morceau proposé gentiment par @Cyril.fet relayé par @sbadenis , alors si je m'en sors je devrais pouvoir te faire celle-là au passage.
Par contre je ne sais pas ce que signifie promouvoir ici, donc je ne suis pas sûr de pouvoir la tester comme il faut.
Option Explicit Sub main() Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swConfig As SldWorks.Configuration Dim vConfNameArr As Variant Dim sConfigName As String Dim i As Long
Set swApp = Application.SldWorks 'active SolidWorks dans VBA Set swModel = swApp.ActiveDoc 'récupère le document actif vConfNameArr = swModel.GetConfigurationNames 'récupère toutes les configurations dans un tableau For i = 0 To UBound(vConfNameArr) 'boucle sur toutes les configurations Set swConfig = swModel.GetConfigurationByName(vConfNameArr(i)) 'sConfigName = vConfNameArr(i) swConfig.ChildComponentDisplayInBOM = swChildComponentInBOMOption_e.swChildComponent_Promote 'Active la fonction promouvoir sur chacune des configurations
Sans modifier le code tu peux lancer une macro sur tous tes assemblages ou un assemblage et tous les sous assemblages via Intégration l'utilitaire MyCad (période d'essai de 1mois: https://www.lynkoa.com/mycadtools) ou sinon via batch + (gratuit?):
La macro jointe associe les codes provenant des différents messages qui précèdent. Elle me semble répondre à votre demande initiale. Comme toujours: à tester et valider avant d'utiliser sans modération.
Pour lancer la maccro, j'ai ouvert un assemblage test (pas de sous-assemblage, uniquement des pièces) puis Outil => Maccro => je pointe sur la maccro sur mon bureau et Exécuter. Puis j'ai eu le message d'erreur plusieurs fois que j'ai posté en image au-dessus. Je viens de tester à nouveau (après redémarrage du PC) et c'est très étrange.
La maccro s'est lancée, pas d'alerte de bug, l'interface de la maccro a disparu, pas de message d'erreur. Mais quand je suis allé vérifier dans les configurations des assemblages aucun n'avaient la promotion d'activée. Bilan, on dirait qu'il ne s'est rien passé.
J'utilise une maccro qui créé automatiquement des PDF de plusieurs plan et elle fonctionne à merveille. Donc je ne sais pas pourquoi cette maccro n'a aucun effet ou bug.
Votre copie d'écran permet d'identifier l'emplacement de l'erreur, mais pour être complet et efficace, il faudrait joindre le message de cette erreur, tel qu'il est renvoyé par VBA. Les lignes suspectes:
vChildComp = swComp.GetChildren For i = 0 To UBound(vChildComp) Set swChildComp = vChildComp(i) If (swChildComp.GetSuppression2 = swComponentResolved) Or (swChildComp.GetSuppression2 = swComponentFullyResolved) Then
La dernière ligne vérifie que le composant enfant en cours de traitement n'est pas en état "Supprimé", donc qu'il est en état "Résolu". Je vois mal ce qui peut générer une erreur...
Deux causes possibles : - le composant swChildComp est inexistant (Nothing) ou d'un type inadapté. Vous pouvez placer un espion qui donnera son nom (swChildComp.Name2) pour en savoir davantage... - les constantes swComponentResolved et swComponentFullyResolved sont inconnues sur votre PC. Elles valent respectivement 3 et 2. Pour faire simple, vous pouvez tester en les remplaçant par ces valeurs. Pour être plus rigoureux, il faut rendre ces constantes accessibles dans le code, ainsi que toutes les autres constantes des API de SolidWorks. Elles sont définies dans le complément "SolidWorks 2021 constant type Library". Il suffit de l'ajouter dans les références de VBA (Outils > Références, et cocher la case ad hoc). Vérifiez que vous avez bien les références à SolidWorks visibles dans l'image jointe.
Petite précision, je suis sous SolidWorks 2018 (je ne sais pas si cela change quelque chose). Concernant la case à cochée, ci-joint les références de ma maccro.
Pour répondre à Sylk, je ne vois pas de quoi vous parlez. Quand je lance la maccro je cible celle-ci via l'explorateur SW et je pointe sur le fichier PromotionMEP.swp. Je ne sais pas comment pointer autrement avant de l'exécuter.
Le plaisir des versions successives de SolidWorks...
Le fonction GetSuppression2 n'existe pas dans la version 2018. Il faut la remplacer par GetSuppression (donc simplement supprimer le 2 !). Et ça devrait commencer à fonctionner.
Une remarque encore: il me semble que l'option Promouvoir (ou Cacher ou Montrer) d'une mise en plan n'a de sens que pour un assemblage. La macro concerne donc un assemblage principal qui contient des sous-assemblages dont on veut voir on non les composants dans la nomenclature de la MEP. Un assemblage qui ne contient que des pièces n'est pas pris en compte...