VBA vers Access [Résolu]

- - Dernière réponse : cs_Jack
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
- 11 sept. 2012 à 13:53
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 !!
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
3
Merci
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)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de cs_Jack
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de cs_Jack
Commenter la réponse de benoistpanch

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.