Export nomenclature Solidworks par VB

Bonjour à tous!

J'ai une petite macro sur l'API de Solidworks d'exporter la nomenclature d'une mise en plan ouverte sur Excel en .CSV

Ce que je voudrais est que ce fichier Excel ai un nom fixe et qu'a chaque fois que j'execute ma macro, la table de nomenclature exporté de Solidworks viennent s'ecrire juste en dessous de l'autre. Je maitrise pas assez le code qu'on m'a donné, ce qu'il fait actuellement est de créer un seul tableau.. je n'arrive pas à incorporer l'instruction "n'ecrire qu'a partir du moment ou c'est vide", histoire d'avoir mes nomenclatures qui s'enchainent au fur et à mesure que j'execute la macro sur mes differents plans.

Si quelqu'un à une ligne de code qui m'aiderait, je suis preneur!!!

Bonne journée.

 


20158271458773_export_bom.swp
1 « J'aime »

Bonjour,

Par exemple, si dans un fichier CSV, on utilise le point virgule comme séparateur et qu'on veut écrire les lettres A, B et la variable C sur la première ligne et les lettres D, F et la variable F sur la première ligne , il faut écrire :

f = FreeFile
Open "C:\TEST.csv" For Append As #f
Print #f, "A;B;" & C
Print #f, "E;F;" & G

Close #f
 

Avec un exemple concret (issu de l'implémentation des pièces jointes dans notre ERP) :

f = FreeFile

Open "\\dimecox3\PLANBE$\Import_plans.csv" For Append As #f 'ouverture du fichier CSV ou TXT
    'écriture dans le fichier des propriétés
                Print #f, "ITM;2;" & CODE & ";;001;" & docNamePDF & ";" & "PDF"
                Print #f, "ITM;2;" & CODE & ";;002;" & docNameDWG & ";" & "DWG"
Close #f

2 « J'aime »

Outch! j'ai pas l'impression que ce soit la solution à mon soucis, je suis un peux perdu... Avez vous ouvert le code en piece jointe pour en voir le résultat (il faut une mise en plan avec une nomenclature   pour que ça marche).

La macro marche tres bien! mais je souhaite juste que à chaque RUN de la macro, la nomenclature active sous solidworks parte sur le meme fichier csv, mais en dessous de ce qui à pu s'ecrire apparavent. De cette maniere, en parcourant mes plans et executant la macro, j'aurais au final un excel qui globalise toutes mes pièces.

Clairement, je suis mauvais, je débute! je suis dessinateur, et je decouvre la puissance des ces API :)

 

1 « J'aime »

Ma réponse répond bien à ce problème, mais je n'ai pas ouvert le fichier SWP car je n'ai pas SolidWorks sous la main.

Tu peux poster la macro dans un fichier texte ou directement dans une réponse stp ?

1 « J'aime »

Sub ProcessBomFeature(swBomFeat As SldWorks.BomFeature)

    Dim vTableArr As Variant
    Dim 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
    
    'Récupération des tables d'annotation
    vTableArr = swBomFeat.GetTableAnnotations
    
    'Parcours des tables d'annotation
    For Each vTable In vTableArr
    
        'Récupération d'une table
        Set swTable = vTable

 'Récupération des contenus
        Set swAnn = swTable.GetAnnotation
    
        'Nombre de colonne et de ligne
        nNumCol = swTable.ColumnCount
        nNumRow = swTable.RowCount
    
        'Nom et type de table
        Debug.Print "    Table : " & swAnn.GetName & " Type : " & swTable.Type
    
        'Parcours des lignes
        For i = 0 To nNumRow - 1
    
            sRowStr = "      "
    
            'Parcours des colonnes
            For j = 0 To nNumCol - 1
            
                sRowStr = sRowStr & swTable.Text(i, j) & " | "
                
            Next j
            
        ' Affichage du contenu
        Debug.Print Left(sRowStr, Len(sRowStr) - 1)
    
        Next i
        


        'Dossier de sortie
        Dim xlsPath As String
        xlsPath = Mid(swModel.GetPathName, 1, InStrRev(swModel.GetPathName, "\"))
        
        'Nom du XLS
        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
        
        Debug.Print "Sortie : " & xlsPath & xlsName
        
        'Export Excel
        swTable.SaveAsText xlsPath & xlsName, ";"
        
    Next vTable
    
    MsgBox "Export terminé"

End Sub

 

Donc ce morceau marche nikel si je n'avais qu'une nomenclature a exporter. Les ; comme separateur font leur boulot et tout.

Donc c'est bien ce que je pensais : la fonction utilisée SaveAsText ne permet pas d'ajouter des lignes, si le fichier existe déjà il est écrasé :


If a file of the specified name in the specified path...   Exists    

Then it is... Overwritten

Source : http://goo.gl/odfZb9

Il faut obligatoirement passer par la solution proposée dans mon premier message.

 
1 « J'aime »

Un grand merci à toi .PL!!

1 « J'aime »

Avec plaisir. Si tu peux poster ta macro avec le code modifié pour les personnes qui auront le même problème, et dans un fichier texte, c'est encore mieux !

1 « J'aime »