Récupérer nom fichier dans propriété personnalisée

Bonjour, 

Pour nommer mes fichiers j'utilise une règle assez basique : "numérodeplan - description"


Est-il possible avec solidworks de récupérer ces deux informations dans 2 propriétés personnalisées différentes avec une macro ou quelque-chose dans le genre ? 

Avant j'utilisais Créo et c'était assez simple de faire cette manipulation mais j'ai l'impression qu'avec Solidworks c'est beaucoup plus compliqué ...

Merci d'avance pour votre aide.

 

Bonjour,

 

Oui c'est possible, tu peu récupérer les donner des propriété personnalisé et même celle spécifique a la configuration.

Tu veux récupérer des informations sur la mise en plan ? Tu veux remplir les propriétés personnalisé d'après le nom du fichier ? Ou faire un bouton 'enregistrement' qui enregistre le fichier d'après la propriété 'numéro de plan' et 'description' ?

1 « J'aime »

Bonjour,

Dans le principe, pour récupérer le nom du fichier et le mettre dans une propriété personnalisée, tu peux faire quelque chose du genre :

Dim swApp As Object
Dim swModel As ModelDoc2
Dim config As SldWorks.Configuration
Dim swCustProp As CustomPropertyManager
Dim lRetVal As Long

Sub main()
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set config = swModel.GetActiveConfiguration
    Set cusPropMgr = config.CustomPropertyManager
    lRetVal = cusPropMgr.Add3("FileName", swCustomInfoType_e.swCustomInfoText, swModel.GetTitle, swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd)
End Sub

Il ne reste plus qu'à retravailler le texte que tu récupère par le swModel.GetTitle pour en tirer les 2 valeurs qui t'intéresse et à stocker ces 2 valeurs dans 2 propriétés séparées.

Cordialement,

3 « J'aime »

Bonjour,
Une macro telle que celle proposée par @d.roger peut tout à fait faire l'affaire.
Vous pouvez également jeter un œil sur la présentation de l'ensemble des outils de la suite myCADtools. Il s'agit d'une cinquantaine d'utilitaires permettant d'automatiser des tâches répétitives.
L'utilitaire SmartProperties est l'outil qu'il vous faut !
Je vous invite à regarder ce document.
https://www.lynkoa.com/contenu/pr%C3%A9sentation-des-utilitaires-mycadtools-2018
Tous les outils sont compatibles SW2016-2017 et 2018.
Cordialement

1 « J'aime »

Bonjour à tous, 

 

@mandragore, je cherche simplement à récupéré les infos contenues dans le nom de fichier.

@d.roger, effectivement il semblerait (du peu que je comprenne le VB) que cela réponde en partie à mon problème. N'ayant jamais utilisé les macros sur SW, je vais essayer de me dépatouiller avec tout ça, je vous tient au courant si je parvient à une solution.

 

Merci

Bonjour.

Je suis exactement dans le même cas que Gérome.

La proposition de solution de @d.roger me semble intéressante. Mais je n'ai jamais utilisé les macros et je ne sais pas par ou commencer. Et de toute évidence je n'ai pas les bases me permettant de comprendre leur programmation. Si cela ne vous dérange pas trop pourriez-vous m'expliquer dans le détail comment utiliser cette macro.

Cordialement.

Une simple recherche google et magie:

http://help.solidworks.com/2018/french/SolidWorks/sldworks/c_recording_playing_macros.htm?verRedirect=1

Merci @sbadenis pour cette réponse bien qu’elle soit sarcastique.

J’avais déjà pris connaissance de cette page et intégré le code brut donné par @d.roger dans VBA.

J’ai bien évidemment tenté d’exécuter la macro tel qu’elle depuis solidworks, ce qui n’a pas fonctionné, vous vous en doutez.

Ne comprenant pas les tenants et aboutissants de ce script je ne sais pas quoi modifier pour le faire fonctionner dans mon cas.

J’ai cependant fait une seconde tentative en intégrant le nom de ma pièce à la place de la mention "FileName" qui est écrite en rouge dans le texte d’origine. Ce qui ne semble pas avoir mieux fonctionné.

Je souhaite depuis le nom de ma pièce récupérer deux propriétés personnalisées. La première comportant les 14 premiers caractères du nom de ma pièce et la seconde les caractères suivants composants le nom de ma pièce.

Si quelqu’un ici accepte de m’expliquer comment y parvenir, je l’en remercie par avance.

 


st.png

Bonjour,

A la remarque "J’ai bien évidemment tenté d’exécuter la macro tel qu’elle depuis solidworks, ce qui n’a pas fonctionné, vous vous en doutez.", es-tu sûr qu'elle n'a pas fonctionné ? Ce bout de macro permet juste de créer une propriété personnalisée (dans la configuration active) nommée "FileName" dont la valeur est le nom de la pièce donc es-tu aller voir dans les propriétés personnalisée si cette nouvelle propriété a bien été créée ?

Donc pour créer 2 propriétés personnalisées à partir du nom du fichier, il faut déjà récupérer le nom du fichier par la fonction " swModel.GetTitle" puis retravailler cette valeur pour la coupée en 2 suivant le découpage voulu et enfin stocker chaque bout de cette valeur dans 2 propriétés différentes :

Dim swApp As Object
Dim swModel As ModelDoc2
Dim config As SldWorks.Configuration
Dim swCustProp As CustomPropertyManager
Dim lRetVal As Long
Dim maValeur0 As String
Dim maValeur1 As String
Dim maValeur2 As String

Sub main()
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    maValeur0 = swModel.GetTitle 'On récupère le nom du fichier
    maValeur1 = Left(maValeur0, 8) 'On récupère les 8 premiers caractères du nom du fichier
    maValeur2 = Right(maValeur0, 12) 'On récupère les 12 derniers caractères du nom du fichier
    Set config = swModel.GetActiveConfiguration
    Set cusPropMgr = config.CustomPropertyManager
    lRetVal = cusPropMgr.Add3("MaPropriete-1", swCustomInfoType_e.swCustomInfoText, maValeur1, swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd)
    lRetVal = cusPropMgr.Add3("MaPropriete-2", swCustomInfoType_e.swCustomInfoText, maValeur2, swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd)
End Sub

Cordialement,

3 « J'aime »

Merci Beaucoup @d.roger pour ton aide précieuse.

Après avoir posté mon second message je me suis aperçu que ces valeurs avaient êtes crées dans les propriétés spécifiques à la configuration.

 

Grace à ton explication je comprends mieux tes scripts.

Et la seconde version m’as fait énormément progresser, j’obtiens presque le résultat souhaité.

Il ne me reste plus qu’à trouver le moyen de récupérer tous les caractères après le 14em. Étant donné que le nombre de caractère correspondant au N° de pièce est constant, contrairement au nombre de caractères du nom des pièces.

Cordialement.

Bonjour,

maValeur0 = swModel.GetTitle
maValeur1 = Left(maValeur0, 14)
maValeur2 = Right(maValeur0, Len(maValeur0) - Len(maValeur1))

Cordialement,

2 « J'aime »

Merci pour cette précision. J’ai compris comment filtrer l’extension du fichier, éviter les premiers caractères pour n’avoir qu’une partie de la référence en numéro de plan. Parfait. Merci beaucoup.

Du coup je partage ^^

Dim swApp As Object
Dim swModel As ModelDoc2
Dim config As SldWorks.Configuration
Dim swCustProp As CustomPropertyManager
Dim lRetVal As Long
Dim maValeur0 As String
Dim maValeur1 As String
Dim maValeur2 As String
Dim maValeur3 As String
Dim maValeur4 As String
Dim maValeur5 As String
Dim maValeur6 As String
Dim maValeur7 As String



Sub main()
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    maValeur0 = swModel.GetTitle 'On récupère le nom du fichier
    maValeur1 = Left(maValeur0, 6) 'On récupère les 6 premiers caractères du nom du fichier'
    maValeur2 = Left(maValeur0, 12) 'On récupère les 12 premiers caractères du nom du fichier'
    maValeur3 = Right(maValeur2, Len(maValeur2) - Len(maValeur1)) '2 moins 1 pour avoir le n° du plan'
    maValeur4 = Right(maValeur0, 7) 'On récupère l'extension'
    maValeur5 = Left(maValeur0, 13) 'On récupère les 13 premiers caractères du nom du fichier'
    maValeur6 = Right(maValeur0, Len(maValeur0) - Len(maValeur5)) 'On récupére tout au delà du 13éme caractére'
    maValeur7 = Left(maValeur6, Len(maValeur6) - Len(maValeur4)) 'on enlève l'extention du fichier à 5'
    Set config = swModel.GetActiveConfiguration
    Set cusPropMgr = config.CustomPropertyManager
    lRetVal = cusPropMgr.Add3("N° plan", swCustomInfoType_e.swCustomInfoText, maValeur3, swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd)
    lRetVal = cusPropMgr.Add3("Nom de la pièce", swCustomInfoType_e.swCustomInfoText, maValeur7, swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd)
End Sub