Macro VBA dans mise en plan - comment avoir le nom de la configuration de la pièce de référence

Bonjour,

Je souhaiterais récupérer le nom de la configuration de la pièce utilisée en référence dans une mise en plan.

Voici le bout de code que j'ai actuellement :
 

'on active le doc de travail
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
Set FileSys = CreateObject("Scripting.FileSystemObject")

'obtient le chemin complet du document actif, y compris le nom du fichier
PathName = Part.GetPathName     
'obtient le chemin du document actif, sans le nom du fichier :
FilePath = Left(PathName, InStrRev(PathName, "\"))
'obtient le nom du fichier :
FileName = Right(PathName, Len(PathName) - InStrRev(PathName, "\"))
Typedoc = Right(FileName, 3)

Select Case Typedoc
    Case "drw", "DRW"  'mise en plan
    
        Set swview = Part.GetFirstView 'active/récupère le fond de plan pour les propri perso
        Set swview = swview.GetNextView 'active/récupère la première vue pour les propri perso
        Set swRefDoc = swview.ReferencedDocument  ' On a maintenant swRefDoc le 3D de la mise en plan
               
        'on récupère les propriétés de la config de la pièce ou assemblage de référence
        configNames = swRefDoc.GetConfigurationNames
        vConfigNameArr = swRefDoc.GetConfigurationNames

        For Each vConfigName In vConfigNameArr
            Debug.Print vConfigName
            vCustInfoNameArr = swRefDoc.GetCustomInfoNames2(vConfigName)

 

sauf que dans "configNames" je récupère toutes les configs de la pièce alors que je ne voudrais que la config de la pièce utilisée dans la mise en plan et pouvoir ensuite supprimer ma boucle For Each.

Merci pour votre aide, je suis certain que c'est bidon pour vous.

et pour une pièce ou un assemblage, je recherche à avoir la valeur d'une propriété spécifique (par exemple : Engineering PartNumber) uniquement présente dans les "propriétés de la configuration" pour la configuration de la pièce active.


prop.png

Pour la configuration active:

https://help.solidworks.com/2020/english/api/sldworksapi/Get_List_Of_Configurations_Example_VB.htm?verRedirect=1

Pour les propriété personnalisé lié à la configuration:

https://help.solidworks.com/2020/English/api/sldworksapi/Get_Custom_Properties_for_Configuration_Example_VB.htm?verRedirect=1

Bonjour;

C'est tout simple;

    Dim swConfigMgr                 As SldWorks.ConfigurationManager
    Dim swConfig                    As SldWorks.Configuration
....
Set swConfig = swConfigMgr.ActiveConfiguration ' configuration Active
stnameConfig = swConfig.Name 'Nom de la configuration Active

Cordialment.

1 « J'aime »

Bonjour Maclane,

C'est bien ce que j'avais mis mais ça ne marche pas.

No_article = Part.GetCustomInfoValue("Défaut", "Engineering PartNumber") --> ça fonctionne

No_article = Part.GetCustomInfoValue(swConfig, "Engineering PartNumber") --> ça ne fonctionne pas (erreur d'exécution 13, Incompatibilité de type)

Merci pour votre retour

Bonjour;

Essayez Avec:

Dim swCustProp As Variant
....
 Set swCustProp = swModel.Extension.CustomPropertyManager(swConfig)
No_article = swCustProp.Get4("Engineering PartNumber", False, val, valout)
No_article = valout 'avec dim No_article as string

Cordialement

1 « J'aime »

Bonjour Pierre,

Dans la dernière ligne de votre message précédent, la variable swConfig désigne un objet iConfiguration (dans le cas présent swconfig est la config active), et non la chaîne de caractères contenant son nom, d'où l'erreur 13.
C'est sans doute swConfig.Name qui est la chaîne à utiliser (également nommée stnameConfig par Maclane).

Cordialement

1 « J'aime »

Merci à vous deux, Maclane & m.blt.
Je savais bien que c'était quelque chose de bidon...mais pas évident pour moi.