Aide pour insertion de ligne dans une macro

vos questions concernant les API SolidWorks

Aide pour insertion de ligne dans une macro

Messagepar benarkor » Mar 06 Déc 2011, 18:10

Bonjour :)

J'essaye difficilement d'intégrer une fonction dans une macro trouver sur le forum pour que cette fonction s'applique à tout les fichiers dans le dossier sélectionner.

La première macro trouver ici qui a pour but de rajouter les fonctions personnalisées de matériau et de masse à chaque fichiers dans le dossier sélectionner.:

http://www.logiciel-cao.com/forum/viewtopic.php?t=6658&postdays=0&postorder=asc&start=30

et je souhaiterais ajouter la fonction pour que les unités par défaut soit le Kg pour chaque fichiers dans le dossier.

J'ai trouver ceci :

Comment par macro Forcer l'unité masse d'un fichier en KG (si celui-ci est en gr sur d'anciens fichier ou fichier d'autre personne).

avec ça Wink :
Code:
Option Explicit
Sub main()

Dim swApp As SldWorks.SldWorks, swModel As SldWorks.ModelDoc2, bRet As Boolean

Set swApp = Application.SldWorks: Set swModel = swApp.ActiveDoc
bRet = swModel.SetUserPreferenceIntegerValue(swUnitSystem, swUnitSystem_Custom)
bRet = swModel.SetUserPreferenceIntegerValue(swUnitsMassPropMass, swUnitsMassPropMass_Kilograms)

End Sub


Cette macro fonctionne super mais doit être appliquer pièce ouverte.

Comment mixer les deux et faire que pour chaque dossier sélectionné, toutes les pièces ont leur propriétés de masse, de matériau et que les Kg soit par défaut l'unité voulu.

Merci d'avance :D
benarkor
Ewok SolidWorks
 
Messages: 12
Inscription: Mar 06 Déc 2011, 14:24

Messagepar fred_ecai » Mer 07 Déc 2011, 8:35

j'ai fait un truc pour ça je te met le code dans un moment.

@+ :wink:
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 fred_ecai » Mer 07 Déc 2011, 8:43

et voilà (à adapter)

Code: Tout sélectionner
Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()

Set swApp = _
Application.SldWorks

Set Part = swApp.ActiveDoc
boolstatus = Part.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsMassPropMass, 0, swUnitsMassPropMass_e.swUnitsMassPropMass_Kilograms)
Part.EditRebuild
Part.Save

End Sub


@+
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 benarkor » Mer 07 Déc 2011, 9:23

Merci fred, quelle partie doit-je ajouter au précédent programme et ou?

je peut poster l'autre programme si tu veut :wink:
benarkor
Ewok SolidWorks
 
Messages: 12
Inscription: Mar 06 Déc 2011, 14:24

Messagepar fred_ecai » Mer 07 Déc 2011, 9:36

ou la j'ai lu trop vite (enfin j'ai lu le post dans question générale) ....
moi aussi c'est sur pièce ouverte.... pour créer tes propriétés tu n'ouvres pas la pièce :?:


par contre un conseil refait tes fichier modèles pour passer en Kg si c'est ce que tu veux. :wink:
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 benarkor » Mer 07 Déc 2011, 9:59

Pas grave, ça arrive à tout le monde lire trop vite ;)

Non, en fait je cherchais un macro me permettant de crée les propriétés personnalisée de masse et matériau sans aucune manip sauf lancer la fameuse macro du 1er lien du 1er post qui marche super !

Pourquoi en fait? car j'y est penser à refaire un modèles mais j'ai une bibliothèque de 80Go de pièces qui n'ont pas ces propriétés... j'en est pour des mois à ouvrir ses pièces une à une^^.

la première macro fonctionne impeccable, tu la lance, tu sélectionne le dossier et elle fait tout toute seule :P
j'aimerai lui rajouter la fonction de basculer les grammes en kilogrammes en plus d'ajouter à chaque pièces les propriétés personnalisées de masse et de matériau :)

je post le code de la première macro :

j'ai ça

Code: Tout sélectionner
Option Explicit
Public MonDoss As String

Sub main()

Dim swApp As SldWorks.SldWorks, swModel As SldWorks.ModelDoc2, myBool As Boolean
Dim MonDoss As String, theFolder As String, FichieR As String, ChemiN As String
Dim myError As Long, myWarnings As Long, myFileName As String, ValProp As String

On Error Resume Next

Set swApp = Application.SldWorks
MonDoss = GetFolder("Choisir un répertoire à traiter...")
If MonDoss = "" Then Set swApp = Nothing: Exit Sub
theFolder = MonDoss & "\": FichieR = Dir(theFolder & "*.SLDPRT")
Do While FichieR <> ""
    ChemiN = theFolder & FichieR
    Set swModel = swApp.OpenDoc6(ChemiN, 1, 1, "", myError, myWarnings)
    myBool = swModel.DeleteCustomInfo2("", "Weight")
    ValProp = """SW-Mass@" & FichieR & """"
    myBool = swModel.AddCustomInfo3("", "Weight", 30, ValProp)
    myBool = swModel.DeleteCustomInfo2("", "MATERIAU")
    ValProp = """SW-Material@" & FichieR & """"
    myBool = swModel.AddCustomInfo3("", "MATERIAU", 30, ValProp)
    myBool = swModel.Save3(0, myError, myWarnings)
    swApp.CloseDoc ChemiN
    FichieR = Dir
Loop
Set swModel = Nothing: Set swApp = Nothing
End Sub


et ça :

Code: Tout sélectionner
Option Explicit

Public Type BROWSEINFO
    hOwner As Long
    pidlRoot As Long
    pszDisplayName As String
    lpszTitle As String
    ulFlags As Long
    lpfn As Long
    lParam As Long
    iImage As Long
End Type

Public Const BIF_RETURNONLYFSDIRS = &H1
Public Const BIF_DONTGOBELOWDOMAIN = &H2
Public Const BIF_STATUSTEXT = &H4
Public Const BIF_RETURNFSANCESTORS = &H8
Public Const BIF_BROWSEFORCOMPUTER = &H1000
Public Const BIF_BROWSEFORPRINTER = &H2000
Public Const BIF_NEWDIALOGSTYLE = &H40
Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long

Public Function GetFolder(ByVal sTitle As String) As String

    Dim bInf As BROWSEINFO
    Dim retval As Long
    Dim PathID As Long
    Dim RetPath As String
    Dim Offset As Integer
   
    bInf.lpszTitle = sTitle
    bInf.ulFlags = BIF_NEWDIALOGSTYLE
    PathID = SHBrowseForFolder(bInf)
    RetPath = Space$(512)
   
    retval = SHGetPathFromIDList(ByVal PathID, ByVal RetPath)
   
    If retval Then
       
        Offset = InStr(RetPath, Chr$(0))
        GetFolder = Left$(RetPath, Offset - 1)
   
    End If

End Function




Pour reposer ma question simplement, que dois-je ajouter et où à cette macro pour que en plus de créer pour chaque pièces dans le dossier les propriétés personnalisés de masse et de matériau, de basculer les grammes en kilogrammes par défaut?
Dernière édition par benarkor le Mer 07 Déc 2011, 11:11, édité 1 fois.
benarkor
Ewok SolidWorks
 
Messages: 12
Inscription: Mar 06 Déc 2011, 14:24

Messagepar fred_ecai » Mer 07 Déc 2011, 10:58

alors...
Code: Tout sélectionner
Option Explicit
Public MonDoss As String

Sub main()

Dim swApp As SldWorks.SldWorks, swModel As SldWorks.ModelDoc2, myBool As Boolean
Dim MonDoss As String, theFolder As String, FichieR As String, ChemiN As String
Dim myError As Long, myWarnings As Long, myFileName As String, ValProp As String
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

On Error Resume Next

Set swApp = Application.SldWorks
MonDoss = GetFolder("Choisir un répertoire à traiter...")
If MonDoss = "" Then Set swApp = Nothing: Exit Sub
theFolder = MonDoss & "\": FichieR = Dir(theFolder & "*.SLDPRT")
Do While FichieR <> ""
    ChemiN = theFolder & FichieR
    Set swModel = swApp.OpenDoc6(ChemiN, 1, 1, "", myError, myWarnings)
Set swApp = _
Application.SldWorks

Set Part = swApp.ActiveDoc
boolstatus = Part.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsMassPropMass, 0, swUnitsMassPropMass_e.swUnitsMassPropMass_Kilograms)
Part.EditRebuild

    myBool = swModel.DeleteCustomInfo2("", "Weight")
    ValProp = """SW-Mass@" & FichieR & """"
    myBool = swModel.AddCustomInfo3("", "Weight", 30, ValProp)
    myBool = swModel.DeleteCustomInfo2("", "MATERIAU")
    ValProp = """SW-Material@" & FichieR & """"
    myBool = swModel.AddCustomInfo3("", "MATERIAU", 30, ValProp)
    myBool = swModel.Save3(0, myError, myWarnings)
    swApp.CloseDoc ChemiN
    FichieR = Dir
Loop
Set swModel = Nothing: Set swApp = Nothing
End Sub

essaye un truc du genre ça....
@+
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 benarkor » Mer 07 Déc 2011, 11:12

J'ai édité le message d'avant car j'avais copier deux fois la même chose...

J'essaye ça dans foulée :)

Edit : j'ai remplacer ton programme par celui précédent (le 1er bout dans le message précendent, et il me dit erreur de compilation, variable non définie :roll:
benarkor
Ewok SolidWorks
 
Messages: 12
Inscription: Mar 06 Déc 2011, 14:24

Messagepar Annwn » Mer 07 Déc 2011, 13:06

Et si tu débugues, il te pointe sur quelle variable (surlignée en jaune) ?
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 benarkor » Jeu 08 Déc 2011, 9:34

Il me surligne la ligne "Sub main()" :roll:
benarkor
Ewok SolidWorks
 
Messages: 12
Inscription: Mar 06 Déc 2011, 14:24

Messagepar fred_ecai » Jeu 08 Déc 2011, 10:11

tu as 2 fois :
Code: Tout sélectionner
Set swApp = _
Application.SldWorks

dans ton code que je t'ai mis.
essaye de supprimé le second...

c'est surement pas ça mais c'est le copier coller....

@+
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 benarkor » Jeu 08 Déc 2011, 12:26

ça me fait toujours le même problème :?:
benarkor
Ewok SolidWorks
 
Messages: 12
Inscription: Mar 06 Déc 2011, 14:24

Messagepar liryc » Jeu 08 Déc 2011, 13:23

Bonjour, tu as bien les deux codes (fonction GetFolder et macro principale) dans ta macro?
liryc
Chevalier Jedi SolidWorks
 
Messages: 479
Inscription: Ven 02 Mar 2007, 8:14
Localisation: Paris - SW2009 SP5.0


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: Aucun utilisateur enregistré et 4 invités

banniere