Bonjour,
je suis à la recherche d’un code VBA pour supprimer toutes les configurations d’une pièce sauf la configuration active.
Ou alors supprimer toutes les configuration sauf ma variable « ConfigName » qui est déjà dans mon code.
Bonjour;
J’ai créé une macro qui devrait vous intéresser:
- Elle supprime toutes les configurations pour ne conserver que l’active.
- Elle « déplace » les propriétés de « Spécifiques à la configurations » vers « Propriété personnalisées »…
Option Explicit
Sub Delet_ConfigS()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim status As Boolean
Dim swConfigMgr As SldWorks.ConfigurationManager
Dim swConfig As SldWorks.Configuration
Dim vConfigName As Variant
Dim vConfigNameArr As Variant
Dim ActivConfig As String
Dim FilePath As String
'On Supprime toutes les configurations sauf la config Active
Set swApp = Application.SldWorks
'on récupére le document actif
Set swModel = swApp.ActiveDoc
FilePath = swModel.GetPathName
If Not UCase(FilePath) Like "*BIBLIOTHEQUE_*" Or UCase(FilePath) Like "*AFFAIRES_*" Then
Set swConfigMgr = swModel.ConfigurationManager
'on récupére la configuration active
Set swConfig = swConfigMgr.ActiveConfiguration
ActivConfig = swConfig.Name 'on récupére de nom de la configation active
vConfigNameArr = swModel.GetConfigurationNames 'on récupére le nom de toutes les configurations
For Each vConfigName In vConfigNameArr 'on boucle sur toutes les configurations
If Not vConfigName Like ActivConfig Then 'on saute la configuration Active
swModel.DeleteConfiguration2 (vConfigName) ' on supprime la configuration non Active
Else
End If
Next vConfigName
Dim boolstatus As Variant
boolstatus = swModel.EditConfiguration3(ActivConfig, ActivConfig, "", "", 36) 'On change le Nom de la configuration qui sera utilisé dans les Nomenclatures = Nom du Document
' On Supprime la tables des configurations si elle existe
Set swModelDocExt = swModel.Extension
status = swModelDocExt.HasDesignTable 'True Si le document à une Table de Config Sinon=False
If status Then
swModel.DeleteDesignTable
Else
End If
'on affiche la configuration active avant le traitement
swModel.ShowConfiguration2 ActivConfig
Call SetPropToDocument
'on force la reconstruction
swModel.ForceRebuild3 False
Else
MsgBox ("Que Nenni !" & Chr(10) & "Vous ne devez pas utiliser cette macro sur les Fichiers en Bibliotheques...."), vbOKOnly + vbExclamation, "Emplacement Fichier."
End If
End Sub
Sub SetPropToDocument()
Dim swApp As SldWorks.SldWorks
Dim swModel As ModelDoc2
Dim sConfigName As String
Dim CustomProp As CustomPropertyManager
Dim CustomPropName() As String
Dim i As Long
Dim j As Long
Dim Propname As Variant
Dim Proptype As Variant
Dim Propvalue As Variant
Dim vConfNameArr As Variant
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If (swModel.GetType = swDocDRAWING) Then 'On ne travaille pas sur une Mise en plan...
Else
vConfNameArr = swModel.GetConfigurationNames 'On recupere le Nom de toutes les configurations
For i = 0 To UBound(vConfNameArr)
sConfigName = vConfNameArr(i)
Set CustomProp = swModel.Extension.CustomPropertyManager(i)
' ************** COUPE ET COLLE LES PROPRIETES DES CONFIG VERS PROPRIETES DU DOCUMENT ***************************************
'Copy the configuration specific properties from the Custom properties
Set CustomProp = swModel.Extension.CustomPropertyManager(sConfigName)
If IsEmpty(CustomProp.GetNames) = False Then
CustomPropName = CustomProp.GetNames
Dim NumProps As Variant
NumProps = CustomProp.GetAll(Propname, Proptype, Propvalue)
For j = 0 To UBound(CustomPropName)
Dim NewPropOk As Variant
NewPropOk = swModel.AddCustomInfo3("", Propname(j), Proptype(j), Propvalue(j)) 'Copie des propriétes de la configuration vres le Document
swModel.DeleteCustomInfo2 sConfigName, CustomPropName(j)
Next j
Else
End If
Next i
End If
Erase CustomPropName
Erase vConfNameArr
Erase CustomPropName
'Erase Propname
'Erase Proptype
'Erase Propvalue
'************************************************************************************************************************************************
'On supprime les vues Enregistrées
Dim vModelViewNames As Variant
vModelViewNames = swModel.GetModelViewNames
For i = 0 To UBound(vModelViewNames)
If i > 9 Then 'Solidworks : Les vues personnelles sont toujour enregistrée avec un numero supperieur à 9 (de "0" à "9" se sont les vues "Standard"
Debug.Print vModelViewNames(i)
swModel.DeleteNamedView (vModelViewNames(i))
End If
Next i
'*************************************************************************************************************************************************
End Sub
…
Attention à la commande :
If Not UCase(FilePath) Like « BIBLIOTHEQUE_ » Or UCase(FilePath) Like « AFFAIRES_ » Then
C’est une sécurité que j’avais mis en place pour empêcher le fonctionnement de cette macro selon l’emplacement du fichier à traiter…(A modifier selon vos besoins)
Cordialement.
3 « J'aime »
parfait c’est exactement ce que je voulais, merci beaucoup
1 « J'aime »