VBA Excel pour dupliquer une piece et son plan + changement de nom

Bonjour,

Je souhaite depuis un fichier Excel, ouvrir une pièce et son plan, enregister cette pièce sous un nouveau nom 'enregistrer sous' et que le plan soit à jour en terme de référence avant de l'enregistrer à son tour.

J'arrive à ouvrir mes fichiers en simultané, et à les enregistrer sous un nouveau nom. Mais le plan pointe toujours vers l'autre pièce.

Pourtant en manuel ça fonctionne. On dirait que l'enregistrement ne correspond pas à enregistrer Sous, mais plutôt à enregister une copie.

J'ouvre avec cette méthode :

Set swModel = swApp.OpenDoc6("lien de mon plan", 3, 0, "", myError, myWarning)  

Et j'enregistre avec ceci :

 swModel.SaveAs2 "nouveau lien", 0, True, False

 

PS : Et par ailleurs, si quelqu'un à une astuce pour changer la propriété Designation de la pièce en même temps, ça m'aiderait beaucoup.

Voici un exemple dont je me sert pour créer une copie de la pièce/assemblage et du  plan lié à partir d'une pièce ou assemblage ouvert, afin de lui ajouter un indice.

Pour cela je récupère la propriété indice de la pièce/assemblage d'ouverte et modifie une autre la propriété indice de la nouvelle pièce/assemblage

Avec un peu de modification tu devrait pouvoir modifier tout çà pour faire ce que tu as besoin.

Et tu devrait assez bien comprendre c'est ma 1ère macro assez importante donc j'ai mis beaucoup de commentaires!

Par contre elle se lance depuis solidworks. A toi de l'adapter!

 


ajoutindice.swp
1 « J'aime »

Bonjour,

Tout est dans la macro de sbadenis (donc +1 pour lui), notamment la fonction ReplaceReferencedDocument. Pour exemple :

Option Explicit

Const sReferencingDoc As String = "C:\Users\XXX\Desktop\Temp\Pièce5.SLDDRW"
Const sOldDoc As String = "C:\Users\XXX\Desktop\Temp\Pièce5.sldprt"
Const sNewDoc As String = "C:\Users\XXX\Desktop\Temp\Pièce1.sldprt"

Sub main()

    Dim swApp As SldWorks.SldWorks
    Dim bRet As Boolean

    Set swApp = CreateObject("SldWorks.Application")

    bRet = swApp.ReplaceReferencedDocument(sReferencingDoc, sOldDoc, sNewDoc)
    
End Sub

A utiliser sans ouvrir un des documents dans Solidworks !!!

Dans ta ligne "swModel.SaveAs2 "nouveau lien", 0, True, False", le "True" veut dire "SaveAsCopy" = oui ... mais tu n'as plus besoin de cette ligne si tu utilise la fonction ReplaceReferenceDocument ...

Cordialement,

1 « J'aime »

Merci pour vos réponses, en fait remplacer le True par False suffisait à répondre à mon besoin.

 

Pour info je code à partir d'Excel et j'ai l'impression que certaines choses ne fonctionnent pas pareil. Genre les lignes avec bRet, j'en ai déjà vu avec le changement de propriété, mais ça ne fonctionne pas sur Excel, alors que Sur Solid oui.

Bonjour,

Il me reste un défaut à corriger. J'explique :

J'ai un assemblage "A" qui contient un assemblage "B"

"A" et "B" contiennent une pièce "C".

Si je remplace la pièce C par une pièce D dans l'ensemble A, celle de l'assemblage B sera aussi remplacé (c'est le but).

je termine par enregistrer mon assemblage A. Mais je constate que par la même occasion, l'assemblage B a été enregistré.

Mais je ne souhaite pas faire ça. Pourtant j'ai mis 0 en option de sauvegarde, Mais je remarque qu'on devrait théoriquement indiquer d'enregister les référents avec swSaveAsOptions_SaveReferenced, mais comment le forcer à ne pas les enregistrer ?

Bonjour,

Je ne vois pas bien l'intérêt de remplacer ta pièce C par une pièce D dans ton assemblage B si tu ne veux pas enregistrer cet assemblage B, autant ne remplacer la pièce C par ta pièce D que dans ton assemblage A et garder ton assemblage B avec ta pièce C ...

Cordialement,

En fait ce n'est pas exactement ce qu'il se passe, mais j'ai voulu expliquer plus simplement du problème.

En gros, je veux pouvoir enregistrer uniquement mon assemblage, et pas les enfants.

Bonjour,

La fonction SaveAs2 répond à ton besoin mais il ne faut pas mettre 0 dans les options de sauvegarde, ce n'est pas une option valide, il faut mettre l'addition des choix fait, par exemple :

1 + 2 pour swSaveAsOptions_Silent et swSaveAsOptions_Copy

1 + 512 pour swSaveAsOptions_Silent et swSaveAsOptions_CopyAndOpen

...

Cordialement,