Export CSV solidworks

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 !