Bonjour j’utilise cette macro pour mettre afficher le titre d’un document Solidworks dans windows explorer. je voulais savoir s’il était possible d’actionner la macro lors de chaque enregistrement (sans intervention de l’utilisateur) ? d’après ce que j’ai compris, un add-in serait la meilleure solution, mais vu que je galère avec VS Studio, je cherche une alternative. Merci
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim propMgr As CustomPropertyManager
Dim titleValue As String
Dim resolved As String
Dim wasResolved As Boolean
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then
MsgBox "No document is open!"
Exit Sub
End If
' Access the custom property manager
Set propMgr = swModel.Extension.CustomPropertyManager("")
' Read current value of custom property "Title"
wasResolved = propMgr.Get4("Title", False, resolved, titleValue)
If titleValue = "" Then
MsgBox "Custom property 'Title' is empty!"
Exit Sub
End If
' Copy to Summary Info Title
swModel.SummaryInfo(swSumInfoTitle) = titleValue
' Optional: read back to verify
MsgBox "Summary Info Title set to: " & swModel.SummaryInfo(swSumInfoTitle)
End Sub
Et il manques quelques information essentielles :
La Version de Solidworks
L’étendue de la macro (tous les documents Solidworks, que les pièces, les pièces et les assemblages, les mises en plan …?)
Ce que je comprend:
Dans ta macro tu extrait la valeur de la propriété personnalisée « Title » d’un document SolidWorks ouvert, puis place cette valeur dans le champ Title des informations sommaires du document, vérifiant les erreurs d’absence de document ou propriété vide.
(Nota : je te conseil de ne pas utiliser plusieurs fois la même propriété (le Nom de la propriété) pour des variables différentes … (ici « Title » pour les Propriétés Personnalisés et « Title » pour les propriété du Sommaire Windows (onglet : Récapitulatif dans le résumé information du document Solidworks)
Je te propose d’adapter ta macro pour qu’elle travaille sur tous les fichiers d’un repertoire donné:
A toi de modifier la valeur dans:
folderPath = "C:\Chemin\Vers\Le\Dossier"
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim propMgr As CustomPropertyManager
Dim titleValue As String
Dim resolved As String
Dim wasResolved As Boolean
Dim filePath As String
Dim folderPath As String
Sub main()
Set swApp = Application.SldWorks
' Modifier ici pour mettre le chemin du dossier
folderPath = "C:\Chemin\Vers\Le\Dossier\"
filePath = Dir(folderPath & "*.sld*") ' Trouve les fichiers .sldprt, .sldasm, .slddrw
Do While filePath <> ""
' Ouvre le document
Set swModel = swApp.OpenDoc6(folderPath & filePath, _
GetDocType(folderPath & filePath), _
0, "", 0, 0)
If Not swModel Is Nothing Then
Set propMgr = swModel.Extension.CustomPropertyManager("")
wasResolved = propMgr.Get4("Title", False, resolved, titleValue)
If titleValue <> "" Then
swModel.SummaryInfo(swSumInfoTitle) = titleValue
swModel.Save
End If
swApp.CloseDoc swModel.GetTitle
Else
MsgBox "Impossible d'ouvrir : " & filePath
End If
filePath = Dir() ' Passe au fichier suivant
Loop
MsgBox "Traitement terminé."
End Sub
' Fonction utilitaire pour déterminer le type de document selon l'extension
Function GetDocType(fileName As String) As Long
Dim ext As String
ext = LCase$(Mid$(fileName, InStrRev(fileName, ".") + 1))
Select Case ext
Case "sldprt"
GetDocType = 1 ' pièce
Case "sldasm"
GetDocType = 2 ' assemblage
Case "slddrw"
GetDocType = 3 ' mise en plan
Case Else
GetDocType = 0 ' inconnu
End Select
End Function
Bonjour, merci pour la réponse et les liens (très utiles).
Mon objectif c’est n’est pas d’executer la macro à chaque enregistrement de pièce (assemblage, part ou drawing) mais plutôt de récupérer la valeur de la propriété nommée Title et l’afficher sur windows explorer comme sur cette capture à chaque enregistrement d’où la remarque sur le fait que la macro ne soit pas la meilleure solution dans ce cas puisqu’il faut l’éxecuter à chaque fois.
Est ce possible par exemple de lancer automatiquement la macro, lors d’un enregistrement (assemblage, drawing ou pièce) sans intervention de l’utilisateur ? Il me semble que cela soit possible avec les add-ins mais pas sûr pour les macros VBA.
Bonjour,
C’est possible avec vba mais faut modifier le raccourcis lançant SW pour que la macro s’exécute une fois SW ouvert.
On peut ainsi intercepter les actions dans SW mais faut bien bétonner le code et ses portes de sorties pour pas se retrouver avec des comportement bloquant l’utilisation.
Autre solution, créer une macro d’enregistrement qui se substitue à l’icône d’enregistrement de SW et lui mettre le raccourcis Ctrl+S comme ça totalement transparent pour l’utilisateur.
J’ai essayé les deux méthodes et elles marchent toutes super bien.
Juste une dernière question, j’aimerai bien essayer de créer l’add-in en utilisant VS. J’ai le code, créer le dll mais l’add-in n’est pas affiché sur SolidWorks.
Bonjour ; Il faut probablement charger l’add-in via les compléments Solidworks. Utiliser la méthode ISldWorks ::LoadAddIn en passant le nom de l’add-in puis Après avoir chargé l’add-in, utilisez ISldWorks ::GetAddInObject
pour une documentation plus globale sur la création d’add-in :
il devrait maintenant être accessible depuis :
Si le code est bien réalisé, il devrait être accessible ici :
Serait-il possible de nous fournir le code réalisé ?
J’ai essayé de refaire Creating VB.NET add-in for SOLIDWORKS using API mais j’ai juste SolidWorks qui est ouvert lorsque je lance le code sans le Hello World et l’add-in n’est pas présent dans le menu compléments.
Enregistrez le CLSID du complément dans HKEY_LOCAL_MACHINE\SOFTWARE\SOLIDWORKS\AddIns et définissez les clés de registre suivantes :
La valeur par défaut est 1 ou 0, où 1 active le complément dans le gestionnaire de compléments afin qu’il se charge lorsque l’utilisateur démarre le logiciel SOLIDWORKS.
Description à une description textuelle du complément qui s’affiche dans le gestionnaire de compléments.
Titre d’un titre textuel de la description affichée dans le gestionnaire de compléments.
Appelez ISldWorks ::SetAddinCallbackInfo et transmettez le handle d’instance du complément et l’objet qui prend en charge les méthodes de rappel. Le logiciel SOLIDWORKS conserve cet objet et effectue des rappels.
Appelez ISldWorks ::AddToolbar4 et passez la méthode de rappel associée au bouton de la barre d’outils.
On en parle ici aussi :
et un autre exemple de code ici :
Dans cet exemple, la ligne qui t’intéresse est la création de la clef dans le base de registre pour l’identification de l’add-in dans le menu Solidworks : dim keyname As String = « SOFTWARE\SolidWorks\Addins{ » + t.GUID. ToString() + « } »
Mais sans ton code, je suis en train de te fournir des documents en vrac sans contexte.
En démarrant le code, j’ai reçu cette erreur : Une erreur s’est produite lors de l’écriture des informations d’inscription dans le Registre. Les droits d’administrateur sont requis pour utiliser les options sélectionnées. Utilisez une invite de commandes administrateur pour effectuer ces tâches. Là j’ouvre VS en mode administrateur mais ça marche toujours pas