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
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.
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)
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
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.
Merci pour votre aide. Je pense que la bonne option est effectivement de partir sur sur les nomenclatures Solidworks puis l'exporter sous Excel.