Mise à jour Auto Famille Pièce

Bonjour à tous!

 

Dans mon eternel recherche de complexité et afin de facilité l'utilisation d'un outil pour les autres, je tente de faire un petit "module" en VBA afin qu'en un seul fichier de données, les cotes de pièces sur SW changes.

 

Pour cela j'ai commencer bien évidement par faire des tests sur une seule pièces.

 

J'ai créer une table de famille de pièce et y ai donc parametrer les cotes voulues en créant deux lignes: "origine" et "modifiables"

 

J'ai donc créer mon fichier de données, avec les cotes d'origines des pièces (Au cas où a force de les changer elles soient oubliées!)

 

Sur celui ci, j'ai créer également un bouton, avec la commande VBA suivante dedans:

 

[code]Sub Changement_cote()

    Workbooks.Open ("Classeur-Test.xlsm") 'ouverture fichier TEST
        'Modification
        Workbooks("Classeur-Test.xlsm").Worksheets("Feuil1").Range("B4").Value = "='[Base-données.xlsm]Feuil1'!$B$4"

        Workbooks("Classeur-Test.xlsm").Worksheets("Feuil1").Range("C4").Value = "='[Base-données.xlsm]Feuil1'!$C$4"

    Workbooks("Classeur-Test.xlsm").Close  'Fermeture Fichier Test

 

 

    Workbooks.Open ("00-XXXXX-0-Came.xlsx") 'Famille pièce

        'Modification
        Workbooks("00-XXXXX-0-Came.xlsx").Worksheets("Feuil1").Range("B4").Value = "='[Base-données.xlsm]Feuil1'!$B$4"

        Workbooks("00-XXXXX-0-Came.xlsx").Worksheets("Feuil1").Range("C4").Value = "='[Base-données.xlsm]Feuil1'!$C$4"

    Workbooks("00-XXXXX-0-Came.xlsx").Close  'Fermeture Fichier Test

 

End Sub[/code]

 

Pour l'instant je n'ai pas ajouter la sauvegarde auto' des fichiers, mais ils me le demandent, et je vois également le changement sur les fichier n'ayant pas utiliser les "updatescreen=false" =)

 

Mon soucis arrive donc par la suite. Je réouvre solidworks après avoir fait ma modification, et la famille de pièce ne se met hélas pas à jour, malgré le fait que son fichier lui est à jour. Je suis obligé de passer par "éditer famille de pièce" pour que ça se mette à jour

 

(lors de cette manip' je fait seulement "editer famille" et je quittes, solidworks semble aller chercher le fichier)

 

Y aurait-il une commande VBA permettant cette mise à jour de ce faire automatiquement?

Car là ce n'est qu'une pièce, ce n'est pas gênant. Mais pour un assemblage complexe et contenant rien qu'un 20ene de pièces, ça risque de devenir long ^^'

 

Désolé pour le pavé et le dérangement,

En esperant trouver une solution ^^"

 

Amicalement,

 

Yoann

 


base_donnee.jpg

Bonjour,

 

Voilà une macro trouvée sur le forum SolidWorks :

 

https://forum.solidworks.com/thread/9335

 

Ou voir l'instruction de l'aide SolidWorks :

http://help.solidworks.com/2012/English/api/sldworksapi/Get_or_Set_Whether_Edits_Update_Design_Table_Example_VB.htm

Bonjour @Lucas

 

mmmh... les fonctions telles que "Dim swApp As SldWorks.SldWorks" ne se mettent pas dans le module vba de excel?

 

il me marque une erreur lorsque je tente d'executer la macro:

"Erreur de compilation   Type défini par l'utilisateur non défini"

 

Outre le fait que je comprenne qu'il me dit que ce que j'ai défini...n'est pas défini.... (elle donne mal au crâne cette phrase *choqué*)

 

je ne comprends pas trop =/

 

amicalement,

Ah mais tu crées la famille de pièce depuis Excel ?

 

Comment l'implémentes-tu ensuite pour qu'elle apparaisse dans SolidWorks ?

Elle s'est créée elle même en fichier .xlsx en fait ^^'  quand je l'ai enregistrée

 

Du coup je pensais faire toutes les manip' depuis mon fichier base de données, afin de simplifier l'utilisation future par d'autres personnes.

Lorsque je crée une famille de pièce, je n'ai pas accès au fichier Excel ! Tu le trouves où ?

Je n'y ai eu accès qu'en faisant "enregistrer" la famille ^^

 

à vrai dire je ne l'ouvre pas via excel ce dernier. j'en avais seulement besoin pour acceder à son adresse "C:\...\came.xlsx" afin de mettre le lien dans mon code vba

OK, de toute façon, tu ne pourras pas mettre à jour la famille de pièce dans SolidWorks depuis Excel : c'est une macro SolidWorks que je te proposais !

Et c'est sûr que ça a beaucoup moins d'intérêt : pour la mettre à jour, au lieu d'ouvrir la famille de pièce, tu dois lancer une macro c'est à peu près la même chose.

 

Sinon lancer la macro automatiquement à chaque démarrage de pièce sera vraiment fastidieux et va ralentir SW à l'ouverture de fichier...

http://www.leguide3d.com/profiles/blogs/piloter-un-modele-3d-au-travers-d-excel

 

j'ai trouver ceci, je vais tester, mais ça m'à l'air d'être une solution =). Je vous tiens au courant!

1 « J'aime »

Désolé un peu fatigué, oui tu peux en fait créer une macro SolidWorks depuis Excel comme c'est écrit dans ton lien.

 

si la pièce est ouverte dans SolidWorks, en utilisant les instructions de l'image :

 

http://api.ning.com/files/s2sZbafeBpX-mX9KHHPZMOqmYpSGIu93UHOfWU*M6CnBzflIcn0D5aoMp7YX937HiJ5u00KItfo8KQVFyrpA0TVLVgq-rvlW/Code1.PNG

 

Tu dois pouvoir lancer la macro que j'ai proposé plus haut.

Pas de soucis Lucas ^^ Fin de semaine, je penses que tout le monde est un peu fatigué ^^

 

J'ai en effet tenter cela, et ça ne me detecte aucun problème =)

 

sauf par la suite, quand j'essaye d'integrer la macro solidworks que tu m'a donné plus haut ^^'

 

Dim swDoc As SldWorks.ModelDoc2

 

n'est pas reconnu =/

 

 

N'arrivant pas à utiliser les macros solidworks sous excel, je me suis mis à chercher de quelle manière je pourrais lancer la macro solidworks depuis excel.

 

J'ai donc procéder ainsi

 

Set swApp = CreateObject("SldWorks.Application")
Set Part = swApp.ActiveDoc
Dim boolstatus As Boolean

Dim filename As String
filename = swApp.GetCurrentMacroPathName
filename = Left(filename, InStrRev(filename, "\")) + "Macro1.swp"
boolstatus = swApp.RunMacro(filename, "Macro11", "alternate")
boolstatus = swApp.RunMacro(filename, "Macro11", "main")

 

Et à présent mon bouton "actualisation" cote fait également la mise a jour des familles de pièces sur solidworks en lançant la macro que @Lucas m'a donné =)

 

(https://forum.solidworks.com/thread/9335)

 

Manque plus qu'à trouver comment enlever la visu des pages avec une commande type "screenupdate.false" version solidworks.

 

Mais ce n'est pas vraiment gênant =)

 

Merci pour ton aide Lucas encore une fois ^^