VBA vers Access

Résolu
benoistpanch - 11 sept. 2012 à 09:04
 benoistpanch - 11 sept. 2012 à 16:16
Bonjour,
J'ai besoin de récupérer des propriétés de mes pieces solidworks et de les intégrer dans une table avec des champs existants.
Voici déjà ce que j'ai comme point de départ:

[b]Option Compare Database
Option Explicit

Public Enum swCustomInfoType_e
swCustomInfoUnknown = 0
swCustomInfoText = 30 ' VT_LPSTR
swCustomInfoDate = 64 ' VT_FILETIME
swCustomInfoNumber = 3 ' VT_I4
swCustomInfoYesOrNo = 11 ' VT_BOOL
End Enum

Sub SolidWorksPrp()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim vConfigNameArr As Variant
Dim vConfigName As Variant
Dim vCustInfoNameArr As Variant
Dim vCustInfoName As Variant
Dim bRet As Boolean

Set swApp = GetObject(, "SldWorks.Application")
Set swModel = swApp.ActiveDoc

Debug.Print "File = " & swModel.GetPathName

vConfigNameArr = swModel.GetConfigurationNames

vCustInfoNameArr = swModel.GetCustomInfoNames2(Empty)
If Not IsEmpty(vCustInfoNameArr) Then
For Each vCustInfoName In vCustInfoNameArr
Debug.Print " " & vCustInfoName
Debug.Print " Type = " & swModel.GetCustomInfoType3(Empty, vCustInfoName)
Debug.Print " Value = " & swModel.GetCustomInfoValue(Empty, vCustInfoName)
Debug.Print " Text = " & swModel.CustomInfo2(Empty, vCustInfoName)
Next
End If


'
' ' Is empty if a drawing becasue configurations not supported on drawings
' If IsEmpty(vConfigNameArr) Then
' ReDim vConfigNameArr(0)
' vConfigNameArr(0) = ""
' Else
' ' Add a blank string for the nonconfiguration-specific custom properties
' ReDim Preserve vConfigNameArr(UBound(vConfigNameArr) + 1)
' End If
'
' For Each vConfigName In vConfigNameArr
' Debug.Print " " & vConfigName
'
' vCustInfoNameArr = swModel.GetCustomInfoNames2(vConfigName)
' If Not IsEmpty(vCustInfoNameArr) Then
' For Each vCustInfoName In vCustInfoNameArr
' Debug.Print " " & vCustInfoName
' Debug.Print " Type = " & swModel.GetCustomInfoType3(vConfigName, vCustInfoName)
' Debug.Print " Value = " & swModel.GetCustomInfoValue(vConfigName, vCustInfoName)
' Debug.Print " Text = " & swModel.CustomInfo2(vConfigName, vCustInfoName)
' Next
' End If
' Debug.Print " ---------------------------"
' Next
End Sub/b

Et voici ce que j'obtien après execution du module:( conditions : solidworks ouvert avec une document pièce ouvert)

[b]File = \\SRV\RedirectedFolders\benoist.p\Desktop\001.SLDPRT
PROJET
Type = 30
Value = projet001
Text = projet001
Description Pièce
Type = 30
Value = COULISSE
Text = COULISSE
Matériau
Type = 30
Value = Acier non allié
Text = "SW-Material@001.SLDPRT"
Finition
Type = 30
Value = Zingage
Text = Zingage
Fournisseur
Type = 30
Value = commerce
Text = commerce
Zone de texte15
Type = 30
Value = 0.00
Text = "SW-Mass@001.SLDPRT"
Zone de texte12
Type = 30
Value = 4500075000
Text = 4500075000/b

La question est la suivante:

Par quel moyen et comment dois je faire pour récupérer les valeurs (par exemple "zingage", "acier non allié")
et les insérer dans une table existante sous access 2007(avec pour noms de champs "traitement de surface" et "matière".

Nota:

Par avance merci !!

3 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
11 sept. 2012 à 13:50
Salut

-1- Le VB de ce genre de logiciel est du VBA. Il y a une catégorie dédiée. Modifiée.
-2- Quand tu colles du code, utilise la coloration syntaxique (3ème icone à droite) = plus facile à relire
-3- Quand tu colles du code, n'y met pas le code non valide en placé en commentaire; ça n'apporte rien.

Ta question est-elle :
- comment isoler les données "zingage" ou "acier non allié" ?
Si c'est le cas, tu vois bien que ce champ est issu de
swModel.GetCustomInfoValue(Empty, vCustInfoName)

- comment insérer des données dans une DB ?
As-tu déjà créé ta connexion avec ta DB, ta table ?
As-tu créé une requète d'insertion ?
Voir les objets ADODB

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
11 sept. 2012 à 13:53
Pour les matériaux, c'est bien le champ
swModel.GetCustomInfoValue(Empty, vCustInfoName)
à condition que le champ
swModel.CustomInfo2(Empty, vCustInfoName)
comporte un @

C'est tout ce qu'on peut voir, vu d'ici
3
benoistpanch
11 sept. 2012 à 16:16
0
Rejoignez-nous