Une Macro pour SW qui ''save as .STEP'' à partir de la mise ne plan?

Bonjour Cher communauté!

Y aurait-il une macro qui me permettrais de sauvegarder chaque pièce contenue dans une mise en plan( jusqu'a 30 pièces!) dans un dossier déterminer et nommer selon le nom de l'onglet (sheet name) de chaque pièce? Le planificateur de tâche ne fonctionne pas selon nos besoins. Il s'agirait d'un très grand gains de temps pour nous comme nous avons des assemblages de plaque plier assez complexe.

Si vous avez des piste fait moi signe svp. Le VBA n'est pas ma tasse mais habituellement je suis capable d'adapter du existant!

Merci à tous pour vos idée.

 

Eric

Bonjour

L"idée si je synthetise

Tu a MEP ouverte avec plusieur onglet 

Tu execute alors une macro qui enregistre sur chaque onglet la piece defini par defaut en la nomant le nom de l'onglet ?

Cordialement

Bonjour Mad,

oui en gros j'exécute la macro qui ouvre chaque pièce, sauve en format .STEP 214 sous le nom contenu dans l'onglet de la pièce dans un répertoire défni( toujours le même).

Bien à vous,

 

Eric

Bonjour,

Je t'ai envoyé un message privé.

Bonne journée.

A+

Bonjour Nicolas,

 

J'ai bien reçus la macro mais rien ne ce passe. 

Ça ne fonctionne pas de mon côté.

 

Merci,

 

Éric

Bonjour,

Voici un bout de programme qui devrait pouvoir servir de point de départ, c'est du langage C# donc à traduire en VBA :

private SldWorks SWapp;
private string msg = string.Empty;
private string repertoire = Application.StartupPath + "\\";

private void Button6Click(object sender, EventArgs e)
{
    if (SWapp == null)
    {
        SWapp = (SldWorks)Activator.CreateInstance(Type.GetTypeFromProgID("SldWorks.Application"));
    }
    
    ModelDoc2 Part;
    Part = ((ModelDoc2)(SWapp.ActiveDoc));
    
    string newFile = Part.IGetDependencies2(true, true,true);
    
    msg = newFile + "\n";
    
    ModelDoc2 swDocTemp = null;
    int longstatus = 0;
    int longwarnings = 0;
    swDocTemp = ((ModelDoc2)(SWapp.OpenDoc6(newFile, (int)swDocumentTypes_e.swDocASSEMBLY, 0, "", ref longstatus, ref longwarnings)));
    
    TraverseAssembly(swDocTemp);
    
    MessageBox.Show(msg);
}

public void TraverseAssembly(ModelDoc2 swDocTemp)
{
    Cursor.Current = System.Windows.Forms.Cursors.AppStarting;

    ConfigurationManager swConfMgr;
    Configuration swConf;
    Component2 swRootComp;

    swConfMgr = (ConfigurationManager)swDocTemp.ConfigurationManager;
    swConf = (Configuration)swConfMgr.ActiveConfiguration;
    swRootComp = (Component2)swConf.GetRootComponent3(true);

    TraverseComponent(swRootComp);
}

private void TraverseComponent(Component2 swComp)
{
    object[] vChildComp;
    Component2 swChildComp;
    long i = 0;
    vChildComp = (object[])swComp.GetChildren();
    for (i = 0; i < vChildComp.Length; i++)
    {
        swChildComp = (Component2)vChildComp[i];
        
        TraverseComponent(swChildComp);
        
        if (msg.Contains(swChildComp.GetPathName()) == false)
        {
            msg = msg + swChildComp.GetPathName() + "\n";
            
            ModelDoc2 swDocTemp = default(ModelDoc2);
            ModelDocExtension swModelDocExt = default(ModelDocExtension);
            int longstatus = 0;
            int longwarnings = 0;
            
            swDocTemp = ((ModelDoc2)(SWapp.OpenDoc6(swChildComp.GetPathName(), (int)swDocumentTypes_e.swDocPART, 0, "", ref longstatus, ref longwarnings)));

            string stepFileName = repertoire + swChildComp.Name2 + ".step";
            swModelDocExt = (ModelDocExtension)swDocTemp.Extension;
            swModelDocExt.SaveAs(stepFileName, 0, (int)swSaveAsOptions_e.swSaveAsOptions_Silent, null, ref longstatus, ref longwarnings);
            
            SWapp.CloseDoc(swChildComp.GetPathName());
        }
    }
}

Cordialement,

Voici un exemple de programme utilisant les fonctions du post précédent.

Pour l'utiliser il faut au préalable ouvrir un plan SLDDRW dans SolidWorks.

Cordialement,


save-step.zip

Bonjour,

 

Je n'ai toujours pas de piste à explorer pour régler mon problème.

Y aurait-il une macro qui ferait une partie de ce que je cherche à faire que je pourrais compléter selon mes besoin?

Tout ce que je trouve est une macro qui sauve mon assemblage complet en .Step alors que j'ai besoin d'avoir chaque pièces sauver séparément sous un nom spécifique qui peut-être trouver dans les custom properties ou dans l'onglet de MEP de la pièce. 

La solution la plus approprié serait que la macro ouvre la pièces de chaque mise en plan, la sauvegarde en .STEP sous le nom d'une propriété de la pièce. Les pièces sont tout contenue dans une mise unique donc la macro passerait chaque MEP.

Si vous avez des piste elle sont les bienvenue.

 

Cordialement,

Eric

Bonjour,

J'ai des bouts de macro à compiler qui doivent pouvoir répondre au besoin. SI personne ne donne réponse entre deux, je pense pouvoir fournir ça demain matin.

Bonjour,

Ci-joint normalement une macro fonctionnelle (j'ai testé rapidement sur une mise en plan à deux feuilles pas vu de bug).

La macro vérifie avant toute action qu'il s'agît bien d'une mise en plan. J'ai également ajouté un contrôle d'existence du dossier dans lequel sera sauvegardé le step.

En l'état la macro n'exportera que des fichiers pièces, je n'ai pas géré le traitement d'un assemblage dans la mise en plan.

Je peux si besoin la compléter mais demandera un peu plus de temps et si possible un fichier représentatif de vos mises en plans pour tester le comportement (même une mise en plan avec des pièces, assemblages constitués de cubes sans aucune fonction me suffit).

Comme j'utilise des scripts microsoft il faudra activer dans vba la reference microsoft scripting runtime.

 


exportstep.txt
3 « J'aime »

Bonjour,

 

Merci Cyril, je vais faire des test de mon côté avec le bout de scrip que tu m'a donner.

Merci beaucoup de ton aide, vraiment apprécier!

 

Eric