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?
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.
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…
autant pour moi, désolé.
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.