Modification d'une macro BOM

Bonjour,

Je suis interessé par cette macro qui permet de créer une BOM excel depuis un assemblage en un clic, mais j'aimerais la modifier pour qu'elle utilise une modèle excel dans lequelle j'ai paramétré certaines choses (macro qui permet de modifier les propriétées dans SW, liste de choix déroulants)

Voici le code de la macro d'origine:

Option Explicit

Dim swApp                   As SldWorks.SldWorks
Dim swModel                 As SldWorks.AssemblyDoc
Dim swModelDocExt           As SldWorks.ModelDocExtension
Dim swBOMAnnotation         As SldWorks.BomTableAnnotation
Dim swBOMFeature            As SldWorks.BomFeature
Dim BomType                 As Long
Dim Configuration           As String
Dim TemplateName            As String
Dim swConfig                As SldWorks.Configuration
Dim xlApp                   As Excel.Application
Dim wbk                     As Excel.Workbook
Dim sht                     As Excel.Worksheet
Dim NumCol                  As Long
Dim NumRow                  As Long
Dim I                       As Long
Dim J                       As Long
Dim chemin                  As String

Sub xls()
    ' On ouvre un nouvel objet Excel
    Set xlApp = New Excel.Application
    
    ' On rend Excel visible avec un nouveau classeur
    With xlApp
        .Visible = True
        Set wbk = .Workbooks.Add
        Set sht = wbk.ActiveSheet
    End With
    
    ' On se raccroche à l'application SW
    Set swApp = Application.SldWorks

    ' On se raccroche au document SW ouvert
    Set swModel = swApp.ActiveDoc
    Set swModelDocExt = swModel.Extension
    
    ' On définit le modèle de nomenclature
    TemplateName = "Z:\BIBLIO\BIBLIO_LOGICIEL\BIBLIO_SOLIDWORKS\SOLIDWORKS_FORMALISME_CLEO\Modèle de nomenclature\9999_Nomenclature_SW.sldbomtbt"
    BomType = swBomType_Indented
    
    ' On récupère la configuration active
    Set swConfig = swModel.GetActiveConfiguration
    Configuration = swConfig.Name
    
    ' On insère la nomenclature dans le 3D
    Set swBOMAnnotation = swModelDocExt.InsertBomTable3(TemplateName, 0, 1, BomType, Configuration, False, swNumberingType_Detailed, True)
    Set swBOMFeature = swBOMAnnotation.BomFeature
    
    ' On reconstruit le 3D
    swModel.ForceRebuild3 True
    
    ' On remplit les cellules de Excel à partir des valeurs de la nomenclature
    NumCol = swBOMAnnotation.ColumnCount
    NumRow = swBOMAnnotation.RowCount
    For I = 0 To NumRow
        For J = 0 To NumCol
            sht.Cells(I + 1, J + 1).Value = swBOMAnnotation.Text(I, J)
        Next J
    Next I
    
    ' On définit le nom complet du fichier Excel
    chemin = Environ("USERPROFILE") & "\Desktop\" & "export" & ".xls"
    
    ' On sauvegarde le fichier Excel puis on ferme Excel
    With xlApp
        wbk.SaveAs chemin
        wbk.Close
        .Quit
    End With
 
End Sub
        


        
      

 

J'imagine que la section à modifier est la suivante,

Dim wbk                     As Excel.Workbook

 

ou

 

' On ouvre un nouvel objet Excel
    Set xlApp = New Excel.Application
    
    ' On rend Excel visible avec un nouveau classeur
    With xlApp
        .Visible = True
        Set wbk = .Workbooks.Add
        Set sht = wbk.ActiveSheet
    End With

 

mais je ne sais pas comment indiquer le chemin de mon modèle xls

Merci de votre aide

 

 

 

 

Dans un second temps, j'aimerais aussi faire d'autres modifications, comme par exemple

  1. - enregistrer la nomenclature au même endroit que l'assemblage dont elle est issue
  2. - ecrire la nomenclature deux foix : dans l'onglet de travail, mais aussi dans un deuxième onglet, en guise de sauvegarde
  3. - inclure une image (thumbnail) de la pièce devant chaque ligne (possible à partir de 2019 seulement? je travail en 2018 pour le moment) (j'ouvrirai un poste spécifique plus tard, j'ai déja une base de code que je n'arrive pas à faire fonctionner)
  4. exporter toutes les porpriétées de toutes les configurations automatiquement (poste dédié à cette question ICI)
  5. - exporter aussi dans ce tableau excel la propriété SW qui gère les mode exclusion promotion des composants...(j'ouvrirai un poste spécifique plus tard)

Dans la mesure du possible naturellement...

D'avance merci de vos suggestions

1 « J'aime »

Bonjour,

A la question "comment indiquer le chemin de mon modèle xls" il faut remplacer la ligne

Set wbk = .Workbooks.Add

par

Set wbk = .Workbooks.Open("C:\..........\mon modèle.xls")

A la question "enregistrer la nomenclature au même endroit que l'assemblage dont elle est issue" il faut remplacer la ligne

chemin = Environ("USERPROFILE") & "\Desktop\" & "export" & ".xls"

par

Dim ExcelName As String
ExcelName = swModel.GetPathName()
ExcelName = Left(ExcelName, InStrRev(ExcelName, "\"))
chemin = ExcelName & "export" & ".xls"

A la question "ecrire la nomenclature deux foix : dans l'onglet de travail, mais aussi dans un deuxième onglet, en guise de sauvegarde" tu peux par exemple ajouter une ligne

Dim shtSave As Excel.Worksheet

après la ligne

Dim sht As Excel.Worksheet

puis ajouter la ligne

Set shtSave = wbk.Worksheets(2)

après la ligne

Set sht = wbk.ActiveSheet

et enfin ajouter la ligne

shtSave.Cells(I + 1, J + 1).Value = swBOMAnnotation.Text(I, J)

après la ligne

sht.Cells(I + 1, J + 1).Value = swBOMAnnotation.Text(I, J)

Pour les questions 3, 4 et 5 : fil de discussion ultérieur ou dédié ...

Cordialement,

 

2 « J'aime »