Bonjour,
Je souhaiterais réaliser une macro ou je puisse ajouter une donnée dans le filtre du feature manager (1):
Et si possible vérifier si la zone 2 est vide ou pas après le filtre.
Si vide on supprime le filtre.
Si pas vide msgbox
Le plus important est de pouvoir ajouter ou enlever une donnée au filtre la vérification (vie ou pas vide) resterait secondaire.
J’ai bien trouvé cette fonction sans vraiment avoir d’exemple:
Si quelqu’un à un exemple ou une idée de comment utiliser cette fonction.
Bonjour ;
Bah, comme souvent il y a CodeStack : (Non testé)
1 « J'aime »
J’ai bien vu ce code mais pour moi il n’utilise pas le filtre et sur de gros assemblage comme c’est mon cas, je pense que la recherche sera beaucoup plus lente.
si vraiment pas le choix je partirais la dessus.
mais notre solution via le filtre semble très rapide en le tapant à la main?
Je souhaiterais juste automatiser cette recherche en l’intégrant dans une autre macro.
Et si possible ensuite ajouter la recherche une fois filtré si=0 pas de message et si >0 message
Techniquement l’utilisation du fitre ressemble à ceci:
Sub FiltrerFeatureManager()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim searchText As String
' Initialiser l'application SolidWorks
Set swApp = Application.SldWorks
' Obtenir le modèle actif
Set swModel = swApp.ActiveDoc
' Vérifier si un document est ouvert
If swModel Is Nothing Then
MsgBox "Aucun document ouvert."
Exit Sub
End If
' Définir le texte de recherche
searchText = "Rondelle"
' Définir le texte de filtrage dans le FeatureManager
swModel.Extension.FeatureManagerFilterString = searchText
' Forcer la mise à jour de l'interface utilisateur
swModel.GraphicsRedraw2
End Sub
Cela fonctionne, dans cet exemple, seules les « rondelles » sont filtrées. Seulement il y a un hic (et pas des moindres), je ne parviens pas à « annuler » la filtration …
1 « J'aime »
Je viens de tester ce code en pas à pas:
Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim value As String
Dim value2 As String
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swModelDocExt = swModel.Extension
value = "Tôle passage réduit"
'value = swModelDocExt.FeatureManagerFilterString
swModelDocExt.FeatureManagerFilterString = value
value2 = swModelDocExt.FeatureManagerFilterString
Debug.Print value2
swModelDocExt.FeatureManagerFilterString = ""
'swModel.ClearSelection2 True
End Sub
Le filtre s’applique bien à la fenêtre graphique (partie CAO), seul ma pièce filtré apparait dans cette zone graphique.
Par contre le feature manager reste figé. (arborescence complète de l’assemblage et rien d’apparent dans le filtre.
Bug de ma version 2023 SP05 ou comportement normal?
Ou mauvaise fonction?
@Maclane pour annuler un filtre il faut mettre « » dans value ou searchtext=« » pour ton code
Même comportement avec ton code:
Uniquement les rondelles apparaissent à droite.
Mais rien dans le feature manager.
Méthode macro:
Méthode manuelle:
sous Solidworks 2022 même constat, seule la vue graphique est impactée.
1 « J'aime »
@sbadenis : chez toi aussi la commande :
searchtext=« »
Est incroyablement lente ?
J’ai essayé avec:
searchtext= vbNullString
mais ce n’est pas mieux…
1 « J'aime »
As-tu regardé du coté de TreeManager des outils Mycad (il est caché dans le déroulant "outils de references):

Cela ne répond évidement pas à tous tes besoin mais c’est aussi une option pour la filtration multi-critéres:
Nota : J’ai vraiment du mal à comprendre la logique Visiativ qui consiste à cacher leurs outils, voir à ne plus les installer par défaut … cela ne pousse pas à la consommation…
il y a peut-être une autre piste possible en passant par Les sélections avancées.

(option souvent oubliée de Solidworks).
quelques exemples VBA sont disponibles dans les aides API :
https://help.solidworks.com/2022/english/api/sldworksapi/Use_Advanced_Component_Selection_Example_VB.htm?verRedirect=1
https://help.solidworks.com/2022/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.iadvancedselectioncriteria.html
Edit : Je viens de me rendre compte que c’est la fonction utilisée par la macro de CodeStack citée un peu plus haut…
2 « J'aime »
@Maclane Oui pour moi aussi cela met « 2 h » à rafraichir la vue!
Pour l’utilisation de TreeManager, pas possible je veux ajouter cela dans une macro existante.
Si je passe par un utilitaire ext à SW les dessinateurs ne le feront pas systématiquement et derrière cela génère des erreurs pièces à remplacés non détectés.
Pour les utilitaires en nombre limités je crois que c’est pas du à Visiativ mais Windows ou Dassault je sais plus, qui ont créer cette limitation (Cf hotline)
Pour la sélection avancées, je viens de tester cela fonctionne pour des pièce dans l’assemblage en revanche dans un sous-assemblage il ne trouve plus la pièce.
Cela semblait pourtant parfait!
1 « J'aime »