bonjour , je recherche une macro capable de rééditer toutes les fonctions de bibliothèque dans une pièce d'un seul coup afin d'actualiser les changements dans cette bibliothèque ,(la plupart du temps la case ''lier a la pièce de bibliothèque'' est grisée
Il m'arrive souvent de créer des fonctions de bibliothèques pour aller plus vite , mais le problème c'est que souvent il y en a une centaine par pièce et quand je dois faire un changement par exemple un diamètre de perçage qui doit être rétréci ou agrandi ou bien un chanfrein a ajouter , je dois me taper de rééditer une par une toutes les fonctions de bibliothèque afin d'actualiser ce changement sur toute la pièce ce qui peut prendre des heures
je ne sais malheureusement pas écrire de macro alors je me tourne vers ce forum pour trouver une ame charitable qui pourrais m'expliquer comment faire ou bien en écrire une
pour exemple ; jai une piece comprenant des cubes avec un cylindre dessus avec un chanfrein sur l'arete du cylindre , je creer une fonction de bibliotheque permettant de creer rapidemet cette forme en cliquant sur quelques sommets , je dispose donc cette bibliotheque un peu partout dans un part , plus tard on me demande de remplacer le chanfrein par un congé , je le change donc dans le fichier sldlfp, puis, afin d'actualiser ce changement dans mon part je dois doublecliquer sur chaqune de mes fonctions de bibli et cliquer une fois dans la zone de config de la bibli puis de faire touche entree , cela permet a la fonction de bibliotheque d'appliquer les changements que j ai fait dans le sldlfp , le probleme c est que je dois faire cette manip pour chaque fonction de bibli qui sont dans ma piece
quand je dis une centaine c est souvent une 30taine par pieces sur plusieurs pieces d'un assemblage , mais la lourdeur de la piece nést pas tellement un probleme si c'est trop lourd je la divise en plusieur pieces
enfait aucun des carre sur lequel je dispose la bibliotheque n' a la meme dimention / courbure et la bibliotheque me permet de creer une forme qui s adapte a la structure sur laquelle je la dispose la repetition n est pas une solution , et en ce qui concerne les variables equations , je les utilises deja mais cela ne fonctionne pas si je rajoute une fonction a la bibliotheque ou que je change par exemple un chanfrein par un congé , de plus un grand nombre d equations ralentisse la piece
en tout cas merci pour la rapidité de vos reponses
je joint un screenshot qui permet peut etre de mieux comprendre pourquoi je ne peut pas faire de repetition
Vous avez déjà une chance, c'est que chez vous la fonction se met à jour. Pas chez moi, je dois la réimporter de la bibliothèque... ou alors un truc m'échappe.
plus precisement quand je veu actualiser une bibliotheque je fait clic droit editer la fonction , ensuite je clique dans la zone ou normalement se trouvent les differentes config de la bibliotheque , une fenetre d avertissement apparait , clique sur oui (ou alors je fait touche entree ca reviens au meme) et la, les modif s'appliquent
dans la video jointe , je ne sais pas pourquoi mais on ne vois pas la fenetre d avertissement quand je clique dans la zone de config alors je l ai mis dans une capture d ecran
au sujet de la macro qui reconstruit tout automatiquement donnée par @sbadenis je n ai pas reussi a la faire fonctionner et le CTRL+Q ne reconstruit que les fonctions de la piece mais ne prend pas en compte la modif de bibliotheque
Essaye ça je n'ai pas de fonction bibliothèque sous la main pour tester, c'est la macro précédente avec peut être la mise à jour de la fonction si j'ai bien compris:
'-------------------------------------------------------------
' Preconditions:
' 1. Open a model document that contains at least one
' library feature.
' 2. Open the Immediate window.
'
' Postconditions:
' 1. Traverses the FeatureManager design tree searching for
' library features.
' 2. Gets each library feature's data.
' 3. Inspect the Immediate window.
'-------------------------------------------------------------
Option Explicit
Dim boolstatus As Boolean
Dim swApp As SldWorks.SldWorks
Dim ModelDoc2 As SldWorks.ModelDoc2
Dim Feature As SldWorks.Feature
Dim NextFeature As SldWorks.Feature
Dim LibraryFeatureData As LibraryFeatureData
Dim placementPlaneType As Long
Dim placementPlane As Object
Dim ConfigurationName As String
Dim vConfigs As Variant
Dim vConfigName As Variant
Dim x As Long
Dim LinkToLibraryPart As Boolean
Dim LocatingDimensionsCount As Long
Dim vLocDimName As Variant
Dim vLocDimVal As Variant
Dim i As Long
Dim bOverrideDimVal As Boolean
Dim SizeDimensionsCount As Long
Dim vSizDimName As Variant
Dim vSizDimVal As Variant
Dim ReferencesCount As Long
Dim vRefType As Variant
Dim vRefName As Variant
Dim vRefs As Variant
Dim status As Boolean
Sub main()
Set swApp = Application.SldWorks
Set ModelDoc2 = swApp.ActiveDoc
' Traverse the FeatureManager design tree searching for library features
Set Feature = ModelDoc2.FirstFeature
While Not Feature Is Nothing
Debug.Print Feature.Name, Feature.GetTypeName
' If feature is a library feature, then get its data; otherwise,
' move onto the next feature in the FeatureManager design tree
If Feature.GetTypeName = "LibraryFeature" Then
Debug.Print ""
Debug.Print Feature.Name, Feature.GetTypeName
Set LibraryFeatureData = Feature.GetDefinition
boolstatus = LibraryFeatureData.AccessSelections(ModelDoc2, Nothing)
' Access the selections of the library feature that define it
Debug.Print "LibraryFeatureData.AccessSelections = " & boolstatus
' Get its placement type
Set placementPlane = LibraryFeatureData.GetPlacementPlane2(swLibFeatureData_e.swLibFeatureData_PartRespect, placementPlaneType)
Debug.Print "PlacementPlaneType = " & placementPlaneType
placementPlane.Select False
' Get the name of the active library feature configuration
ConfigurationName = LibraryFeatureData.ConfigurationName
Debug.Print "ConfigurationName = " & ConfigurationName
' Determine if the library feature is linked to
' the library feature part
LinkToLibraryPart = LibraryFeatureData.LinkToLibraryPart
Debug.Print "LinkToLibraryPart = " & LinkToLibraryPart
' If the library feature part document is open or
' if the library feature is linked to the library feature
' part document, then get the names of all of the
' library feature configurations; if neither,
' then only the name of the active library configuration
' is returned
'vConfigs = LibraryFeatureData.GetAllConfigurationNames
'Debug.Print "Configuration names :"
'If Not IsEmpty(vConfigs) Then
'For x = LBound(vConfigs) To UBound(vConfigs)
'Debug.Print " " & vConfigs(x)
'Next x
'End If
' Get the number of locating dimensions
'LocatingDimensionsCount = LibraryFeatureData.GetDimensionsCount(0)
'Debug.Print "LocatingDimensionsCount = " & LocatingDimensionsCount
' Get the locating dimensions
'vLocDimVal = LibraryFeatureData.GetDimensions(0, vLocDimName)
'Debug.Print "Locating dimensions :"
'If Not IsEmpty(vLocDimName) Then
'For i = LBound(vLocDimName) To UBound(vLocDimName)
'Debug.Print " " & vLocDimName(i), vLocDimVal(i)
'Next i
'End If
' Determine if existing dimension values of the library
' feature can be overridden
'bOverrideDimVal = LibraryFeatureData.OverrideDimension
'Debug.Print "OverrideDimension = " & bOverrideDimVal
' Get the number of feature dimensions
'SizeDimensionsCount = LibraryFeatureData.GetDimensionsCount(1)
'Debug.Print "SizeDimensionsCount = " & SizeDimensionsCount
' Get the feature dimensions
'vSizDimVal = LibraryFeatureData.GetDimensions(1, vSizDimName)
'Debug.Print "Size dimensions :"
'If Not IsEmpty(vSizDimName) Then
'For i = LBound(vSizDimName) To UBound(vSizDimName)
'Debug.Print " " & vSizDimName(i), vSizDimVal(i)
'Next i
'End If
' Get the number of references
'ReferencesCount = LibraryFeatureData.GetReferencesCount
'Debug.Print "GetReferencesCount = " & ReferencesCount
' Get the references
'vRefs = LibraryFeatureData.GetReferences3(swLibFeatureData_e.swLibFeatureData_PartRespect, vRefType, vRefName)
'If Not IsEmpty(vRefType) Then
'Debug.Print "Reference types and names: "
'For i = LBound(vRefType) To UBound(vRefType)
'Debug.Print " " & vRefType(i) & ", " & vRefName(i)
'vRefs(i).Select False
'Next i
'End If
'Release the selections that define the library feature
LibraryFeatureData.ReleaseSelectionAccess
' Update the definition of the library feature
status = Feature.ModifyDefinition(LibraryFeatureData, ModelDoc2, Nothing)
End If
' Get the next feature until there are no more
Set NextFeature = Feature.GetNextFeature
Set Feature = Nothing
Set Feature = NextFeature
Set NextFeature = Nothing
Wend
End Sub
je vous joint la piece et la bibli ( petite precision c'est que je me sert de beaucoup de fonctions de bibliotheques differentes qui n ont pas toutes les memes references pour etre posée)
une idee serai d'arriver a lier une configuration de bibli a une configuration de piece , cela permettrai , en changeant de config de recharger la bibliotheque
Une première approche, en reprenant l'idée des configurations de la fonction de bibliothèque. Si les modifications au sein de cette fonction se limitent à "faire un changement, par exemple un diamètre de perçage qui doit être rétréci ou agrandi, ou bien un chanfrein a ajouter", le principe consiste à faire ces changements dans une nouvelle configuration de la même fonction de bibliothèque.
Il suffit ensuite, via la macro jointe (FonctionBibli.swp), de remplacer toutes les configurations concernées par la modification par cette nouvelle configuration. En quelque sorte, une macro recherche et remplace une configuration dans une fonction de bibliothèque. La macro force également la liaison avec le fichier SLDLFP de la fonction de bibliothèque.
Pour utiliser, il faut renseigner 3 chaînes de caractères : - le nom de la fonction de bibliothèque (dans votre exemple "carré - A") - le nom de la configuration à remplacer. J'en ai défini 3 pour mes tests dans votre exemple: "A_défaut", "Congé" et "Chanfrein". Une chaîne vide traite toutes les occurrences des configurations. - le nom de la configuration de remplacement, contenant les modifications.
Cette macro ne fonctionne que sur ce principe de remplacement de config, sur une pièce SolidWorks, et ne permet pas de changer les références, les dimensions, etc... A utiliser avec prudence, il y a peu (pas) de garde-fous et pas de fonction annuler. Tout est dans le zip joint, en version SW 2021.