Maccro promotion d'assemblage

Bonjour,

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.

Cordialement,


ficap_macro_promouvoir.swp

Il faut que tu créer une boucle supplémentaire pour traverser les composant:

Regarde ce code proposer par @Cyril.f  dans ce lien:

https://www.lynkoa.com/forum/autres-produits/macro-s%C3%A9lectionner-un-composant-dans-un-assemblage?page=0#answer-

Ensuite tu ajoute la partie ou tu filtre les assemblage voir le filtre pour ignorer suivant le nom et tu ajoute le code pour promouvoir l'assemblage.

 

 

 

2 « J'aime »

Je comprends la démarche à réaliser mais n'étant pas programmeur je ne suis pas capable de modifier cette maccro.

Je dois m'attaquer au morceau proposé gentiment par @Cyril.f et 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.

2 « J'aime »

Promouvoir c'est pour les nomenclatures et ça se passe au niveau des nomenclatures:

https://help.solidworks.com/2021/french/WhatsNew/c_wn2021_pdm_bom_options.htm

2 « J'aime »

voici ma macro :

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
       
    Next i
End Sub

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?):

https://cadplus.xarial.com/batch/assembly/

Merci pour vos retours, l'idée était d'avoir un outil utilisable par l'équipe pour aujourd'hui comme pour dans 2ans ou +.
 

Bonjour,

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.

Cordialement.


promotionmep.zip
2 « J'aime »

Après test j'ai eu une erreur lors de l'exécution de la maccro.
Ci-joint le screenshot de cette erreur.

 


bug_maccro.png

As tu lancer la procédure main?

Par ce que la macro de @m.blt fonctionne très bien chez moi.

Pour lancer la procédure main soit en éditant la macro tu met ton curseur de souris après Sub main()  tout à la fin de la macro, et tu clique sur f5.

Soit dans outil executer puis chemin de la macro.

Si toujours en erreur envoi peut-être un assemblage simplifié et non protégé via project manager pour le tester.

1 « J'aime »

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.

Comme l'a dit @sbadenis il faut choisir la procédure Main depuis "chemin de la macro" puis valider.

Idem si tu ajoutes le bouton à une barre d'outils, il faut éditer le bouton et choisir la procédure Main.

1 « J'aime »

Bonjour @Psyno ,

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.

 

1 « J'aime »

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.


screenshot.png

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

3 « J'aime »

Effectivement après édition des lignes GetSuppression2 la maccro fonctionne très bien!
Merci à tous!