[RESULO] Lien Excel et SW21012 sur VBA

vos questions concernant les API SolidWorks

[RESULO] Lien Excel et SW21012 sur VBA

Messagepar fneves » Lun 23 Avr 2012, 12:49

Bonjour à tous,

J'ai créé une pièce et un fichier excel (voir photo ci dessous)

Puis, j'ai essayé de comprendre la base du langage API grâce à un petit Tuto de "Annwn", mais apparament je suis une vrai truffe :cry: .

Je voudrais simplement que mon fichier excel que j'ai inséré dans ma pièce modifie 2 cotes de cette pièce.

Il y a le petit progrmme de "Annwn" qui fonctionne bien sur SW qui est en bleu et en retrait pour souvenir et le mien biensûr qui fonctionne pas.
Voici le programme:

Option Explicit
Sub main()
'Pour info
'String (chaine de caractère)
'Integer (un nombre entier)
'Boolean (vrai ou faux)
'Variant (sorte de tableau à 1 colonne)


Dim swApp As SldWorks.SldWorks
Dim swmodel As SldWorks.ModelDoc2
'Dim range As Variant

'Exemple pour prendre nom d'un fichier sans son extension
'Dim montexte As String, Interm As String, monTab As Variant


Set swApp = Application.SldWorks
Set swmodel = swApp.ActiveDoc

'Exemple pour prendre nom d'un fichier sans son extension
'monTab = Split(swmodel.GetPathName, "\", -1)
'Interm = monTab(UBound(monTab))
'montexte = Mid(Interm, 1, Len(Interm) - 7)
'montexte = "Bonjour, le document actif est :" & vbCr & montexte
'MsgBox montexte


Part.Parameter("D2@Esquisse3D2").SytemValue = range("B13").Value / 1000
Part.ClearSelection
Part.ForceRebuild

End Sub

Merci de votre aide.[/img][/code]
Dernière édition par fneves le Ven 04 Mai 2012, 9:27, édité 1 fois.
Avatar de l’utilisateur
fneves
Chevalier Jedi SolidWorks
 
Messages: 220
Inscription: Jeu 12 Mai 2011, 9:16
Localisation: Boissy l'aillerie (95) - SW 2012 SP2

Messagepar Annwn » Mar 24 Avr 2012, 11:13

Tu n'as pas ouvert Excel (par la macro !)
Set ExcelApp = CreateObject("Excel.Application")
Set myWB = ExcelApp.Workbooks.Open("L:\Solid Works\Tralala.xls")


et ajoute les biblios (outils / références) d'office et excel !
Programmer, c'est bien; programmer utile, c'est mieux........
Venez faire un tour ici !
Annwn
Site Admin
 
Messages: 4938
Inscription: Lun 18 Déc 2006, 22:35

Messagepar fneves » Mar 24 Avr 2012, 13:44

Merci, je vais essayer de suite :lol:
Avatar de l’utilisateur
fneves
Chevalier Jedi SolidWorks
 
Messages: 220
Inscription: Jeu 12 Mai 2011, 9:16
Localisation: Boissy l'aillerie (95) - SW 2012 SP2

Messagepar fneves » Mar 24 Avr 2012, 15:32

Me Re-voilà, pas de bonne nouvelle :cry:

J'ai fouillé un peu partout, et j'ai pu constater une erreur, tout d'abord mon fichier Excel n'était pas enregistrer comme fichier excel pouvant traité les macros (soit en xlsm).

Voici le nouveau code:
Sub rafraichir2()
'Pour info
'String (chaine de caractère)
'Integer (un nombre entier)
'Boolean (vrai ou faux)
'Variant (sorte de tableau à 1 colonne)

Dim swApp As SldWorks.SldWorks
Dim Part As SldWorks.ModelDoc2
'Dim swDimension As SldWorks.Dimension
'Dim exSheet As ThisWorkbook
'Dim dbValue As Double


'Exemple pour prendre nom d'un fichier sans son extension
'Dim montexte As String, Interm As String, monTab As Variant


'Set swApp = Application.SldWorks
Set swApp = CreateObject("SldWorks.Application")
Set Part = swApp.ActiveDoc
Set ExcelApp = CreateObject("Excel.Application")
Set myWB = ExcelApp.Workbooks.Open("C:\DULINOX\Documents\Modèle Excel\Calcul bacs gastro pour étagère.xlsx")

'Exemple pour prendre nom d'un fichier sans son extension
'monTab = Split(swmodel.GetPathName, "\", -1)
'Interm = monTab(UBound(monTab))
'montexte = Mid(Interm, 1, Len(Interm) - 7)
'montexte = "Bonjour, le document actif est :" & vbCr & montexte
'MsgBox montexte



Part.Parameter("D2@Esquisse3D2").SytemValue = Range("B13").Value / 1000
Part.ClearSelection
Part.ForceRebuild

'dbValue = Val(exSheet.Cells(13, 2))
'Set swDimension = swmodel.Parameter("D2@Esquisse3D2")
'swDimension.Value = dbValue
'swmodel.EditRebuild3


End Sub

Je crois que je m'embrouille grave dans mes débuts de programmation, j'ai intégré les 2 lignes de Annwn, mais maintenant il me dit:
Erreur 438: Propriété ou méthode non géré par cet objet (ligne en bleue)

Au secours...je sais qu'il faut me comprendre que de copier bêtement mais là je craque.

Dire que c'est une macro des plus simples, simplement changer une cote d'une pièce SW via Excel, je cache pas que je suis décourager d'aller plus loin.
Avatar de l’utilisateur
fneves
Chevalier Jedi SolidWorks
 
Messages: 220
Inscription: Jeu 12 Mai 2011, 9:16
Localisation: Boissy l'aillerie (95) - SW 2012 SP2

Messagepar fred_ecai » Mar 24 Avr 2012, 16:47

salut.

déja est ce que esquisse3D2 existe? ensuite le nom de la cote ?
ensuite en faisant comme ça il me semble que tu n'est plus dans Solid mais dans excel.

Perso comme je suis pas au top, je créer des "String" , j'ouvre mon excel, je rempli les valeurs "String" j'ouvre ou j'active Solid, et la je renseigne mes cotes avec les strings. je sais pas si c'est clair pour toi ? :oops:
Avatar de l’utilisateur
fred_ecai
Membres du Conseil SolidWorks
 
Messages: 1450
Inscription: Mar 22 Déc 2009, 9:09
Localisation: loire (42), Slw 2012 SP1.0 XP 64bit (in english please)

Messagepar fneves » Mer 25 Avr 2012, 13:38

Désolé du retard, boulot, boulot...

La cote d2@esquisse3D2 existe bien et pour le nom complet c'est "D2@esquisse3D2@Chassis étagère bacs gastro-AF000000" il me semble car je n'arrive pas à la lire complètement.

Oui, j'ai crée un fichier Excel que j'ai insérer dans mon fichier pièce SW.

Pour l'histoire des "string", j'ai rien compris, désolé :cry:

A+
Avatar de l’utilisateur
fneves
Chevalier Jedi SolidWorks
 
Messages: 220
Inscription: Jeu 12 Mai 2011, 9:16
Localisation: Boissy l'aillerie (95) - SW 2012 SP2

Messagepar liryc » Mer 25 Avr 2012, 15:14

Bonjour,
L'erreur est dû au fait que tu essayes de mixer du code pour excel avec du SW.
Ecrit le comme ça:
Code: Tout sélectionner
Part.Parameter("D2@Esquisse3D2").SytemValue = myWB.Range("B13").Value / 1000

Si je ne me plante pas ça devrait fonctionner.
liryc
Chevalier Jedi SolidWorks
 
Messages: 479
Inscription: Ven 02 Mar 2007, 8:14
Localisation: Paris - SW2009 SP5.0

Messagepar fneves » Ven 27 Avr 2012, 7:31

Désolé Liryc ça ne marche pas, toujours la même erreur à la même ligne.

Je voulais savoir lorsque l'on tape par exemple "Part.Parameter("D2@Esquisse3D2").SystemValue", après un point et une lettre généralement on me donne plusieurs choix possible sur une liste :?:

Et pour systemvalue et range je dois l'écrire manuellement, je me demande si j'ai bien pris toutes les bonnes références dans les options développeur d'excel 2012 :?:

Merci d'aider un novice :wink:

Sinon vous n'auriez pas quelques petites adresses sympathiques de language entre Excel 2012 et SW2012 :roll: car j'ai beau chercher je ne trouve rien, mais je suis assez têtu.
Avatar de l’utilisateur
fneves
Chevalier Jedi SolidWorks
 
Messages: 220
Inscription: Jeu 12 Mai 2011, 9:16
Localisation: Boissy l'aillerie (95) - SW 2012 SP2

Messagepar fred_ecai » Ven 27 Avr 2012, 7:35

salut,

en fait tu veux piloter l'excel de la famille de pièce?
Avatar de l’utilisateur
fred_ecai
Membres du Conseil SolidWorks
 
Messages: 1450
Inscription: Mar 22 Déc 2009, 9:09
Localisation: loire (42), Slw 2012 SP1.0 XP 64bit (in english please)

Messagepar liryc » Ven 27 Avr 2012, 11:34

fneves a écrit:Désolé Liryc ça ne marche pas, toujours la même erreur à la même ligne.

Je voulais savoir lorsque l'on tape par exemple "Part.Parameter("D2@Esquisse3D2").SystemValue", après un point et une lettre généralement on me donne plusieurs choix possible sur une liste :?:

Et pour systemvalue et range je dois l'écrire manuellement, je me demande si j'ai bien pris toutes les bonnes références dans les options développeur d'excel 2012 :?:

Merci d'aider un novice :wink:

Sinon vous n'auriez pas quelques petites adresses sympathiques de language entre Excel 2012 et SW2012 :roll: car j'ai beau chercher je ne trouve rien, mais je suis assez têtu.

Pour ta ligne de modification de valeur de solidworks c'est bon.
C'est le lien vers Excel qui merdouille.
En recherchant rapidement il faut que tu déclares la feuille dans laquelle tu travailles.
Regarde ces liens pour t'aider:
http://drq.developpez.com/vb/tutoriels/Excel/Chapitre3/
http://vb.developpez.com/faq/?page=excel#modifclasseur

Je pense que ça devrait de te donner la solution.
Je te conseil aussi pour tester de passer par un test sur la fonction excel afin de voir si la ligne te retourne quelquechose ou non.
Code: Tout sélectionner
Debug.print xxx.Range("B13").Value / 1000
liryc
Chevalier Jedi SolidWorks
 
Messages: 479
Inscription: Ven 02 Mar 2007, 8:14
Localisation: Paris - SW2009 SP5.0

Messagepar Annwn » Ven 27 Avr 2012, 11:39

ça y est j'ai un code qui marche !

Code: Tout sélectionner
Sub rafraichir2()

Dim swApp As SldWorks.SldWorks, Part As SldWorks.ModelDoc2
Dim dbValue As Double, myDim As Dimension

Set ExcelApp = CreateObject("Excel.Application")
Set myWB = ExcelApp.Workbooks.Open("C:\Documents and Settings\users-cao\Bureau\Classeur1.xls")
Set xlsh = myWB.ActiveSheet

dbValue = xlsh.Cells(1, 1).Value

Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
Set myDim = Part.Parameter("D1@Boss.-Extru.1")
myDim.SystemValue = dbValue / 1000

Part.ClearSelection
Part.ForceRebuild

End Sub


Donc Cells(1,1) correspond à la cellule A1 (colonne 1-->A, et ligne 1)
mets ton chemin de fichier xls, le nom de ta cote entre guillemets et roule ...

et pense à mettre les bonnes références !Image
Programmer, c'est bien; programmer utile, c'est mieux........
Venez faire un tour ici !
Annwn
Site Admin
 
Messages: 4938
Inscription: Lun 18 Déc 2006, 22:35

Messagepar fneves » Mer 02 Mai 2012, 9:43

Bonjour à tous,

Annwn, j'ai exactement copier/coller ton programme et les références (en 2012 pour SW), mais il y a une erreur à la ligne:
"Set swApp = Application.SldWorks"
Par contre, il va bien chercher la valeur dans mon fichier excel qui doit commander mon fichier SW.

Merci Liryc je vais fouiller un peu tout ça :wink:

Exactement Fred-ecai, j'ai crée un fichier excel que j'ai inséré dans un fichier pièce SW. Ensuite lorsque j'ouvre ce fichier piece SW, je clique sur mon tableau excel inséré et à partir de la il m'ouvre le fichier excel que je modifie et enfin je veux cliquer sur un bouton nommer "Rafraichir" pour qu'il mette à jour des cotes sur mon fichier pièce SW.

Au plaisir de vous relire :wink:
Avatar de l’utilisateur
fneves
Chevalier Jedi SolidWorks
 
Messages: 220
Inscription: Jeu 12 Mai 2011, 9:16
Localisation: Boissy l'aillerie (95) - SW 2012 SP2

Messagepar Annwn » Mer 02 Mai 2012, 11:22

C'est quoi le texte du message d'erreur ?

Tu as bien toutes tes références OK et pas MANQUANTES ?
Programmer, c'est bien; programmer utile, c'est mieux........
Venez faire un tour ici !
Annwn
Site Admin
 
Messages: 4938
Inscription: Lun 18 Déc 2006, 22:35

Messagepar liryc » Mer 02 Mai 2012, 11:45

Annwn a écrit:C'est quoi le texte du message d'erreur ?

Tu as bien toutes tes références OK et pas MANQUANTES ?


Sous 2009 j'ai le même problème lorsque l'on déclare swApp as SldWorks.SldWorks.
@fneves: change swApp as SldWorks.SldWorks par swApp as Object en général ça résoud le problème.
liryc
Chevalier Jedi SolidWorks
 
Messages: 479
Inscription: Ven 02 Mar 2007, 8:14
Localisation: Paris - SW2009 SP5.0

Messagepar fneves » Mer 02 Mai 2012, 15:36

Marche pas avec changement sldworks.sldworks par Objet :cry:

Voici mon message d'erreur et mes références en photo:

A+, merci encore.
Avatar de l’utilisateur
fneves
Chevalier Jedi SolidWorks
 
Messages: 220
Inscription: Jeu 12 Mai 2011, 9:16
Localisation: Boissy l'aillerie (95) - SW 2012 SP2

Suivante

Retourner vers Questions générales sur les API

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Bing [Bot] et 5 invités

banniere