Macro insertion PRT dans assemblage

Bonjour à tous,

J'ai la macro ci-dessous qui fonctionne ou non selon qu'elle ligne j'utilise (filepath).

Pour le filepath qui est dirigé vers Z:\1 Plans 2021\MONTIFAUD SAS CHATEAU ca fonctionne très bien, il ouvre le fichier vis, insert la vis dans mon plan d'assemblage et referme le fichier vis (Nickel).

Alors que l'autre filepath qui est dirigé vers Z:\SolidWorks\Bibliotheque lui il se passe rien.

Je suis pourtant sur le meme serveur j'utilise le meme PRT il n'y a que le chemine qui est différent

Avez-vous une explication à me donner ?

Y a-t-il une erreur dans la macro dans la déclaration des variables ?

Le but de cette macro est de l'intégrer plus tard dans des Userform.

Merci par avance.

Cordialement.

MACRO

Dim swPart As SldWorks.ModelDoc2
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Dim filePath As String
Dim swApp As Object
Dim Part As Object
Sub main()
Set swApp = Application.SldWorks
Set swPart = swApp.ActiveDoc
Dim tmpObj As ModelDoc2
Dim errors As Long
filePath = "Z:\SolidWorks\Bibliotheque\Visserie\Vis-Inox-TH.SLDPRT"
'filePath = "Z:\1 Plans 2021\MONTIFAUD SAS CHATEAU\Modele 3D\Visserie\Vis-Inox-TH.SLDPRT"
Set tmpObj = swApp.OpenDoc6(filePath, 1, 32, "", errors, longwarnings)
Set Part = swApp.ActivateDoc3(filePath, True, 0, errors)
Dim swInsertedComponent As Component2
Set swInsertedComponent = swPart.AddComponent5(filePath, 0, "", False, "", 0, 0, 0)
swApp.CloseDoc filePath
End Sub
 

 

Salut,
Forcément tu remplace la valeur dans ta variable !
Essai ceci :

Sub Insert

Dim swPart As SldWorks.ModelDoc2
Dim boolstatus As Boolean
Dim longstatus As Long, errors, longwarnings As Long
Dim FilePath1, FilePath2 As String
Dim swApp As Object
Dim Part As Object
Dim tmpObj As ModelDoc2

Sub main()
Set swApp = Application.SldWorks
Set swPart = swApp.ActiveDoc

FilePath1 = "Z:\SolidWorks\Bibliotheque\Visserie\Vis-Inox-TH.SLDPRT"
FilePath2 = "Z:\1 Plans 2021\MONTIFAUD SAS CHATEAU\Modele 3D\Visserie\Vis-Inox-TH.SLDPRT"

Set tmpObj = swApp.OpenDoc6(FilePath1, 1, 32, "", errors, longwarnings)
Set Part = swApp.ActivateDoc3(FilePath1, True, 0, errors)

Dim swInsertedComponent As Component2
Set swInsertedComponent = swPart.AddComponent5(FilePath2, 0, "", False, "", 0, 0, 0)
swApp.CloseDoc FilePath1

End Sub

 

Bonjour,

Merci pour ta réponse.

Je l'ai essayé mais j'ai une erreur execution type 13 avec incompatibilité type.

Set swInsertedComponent = swPart.AddComponent5(//A inserer dans assemblage courant//, 0, "", False, "", 0, 0, 0)

sur la ligne dessus, je veux pouvoir insérer la pièce dans l'assemblage courant peut important ou il se situe sur le serveur ou en  local.

J'appel ma pièce dans "Z:\SolidWorks\Bibliotheque\Visserie\Vis-Inox-TH.SLDPRT" --> que j'insère dans un assemble courant.

Cordialement.

 

Bonjour,

Essaye ce bout de macro :

Option Explicit

Dim swApp As SldWorks.SldWorks
Dim swPart As SldWorks.ModelDoc2
Dim tmpObj As SldWorks.ModelDoc2
Dim errors As Long
Dim longwarnings As Long
Dim FilePath1 As String
Dim FilePath2 As String

Sub main()

Set swApp = Application.SldWorks
Set swPart = swApp.ActiveDoc

FilePath1 = swPart.GetPathName
FilePath2 = "Z:\SolidWorks\Bibliotheque\Visserie\Vis-Inox-TH.SLDPRT"

Set tmpObj = swApp.OpenDoc6(FilePath2, 1, 32, "", errors, longwarnings)
Set swPart = swApp.ActivateDoc3(FilePath1, True, 0, errors)

Dim swInsertedComponent As Component2
Set swInsertedComponent = swPart.AddComponent5(FilePath2, 0, "", False, "", 0, 0, 0)

swApp.CloseDoc FilePath2

End Sub

Cordialement,

1 « J'aime »

En fait il faut tout revoir !
Il faut impérativement que le fichier ouvert soit un assemblage.

Essai ceci en y ajoutant le chemin d'un assemblage :

Dim swApp As Object
Dim swModel As ModelDoc2
Dim swAssy As AssemblyDoc
Dim swcomponent As SldWorks.Component2
Dim errors, warnings As Long
Dim FilePath1, FilePath2, FileName, AssemblyTitle As String

Sub Main
    Set swApp = Application.SldWorks
    FilePathASM = "Chemin de ton assemblage"
    FilePathPart = "Z:\SolidWorks\Bibliotheque\Visserie\Vis-Inox-TH.SLDPRT"
    FileName = "Vis-Inox-TH.SLDPRT"

    Set swModel = swApp.OpenDoc6(FilePathASM, swDocumentTypes_e.swDocASSEMBLY, swOpenDocOptions_e.swOpenDocOptions_Silent, "", errors, warnings)
    AssemblyTitle = swModel.GetTitle
    Set tmpObj = swApp.OpenDoc6(FilePathPart, swDocPART, 0, "", errors, warnings)

    If warnings = swFileLoadWarning_ReadOnly Then
        MsgBox "This file is read-only."
    End If 

    If tmpObj Is Nothing Then
        MsgBox "Cannot locate the file."
    End If

    Set swModel = swApp.ActivateDoc3(AssemblyTitle, True, swUserDecision, errors)
    Set swAssy = swModel
    Set swcomponent = swAssy.AddComponent5(FileName, swAddComponentConfigOptions_CurrentSelectedConfig, "", False, "", -1, -1, -1)
End Sub

 

1 « J'aime »

Bonjour,

Merci à tous pour votre collaboration, c'est d.Roger qui a répondu au mieux à ma demande.

Je peux appeler n'importe qu'elle pièce soit du serveur soit du disque local 

2 « J'aime »

Attention cependant, ma macro ne gère pas les erreurs possibles donc il faut penser à y ajouter cette fameuse gestion des erreurs souvent négligée ... il y a de mon point de vue au moins 4 vérifications à faire :
1°) après la ligne "Set swApp = Application.SldWorks" il faut s'assurer qu'un document est ouvert dans SW et que ce document est bien un assemblage.
2°) après la ligne "Set swPart = swApp.ActiveDoc" il faut s'assurer que l'assemblage ouvert dans SW n'est pas un nouvel assemblage non enregistré.
3°) après la ligne "Set swPart = swApp.ActiveDoc" il faut s'assurer que l'assemblage ouvert dans SW n'est pas en lecture seule.
4°) après la ligne "FilePath2 = "Z:\SolidWorks\Bibliotheque\Visserie\Vis-Inox-TH.SLDPRT"" il faut s'assurer que ce fichier existe bien.

Pour répondre à tes questions initiales :
- Avez-vous une explication à me donner ? oui, tu as activé l'objet "Part" avec la fonction "ActivateDoc3" mais tu as cherché à ajouter le composant dans l'objet "swPart" avec la fonction "AddComponent5".

- Y a-t-il une erreur dans la macro dans la déclaration des variables ? il y a un manque d'homogénéité dans la déclaration des variables comme par exemple soit du "SldWorks.ModelDoc2" soit "ModelDoc2" soit "Object" pour des variables de même type (swPart, Part et tmpObj).

Ce sont des erreurs que je vois assez souvent du fait que le VBA est assez souple sur le typage des variables et aussi du fait de la copie de bout de code récupéré à droite et à gauche.

Cordialement,