Bonjour,
Depuis pas mal de temps, j'ai un problème avec l'export en .cvs de mes nomenclatures. Je m'explique : il semble que, de base, Solidworks utilise les virgules comme séparateurs, et j'aimerais plutôt avoir des point-virgules. Du coup je suis obligé d'enregister en .xls, puis avec excel, d'enregistrer en .csv (excel utilise les bons séparateurs), ce qui me rajoute une étape fastidieuse à chaque export.
Auriez-vous une solution ? Je ne suis pas au point avec les macros, pensez-vous qu'il me faille passer par ce biais ?
Je n'ai pas trouvé de solution après une recherche.
Merci !
Bonjour
A part le traiter avec le bloc note windows et la fonction remplacer.
Regarde tout de même ceci https://www.lynkoa.com/forum/3d/export-nomenclature-solidworks-par-vb
jerome
2 « J'aime »
Je ne sais pas s'ils sont liés mais n'hésite pas à faire le test en changeant le séparateur de liste dans les options régionales ...
Des fois c'est plus rapide =)
Bonjour à vous deux,
Malheureusement la solution de Macros227 ne fonctionne pas :(
Quant aux macros, je ne les maitrise pas du tout.. J'imagine que ce n'est pas du tout compliqué d'exporter une table avec comme séparateurs des point-virgules, ou je risque d'y passer du temps ?
Bonjour,
Cela ne devrait te prendre guère plus de 5 minutes, tu prends la macro qui est dans la question du lien donné par Todesco et dans celle-ci tu remplace la ligne :
sRowStr = sRowStr & swTable.Text(i, j) & " | "
par celle-ci :
sRowStr = sRowStr & swTable.Text(i, j) & ";"
et comme ça tu dois obtenir un fichier csv avec un ; comme séparateur. Celui-ci est stocké dans le même dossier que ton plan.
Cordialement,
3 « J'aime »
Merci beaucoup, en effet ça fonctionne !
Cependant, est-ce qu'il y aurait moyen de n'exporter que la nomenclature "active" ? J'ai parfois plusieurs nomenclatures par page, et j'aimerais pouvoir choisir laquelle d'entre elles est exportée. Avec cette, macro, c'est la dernière nomenclature trouvée qui est enregistrée si je comprends bien.
Merci d'avance
Bonjour,
La macro en question permet de sélectionner toutes les BOM du plan et de les écrire dans le fichier csv (sous réserve de faire la modification expliquée par .PL dans la discussion d'origine pour éviter que chaque export de BOM n'écrase l'export de la BOM précédente).
Si tu veux n'extraire qu'une BOM que tu as sélectionnée dans l'arbre, cela doit pouvoir se faire en remplaçant les lignes :
Set swFeat = swModel.FirstFeature
Do While Not swFeat Is Nothing
If "BomFeat" = swFeat.GetTypeName Then
Set swBomFeat = swFeat.GetSpecificFeature2
ProcessBomFeature swBomFeat
End If
Set swFeat = swFeat.GetNextFeature
Loop
vTableArr = swBomFeat.GetTableAnnotations
Par l'utilisation de la fonction "GetSelectedObject6" que tu trouveras ICI. Ne pas oublier de faire appel à la fonction "ProcessBomFeature" après la fonction de sélection.
Cordialement,
Merci pour la réponse.
Je ne maitrise pas la syntaxe, mais ceci ne fonctionne pas :
set swFeat = GetSelectedObject6
Set swBomFeat = swFeat.GetSpecificFeature2
ProcessBomFeature swBomFeat
Bonjour,
Tu remplace les lignes :
Set swFeat = swModel.FirstFeature
Do While Not swFeat Is Nothing
If "BomFeat" = swFeat.GetTypeName Then
Set swBomFeat = swFeat.GetSpecificFeature2
ProcessBomFeature swBomFeat
End If
Set swFeat = swFeat.GetNextFeature
Loop
vTableArr = swBomFeat.GetTableAnnotations
Par :
Set SelMgr = swModel.SelectionManager
Set swBomFeat = SelMgr.GetSelectedObject6(1, 0)
ProcessBomFeature swBomFeat
Cordialement,
Merci beaucoup !
Ca fonctionne effectivement. Mon erreur était de penser que la nomenclature était celle sélectionnée dans l'interface centrale, et non pas dans l'arbre sur la gauche de l'écran.
Y a-t-il une fonction permettant d'exporter la nomenclature "active", au sens, sélectionnée dans l'interface centrale ?
Oui c'est possible mais en modifiant aussi la fonction d'export de la BOM car du coup ce n'est plus un élément de type "BomFeature" qui est transmis :
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Sub main()
Dim swFeat As SldWorks.Feature
Dim swBomFeat As SldWorks.BomFeature
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set selmgr = swModel.SelectionManager
Set vTable = selmgr.GetSelectedObject6(1, -1)
ProcessBomSelect vTable
MsgBox "Export de la BOM terminé."
End Sub
Sub ProcessBomSelect(vTable As Variant)
Dim swTable As SldWorks.TableAnnotation
Dim swAnn As SldWorks.Annotation
Dim nNumCol As Long
Dim nNumRow As Long
Dim sRowStr As String
Dim I As Long
Dim J As Long
Set swTable = vTable
Set swAnn = swTable.GetAnnotation
nNumCol = swTable.ColumnCount
nNumRow = swTable.RowCount
Dim xlsPath As String
xlsPath = Mid(swModel.GetPathName, 1, InStrRev(swModel.GetPathName, "\"))
Dim xlsName As String
If InStrRev(swModel.GetTitle, ".") > 0 Then
xlsName = Mid(swModel.GetTitle, 1, InStrRev(swModel.GetTitle, ".") - 1) & ".csv"
Else
xlsName = swModel.GetTitle & ".csv"
End If
For I = 0 To nNumRow - 1
sRowStr = ""
For J = 0 To nNumCol - 1
sRowStr = sRowStr & swTable.Text(I, J) & ";"
Next J
Next I
swTable.SaveAsText xlsPath & xlsName, ";"
End Sub
Cordialement,
C'est vraiment excellent et exactement ce que je souhaitais, je te remercie pour ta précieuse aide !