Macro Export Nomenclature vers Excel

Bonjour à tous,

Je suis débutant en macro,nous utilisons Solidworks au BE et je veux automatiser certaines tâches. Actuellement j’exporte les nomenclatures vers Excel depuis la mise en plan et je les intègre dans notre ERP. J’aimerais une macro pour m’exporter la nomenclature avec le même nom que la mise en plan et dans le mêm dossier.

J’ai essayé via Chatgpt impossible.

J’ai fait des recherches mais je n’arrive pas à trouver mon bonheur, est-ce que quelqu’un aurait une macro ressemblant à ma demande dans sa boite à outils?

Regarde ce sujet:

Ou bien:

Et pour finir celle ci:

Edit: avec la recherche du forum les sujet sont également trouvable et sans avoir besoin d’un chat! :wink:

3 « J'aime »

Merci pour ta réponse rapide, j’avais bien vu ces sujets mais le premier sujet il intègre une nomenclature, l’exporte et la supprime. Moi je voudrais que la macro sélectionne la nomenclature qui est dans la mise en plan et l’exporte en xlsx.

Bonjour @Jérémy_Guillon ;
Il faudrait être plus précis dans tes demandes…

  • La version de solidworks
  • la version excel
  • le nom de la , ou des, feuilles de mises en plan
  • Le nom et le type de Nomenclatures…
  • l’emplacement de destination (dynamique ou statique?)…

(dans le doute la macro ci-dessous exporte toutes les nomenclatures trouvées dans une mise en plan vers un fichier *.xlsx ( C:\Temp\Nomenclature_MiseEnPlan.xlsx)

Sub ExportNomenclatureMiseEnPlan()
    Dim swApp As Object
    Dim swDraw As Object
    Dim swTable As Object
    Dim swSheet As Object
    Dim swView As Object
    Dim swTableAnnotation As Object
    Dim excelApp As Object
    Dim wb As Object
    Dim ws As Object
    Dim i As Long, j As Long
    Dim rowCount As Long, colCount As Long
    
    ' Initialiser SolidWorks
    Set swApp = GetObject(, "SldWorks.Application")
    Set swDraw = swApp.ActiveDoc
    
    If swDraw Is Nothing Then
        MsgBox "Aucune mise en plan active."
        Exit Sub
    End If
    
    ' Créer une instance Excel
    Set excelApp = CreateObject("Excel.Application")
    excelApp.Visible = True
    Set wb = excelApp.Workbooks.Add
    Set ws = wb.Sheets(1)
    
    ' Localiser la table BOM dans la mise en plan
    ' Supposons qu'il y ait une seule table BOM
    For Each swTableAnnotation In swDraw.GetTableAnnotations
        If swTableAnnotation.Type = 0 Then ' 0 pour BOM
            Set swTable = swTableAnnotation
            Exit For
        End If
    Next
    
    If swTable Is Nothing Then
        MsgBox "Aucune table de nomenclature trouvée."
        Exit Sub
    End If
    
    ' Récupérer le nombre de lignes et colonnes
    rowCount = swTable.RowCount
    colCount = swTable.ColumnCount
    
    ' Parcourir la table et exporter
    For i = 0 To rowCount - 1
        For j = 0 To colCount - 1
            ws.Cells(i + 1, j + 1).Value = swTable.Text(i, j)
        Next j
    Next i
    
    ' Enregistrer le fichier Excel
    Dim savePath As String
    savePath = "C:\Temp\Nomenclature_MiseEnPlan.xlsx"
    wb.SaveAs savePath
    
    ' Nettoyer
    wb.Close
    excelApp.Quit
    MsgBox "Export terminé : " & savePath
End Sub

note personnelle :
Vous n’apprendrez jamais la programmation si vous demandez directement à une IA. Gardez en tête qu’il est 10 fois plus difficile de Lire un code que de l’écrire.

1 « J'aime »

Bonjour Maclane,

C’est vrai que je n’ai pas trop l’habitude d’aller sur des forums.
Nous sommes en SW 2023 SP5.0, pour excel version 16.0.
Normalement la feuille se nomme PLAN et la nomenclature Nomenclature1
Pour l’emplacement et le nom du fichier, je voudrais le même nom que le fichier sw et qu’il soit enregistrer dans le dossier source de la mise en plan.

J’ai testé la macro proposé et j’ai un débogage a ce niveau:

For Each swTableAnnotation In swDraw.GetTableAnnotations

Je sais que c’est la le problème quand j’ai fais des essais.

Je comprends pour l’IA, j’adorerais savoir codé et apprendre mais je suis le seul a vouloir automatiser les tâches au sein des bureaux via Macro SW ou par des formules excel tout simplement. (les autres préfère taper et répété les tâches et faire des erreurs) la personne avec qui j’ai débuté et qui m’a montré le VBA est parti et je suis le seul au BE,… donc j’essaie de faire en autodidacte quand j’ai un peu de temps. Et j’avoue que c’est la facilité dès que l’on bloqué sur une formule ou autre… :wink:

autant pour moi, désolé. :upside_down_face:
la La méthode GetTableAnnotations n’existe pas directement sur les fichiers « *.swdrw » mais uniquement sur les feuilles de MEP (Mises En Plan) (« Sheet »).
Il faut donc d’abord récupérer chaque feuille via GetSheets, puis sur chaque feuille, utiliser GetTableAnnotations pour accéder aux tables
exemple:
https://help.solidworks.com/2022/english/api/sldworksapi/Get_Table_Annotation_and_Contents_Example_VB.htm

Mais je n’ai pas vraiment le temps de créer la macro… ceci dit avec les exemples de @sbadenis et un peu d’entrainement cela ne devrait pas être insurmontable.