Bonjour,
Lors de l'exécution d'une macro, pour tout faire en même temps, mes fichier CAO sont enregistrés en STEP.
Le chemin d'enregistrement se trouve dans un fichier localisé dans le coffre EPDM. L'enregistrement se fait sans problème mais cela reste un fichier local.
J'aurais donc aimé savoir s'il était possible d'archiver directement l'enregistrement svp ?
J'espère avoir été clair,
Merci bon après-midi.
1 « J'aime »
Bonjour,
Plutôt que par macro (dont je ne suis pas certain que ça fonctionnera avec SW ouvert), je pencherai plutôt sur les scripts dispatch qui permette d'effectuer ce genre d'actions.
2 « J'aime »
Effectivement l'archivage par macro ne fonctionnera pas si le fichier est ouvert dans SolidWoprks mais si celui-ci est issus d'un modèle 3D sldprt suivi d'un saveAs en Step via macro alors on peut considérer que ce fichier step n'est pas ouvert dans SolidWorks et l'archivage par macro fonctionnera.
Attention, entre le saveAs et l'archivage, il faut gérer le temps d'ajout au coffre...
Cordialement,
1 « J'aime »
Exact d.roger, c'était le sens de mon message ;)
Bonjour, merci pour vos réponses mais je ne comprends pas bien... En plus sur l'aide il n'y a pas d'exemples en Vba et je ne comprends pas trop le VB.net.
Cyril.f, qu'est ce qu'un script despatch svp ?
d.roger quand tu parles du temps d'ajout c'est si je veux l'utiliser directement ? Car en fait mon application sert à gérer la sélection et l'activation d'une configuration 3D et l'ouverture de la mise en plan. En même temps j'aimerais proposer à l'utilisateur l possibilité d'enregistrer cette configuration en STEP pour l'utiliser plus trad.
Pour le moment mon code est simple
If Check_step.Value = True Then
UserfrmSTEP.Show
EnregistrementSTEP = Part.SaveAs3("Chemin du dossier d'enregistrement\" & NomFichierSTEP & ".STEP", 0, 0)
MsgBox "Le fichier STEP a été enregistré dans le dossier suivant : Cjemin du dossier d'enregistrement" & Chr(10) & "Sous le nom suivant : " & NomFichierSTEP & Chr(10) & "Pensez à archiver le fichier car il se trouve encore en local", vbInformation, "Emplacement du fichier"
End If
Dispatch est un utilitaire disponible dans l'interface d'administration du coffre (dans l'arborescence, compléments puis clique droit sur dispatch et gérer les actions).
http://help.solidworks.com/2016/french/EnterprisePDM/admin/IDD_DLG_ADMIN_ACT.htm?rid=0
Pour le temps d'ajout évoqué par d.roger, ceci correspond au temps de traitement du coffre pour ajouter le fichier à la base. Ce temps pouvant varier, le fichier sera considéré comme utilisé par un applicatif et ne pourra donc être archivé via une macro. Il faudrait attendre que SW ait terminé son action et que le coffre ait fini d'ajouter le fichier à sa base.
C'est pourquoi je préconise plutôt de passer par dispatch qui est géré directement par le coffre et s'applique du coup au bon moment.
Pour lockfile version VBA:
Private Sub LockMyFile(vault As EdmVault5)
On Error GoTo ErrHand
Dim folder As IEdmFolder5
Set folder = vault.RootFolder
Dim file As IEdmFile5
Set file = folder.GetFile("MyFile.txt")
file.LockFile folder.ID, Me.hWnd
Exit Sub
ErrHand:
Dim ename As String
Dim edesc As String
vault.GetErrorString Err.Number, ename, edesc
MsgBox ename + vbLf + edesc
End Sub
Bonjour,
Voici un exemple en C# pour sauvegarder un fichier sldprt en step dans Epdm avec archivage de celui-ci :
private SldWorks swAppli;
private void Button8Click(object sender, EventArgs e)
{
// On se raccroche à SW
if (swAppli == null)
{
swAppli = (SldWorks)Activator.CreateInstance(Type.GetTypeFromProgID("SldWorks.Application"));
swAppli.Visible = true;
}
// On se connecte au coffre-fort
EdmVault5 vault;
vault = new EdmVault5();
if (!vault.IsLoggedIn)
{
while (!vault.IsLoggedIn)
{
vault.LoginAuto("Coffre_BE", this.Handle.ToInt32());
}
}
// On récupère la pièce SW ouverte
ModelDoc2 Part = null;
Part = ((ModelDoc2)(swAppli.ActiveDoc));
// On défini le dossier de destination du fichier step
IEdmFolder5 folder;
folder = vault.GetFolderFromPath(@"C:\Coffre_BE\TEST");
// On défini le nom complet du fichier STEP
string fichierSTEP = folder.LocalPath + @"\" + Part.GetTitle() + ".step";
// On enregistre le fichier au format STEP
if (Part.GetType() == (int)swDocumentTypes_e.swDocPART)
{
Part.SaveAs(fichierSTEP);
}
// On ajoute le fichier STEP dans le coffre
int fileID;
fileID = folder.AddFile(this.Handle.ToInt32(), fichierSTEP, "", 0);
// On se connecte au fichier STEP créé dans le coffre
IEdmFile5 newFileSTEP = null;
IEdmFolder5 ParentFolder = null;
while (newFileSTEP == null)
{
try
{
newFileSTEP = (IEdmFile5)vault.GetFileFromPath(fichierSTEP, out ParentFolder);
}
catch (Exception)
{
}
}
// On archive le fichier STEP
newFileSTEP.UnlockFile(this.Handle.ToInt32(), "Création fichier STEP.", 0, null);
}
Cordialement,
1 « J'aime »