J'ai un souci pour ouvrir mes fichiers EDPM via ma macro. Dans mon projet actuel, j'ai été amené à créer une macro afin d'ouvrir mes fichiers étant stockés dans le coffre fort EPDM or lorsque que je lance ma macro, marchant très bien quand les piéces sont sur mon bureau la macro se met en Debug :
Lors de l'execution de la macro, les fichiers ne sont pas extrait de EPDM et c'est une volonté pour l'avoir uniquement en lecture seule. J'ai ce problème sur mon poste avec ma session EPDM, avec ma session sur un autre poste et sur un autre poste avec une autre session donc rien à voir avec le psote ou la session.
Or j'ai découvert quelque chose : Lorsque j'ouvre EPDM dans l'exploreur Windows et que je clique sur ma pièce (pas de double clique juste cliqué pour l'avoir dans la prévisualisation) j'ai une fenêtre qui s'ouvre :
Et suite à ce chargement, ne durant pas 3h comme indiqué, ma macro fonctionne à merveille..
Donc je me demandais si quelqu'un savait d'oû cela venait et peut-être corriger un problème dans le chargement automatique ?
Un dernier point, j'ai besoin, pour que ma macro fonctionne, de cliquer Uniquement sur les fichiers 3D, les mises en plan ne me posent pas de problèmes.
Dans ta macro tu dois commencer par te connecter à ton coffre fort puis obtenir la dernière version de ton fichier avant de l'ouvrir, je ne sais pas comment cela s'écrit en VBA mais voici un exemple en C# :
vault1 = new EdmVault5();
if (!vault1.IsLoggedIn) { vault1.LoginAuto("Ton coffre fort", this.Handle.ToInt32()); }
IEdmFile5 file3D = default(IEdmFile5);
IEdmFolder5 folderBOM = null;
file3D = vault1.GetFileFromPath("Ton Fichier", out folderBOM);
Merci beaucoup pour ta réponse car cela me rassure de savoir qu'il y a une solution ! Par contre je commence à avoir des connaissances en Vba mais sans plus et je n'y connais rien en langage C# donc je vais attendre d'autres réponses afin de connaître la marche à suivre en Vba.
Je crois que cela est une limite de l'API SW en VBA. Car si on recherche dans l'aide aucune documentation en VBA : http://help.solidworks.com/SearchEx.aspx?q=EdmVault5&sort=&version=2017&lang=english&prod=api
Bonjour, si les API existent en .net, je pense qu'elles existent aussi en vba.
Pour vous aider, vous pouvez copier le code que l'on vous a donné dans un convertisseur C# VB.net. Vous en trouverez plusieurs sur internet. Vba étant tiré de vb.net, le code sera assez proche pour que vous le compreniez.
De mémoire, il y a une dll à charger pour accéder aux objets pdm.
Pas besoin de convertisseur les exemples en vb.net sont nombreux. Voici plusieurs liens : http://help.solidworks.com/2017/english/api/epdmapi/Traverse_Folders_and_Files_in_Vault_Example_VBNET.htm
étant sur 2 projets en simultané je n'ai pas encore pu réaliser de tests mais je devrais pouvoir aujourd'hui par contre j'ai quelques questions suite à vos réponses :
- Pour le ddl a chargé, je ne sais pas comment faire... Est-ce un fichier à télécharger ? Un fichier à lier uniquement à mes pièces ? - Dans les codes que j'ai pu parcourir comme celui de d.roger j'ai remarqué qu'il y avait une fonction LoginAuto comment fonctionne-t-elle ? Car je dois me connecter à EPDM à travers cette fenêtre :
Est-ce que cette fonction va rentrer en conflit avec ma méthode de connexion habituelle ? Peut-être que j'interprète mal le terme "Auto".
Car dans l'idéale j'aimerais qu'au lancement de la macro il y ait une vérification de connexion à EPDM (grâce à la fenêtre ci-dessus) et si oui ensuite charger les document dans le cache lorsque c'est nécessaire.
Mais avant de me lancer dans le code, ne serait-il pas plus simple de modifier les paramètres EPDM comment "Vider le cache lors de la déconnexion" ou autre comme dans la pièce jointe.
Pour la connexion ça ne rentrera pas en conflit. LoginAuto utilise les paramètres de connexion locaux donc si demande de login/mdp à la connexion, la fenêtre sera présentée.
En ce qui concerne le fait de vider le cache à la déconnexion, il faut vraiment peser le pour et le contre. Ceci a une incidence sur les fichiers extraits (les assemblages en particulier si ma mémoire est bonne) et peu générer la perte de travail. Tout dépend de vos règles d'archivages et de la rigueur de vos utilisateurs.
Pour le reste, il n'y a effectivement plus d'exemple en vba (sur la 2009 il y en avait) mais à partir de VB.NET on peut s'y retrouver. Il restera cependant des fonctionnalités réservées à C# et VB.NET.
Pour la DLL à charger cela est nécessaire pour les programmes en C#. En VBA il faut à priori juste mettre en référence "PDMWorks Enterprise 20xx Type Library" dans ta macro, voir l'image jointe.
Pour la fenêtre de connexion, voir la réponse de Cyril.f ci-dessus.
Autrement, je pense qu'il est plus interressant de se lancer dans l'apprentissage d'un langage comme le VB.net ou le C# qui permettent de faire beaucoup plus de choses soit sous forme de macros soit sous forme de programmes indépendants permettant de piloter aisément EPDM et/ou SolidWorks mais ce n'est qu'un avis personnel. Il existe d'excellents cours d'apprentissage de ces langages sur différents sites comme par exemple https://openclassrooms.com/courses/apprenez-a-developper-en-c
Pour ce projet, je vais essayer de me contenter du Vba car je suis en stage et malheureusement je ne serai pas embaucher et les personnes qui utiliseront mon programme ont à peine les base de Vba...
Mais pour de futures applications, je m'y attarderai plus. Par contre j'ai une question très bête, en quoi cela est mieux que le Vba ? Plus de possibilité ? Ce sont aussi des programmes à coder dans un module spécifique d'un logiciel ou c'est indépendant ? (Juste des petites questions histoire d'avoir une idée avant que je commence l'apprentissage)
Le Vb.net est effectivement beaucoup plus ressemblant au VBA donc plus aisé à apprendre, le C# est nettement moins "verbeux", c'est une histoire de goût.
Pour les macros en C# ou VB.net dans SW, je crée des DLL et lorsque j'insère des nouveaux boutons dans SW je fais appel à ces DLL, voir image jointe. J'ai fini par me faire une DLL qui ne sert qu'à lire un fichier texte dans lequel je met le chemin de mon executable principal puis à lancer cet executable, cela me permet d'avoir beaucoup plus de souplesse sur mes programmes.
Pour mes programmes, j'utilise l'EDI open source SharpDevelop.
en quoi cela est mieux que le Vba ? Plus de possibilité ? : Visual Basic for Applications (VBA) est une implémentation de Microsoft Visual Basic, VB.NET ou C# sont des langages de programmation à part entière. BEAUCOUP plus de possibilité.
Ce sont aussi des programmes à coder dans un module spécifique d'un logiciel ou c'est indépendant ? Programmation indépendante (création d'éxécutables), l'utilisation d'un EDI tel que Visual Studio Community ou Sharpdevelop facilite énormément les choses.
Effectivement cela à l'air plus intéressant ! Donc c'est décidé après mon projet je passe à l'apprentissage VB.net.
Mais concernant mon problème J'ai essayé la macro de d.roger et le début à l'air de fonctionner car lorsque je clique sur un choix, j'ai la fenêtre de connexion EPDM qui s'ouvre.
Mais la ligne suivante n'a pas l'air de faire son travail de moins elle ne corrige pas mon problème :
'Active la seconde ComboBox lorsqu'un type est sélectionné dans la 1er liste
Private Sub CBox_etat_Click()
'Déclaration des varaibles nécessaires
Dim Part As SldWorks.ModelDoc2
Dim boolstatus As Boolean
Dim longstatus As Long
Dim longwarnings As Long
Dim swModel As ModelDoc2
Dim swDesignTable As DesignTable
Dim xlWS As Worksheet
Dim DebutDesignation As Range
Dim r As Range
Dim Vault As New EdmVault5
Dim File As IEdmFile5
Dim Folder As IEdmFolder5
Vault.LoginAuto "Nom_coffre", 0
If Info_general.CBox_type.Value = ("Pince W25") Then
'Ouverture du fichier correspond au besoin choisi dans la liste
'Chemin à changer lors du changement d'emplacement des fichiers EXEMPLE : Lors de l'insertion dans l'ePDM
If CBox_etat.Value = ("Pince finie") Then
Set File = Vault.GetFileFromPath("Chemin + nom de fichier", Folder)
Set Part = swApp.OpenDoc6("Chemin + nom de fichier", 1, 0, "", longstatus, longwarnings)
swApp.ActivateDoc2 "Nom fichier", False, longstatus
'Activation du modèle ouvert, nécessaire pour accéder à la famille de pièces
Set swModel = swApp.ActiveDoc
'Récupération de la famille de pièces
Set swDesignTable = swModel.GetDesignTable()
'Si récupération correcte de la famille de pièces
If Not swDesignTable Is Nothing Then...........................
Voici une partie de mon code et l'erreur "object not set" apparaît à la ligne de la récupération de la famille de pièces.
tu n'as pas mis le nom de ton coffre-fort, je doutes qu'il s'appelle Nom_coffre.
Idem dans les lignes :
Set File = Vault.GetFileFromPath("Chemin + nom de fichier", Folder) Set Part = swApp.OpenDoc6("Chemin + nom de fichier", 1, 0, "", longstatus, longwarnings)
ou Chemin + nom de fichier doit être le nom de ton fichier avec son chemin donc sous la forme "C:\Coffre-BE\TEST\FichierTest.sldprt" par exemple
Oui oui d.roger ne t'inquiète pas j'ai changé ça ^^. J'ai juste enlevé les noms pour mettre sur le forum ;).
Cyril.f j'ai essayé mais cela ne marche toujours pas.
Edit : je pense que cela a un impact mais lorsque j'exécute pas à pas mes varaibles File, Part et swDesigntable = Nothing mais je ne vois pas le problème cela marche si je fais le chargement de la version antérieur manuellement.