Export Solidworks Asm vers Xls (ne renvoi pas la description de la configuration quand celle-ci est actif)

J'ai un programme qui va exporter les information contenus dans un assemblage pour en faire un fichier .xls

Il fonctionne parfaitement sauf qu'il ne renvoi pas la description de la configuration quand celle-ci est actif.  


bom-dlb.swp

As-tu un petit assemblage test avec 2-3 pièces à fournir, afin de bien situer le problème?

N'ayant pas les même propriétés pas sûr de bien comprendre.

Et aussie cause version SW si tu peux pointer le soucis (quel propriété tu obtiens et celle que tu désire dans ton fichier xls)

Bonjour,

Si j'ai bien compris, il faut modifier dans la méthode ci-dessous une ligne afin que la macro aille chercher les informations dans l'onglet "spécifique à la conf".

Public Sub AddElementBOM(swComp As SldWorks.Component2, nLevel As Long)

    Set swcustmng = swextention.CustomPropertyManager(swConf.Name) 'Va cherche dans l'onglet description des propriete personnaliser
   
    Call swcustmng.Get6("Description", True, sPropVal, sPropRVal, bWasResolve, bLinkto)
    vBOM(UBound(vBOM)).m_Properties(4) = sPropRVal
End Sub

A la place de swextention.CustomPropertyManager(""), swextention.CustomPropertyManager(swconf.name)

3 « J'aime »

Ci-joint un exemple d'assemblage

Normalement la nomenclature devrais resemblé à ceci :

Arborescence    Code ERP    Description            Quantité
1        1198        RDL NFE 25-514 M3x8 A2        1
2        2489        RDL NFE 25-514 M6x12 A2        1

Avec le Programme VBA il donne ce resultat :

ARBORECENCE    CODE ERP    DESCRIPTION            QUANTITE
-----1        001198        RDL NFE 25-514 MXX A2        2


exemple.zip

Bonjour,

Alors je viens de tester donc deux solutions. Si vous voulez passer par les propriétés, votre table ne fonctionne pas  car elle ne vient pas renseigner de propriétés "Description" dans les fichiers (d'où le RDL NFE 25-514 MXX A2 en résultat), il faudrait donc modifier cette table en ajoutant le paramètre $PROPRIETE@Description.

Sinon vous pouvez récupérer directement la description de la configuration auquel cas il faut changer le code ainsi:

Public Sub AddElementBOM(swComp As SldWorks.Component2, nLevel As Long)
    Dim sCompName As String
    Dim i As Long
    Dim swModel As SldWorks.ModelDoc2
    Dim swcustmng As SldWorks.CustomPropertyManager
    Dim swextention As SldWorks.ModelDocExtension
    Dim sPropVal As String
    Dim sPropRVal As String
    Dim bWasResolve As Boolean
    Dim bLinkto As Boolean
    Dim swConf As SldWorks.Configuration
    Dim sDescription As String
    
    sCompName = swComp.Name2
    sCompName = GetRealNameComp(sCompName)
    Debug.Print sCompName
    'Recherche element de tableau correspondant a sCompName si existe increement la compteur
    For i = 1 To UBound(vBOM)
        If vBOM(i).m_CompName = sCompName Then
            vBOM(i).m_Count = vBOM(i).m_Count + 1
            Exit Sub
        End If
    Next i
    'Il n'existe pas je crée l'element
    ReDim Preserve vBOM(UBound(vBOM) + 1)
    vBOM(UBound(vBOM)).m_CompName = sCompName
    vBOM(UBound(vBOM)).m_Count = 1
    vBOM(UBound(vBOM)).m_FileName = swComp.GetPathName
    vBOM(UBound(vBOM)).m_Level = nLevel
    vBOM(UBound(vBOM)).m_RefConf = swComp.ReferencedConfiguration
    
    Set swModel = swComp.GetModelDoc2
    If nLevel = 0 Then
        Set swConf = swModel.GetActiveConfiguration
    Else
        Set swConf = swModel.GetConfigurationByName(swComp.ReferencedConfiguration)
    End If
    
    vBOM(UBound(vBOM)).m_RealName = BOMPartNumber(swConf, swModel) 'La variable vBOM (Nom du fichier) = "BOMPartNumber" (Nom de la configuration)
    Set swextention = swModel.Extension
    Set swcustmng = swextention.CustomPropertyManager(swComp.ReferencedConfiguration)
    'N° Proto
    'Indice MAJEUR
    'Libelle 02
    'Matiere
    Call swcustmng.Get6("N° Proto", True, sPropVal, sPropRVal, bWasResolve, bLinkto)
    vBOM(UBound(vBOM)).m_Properties(0) = sPropRVal
    Call swcustmng.Get6("Indice MAJEUR", True, sPropVal, sPropRVal, bWasResolve, bLinkto)
    vBOM(UBound(vBOM)).m_Properties(1) = sPropRVal
    Call swcustmng.Get6("Libelle 02", True, sPropVal, sPropRVal, bWasResolve, bLinkto)
    vBOM(UBound(vBOM)).m_Properties(2) = sPropRVal
    Call swcustmng.Get6("Matiere", True, sPropVal, sPropRVal, bWasResolve, bLinkto)
    vBOM(UBound(vBOM)).m_Properties(3) = sPropRVal
    
    'Set swcustmng = swextention.CustomPropertyManager("") 'Va cherche dans l'onglet description des propriete personnaliser
   
    'Call swcustmng.Get6("Description", True, sPropVal, sPropRVal, bWasResolve, bLinkto)
    sDescription = swConf.Description
    vBOM(UBound(vBOM)).m_Properties(4) = sDescription
End Sub

 

Pour simplifier, j'ai ajouté sDescription et la récupération de la description de la configuration active.

Cyril-f. merci pour votre réponse.

J'ai fait un test. On se rapproche de la vérité.

Le résultat est le suivant avec la modification pour récupérer directement la description de la configuration : 

ARBORECENCE    CODE ERP    DESCRIPTION            QUANTITE
-0        Exemple         Défaut                 1
--1        001198        RDL NFE 25-514 M3x8 A2        2


Mais il reste un problème. il devrait y avoir deux lignes. 

 Arborescence    Code ERP    Description            Quantité
1        1198        RDL NFE 25-514 M3x8 A2          1
2        2489        RDL NFE 25-514 M6x12 A2         1

Bonjour,

Alors le problème vient de la partie du code ci-dessous dans le module AddElementBOM(swComp As SldWorks.Component2, nLevel As Long):

    For i = 1 To UBound(vBOM)
        If vBOM(i).m_CompName = sCompName Then
            vBOM(i).m_Count = vBOM(i).m_Count + 1
            Exit Sub
        End If
    Next i

 

La macro ne voit pas qu'il y a un fichier différent puisque celle-ci s'appuie sur le nom du composant qui est identique du coup elle considère que le composant existe déjà et ne fait qu'ajouter une quantité.

J'ai modifié ainsi, ça fonctionne sur des composants à configuration type vis/rondelles... par contre sur un fichier à configuration qui pourrait être en quantité 2 (configuration ouverte/fermée par exemple) ceci ne fonctionnera pas.

    For i = 1 To UBound(vBOM)
        If vBOM(i).m_CompName = sCompName And swComp.ReferencedConfiguration = vBOM(i).m_RefConf Then
            vBOM(i).m_Count = vBOM(i).m_Count + 1
            Exit Sub
        End If
    Next i

 

Il faudra donc probablement rajouter des critères de contrôle ou se baser sur les nomenclatures Solidworks puis l'exporter sous Excel.

1 « J'aime »

Merci pour votre aide. Je pense que la bonne option est effectivement de partir sur sur les nomenclatures Solidworks puis l'exporter sous Excel.