J’essaye actuellement d’implémenter une fonction dans une macro mais je bloque… j’en appelle donc à vos connaissances !
Je souhaite pouvoir ouvrir la carte de données d’un fichier PDM via une macro VBA mais le résultat que j’obtiens me laisse perplexe ahaha
Voici le morceau de code qui nous intéresse :
Global File As IEdmFile13
Global Folder As IEdmFolder10
Set Folder = vault.GetFolderFromPath(fs.GetParentFolderName(CheminFichier))
Set File = Folder.GetFile(fs.GetFileName(CheminFichier))
Dim CardView As IEdmCardView63
Set CardView = Folder.CreateCardView2(File.ID, 0, 400, 100, , 253)
CardView.ShowWindow (True)
En testant rapidement, je pense que la fonction ne fait qu’afficher la carte sans accès à celle-ci d’un point de vue édition il faut donc la « poser » dans une fenêtre qui a un fond (en gros sur un userform au fond gris elle apparaît normalement sinon dans l’éditeur de macro ça apparaît en transparence)
Soit en créant un userform qui contient des boutons et appel le bout de code.
Soit le mettre directement dans la procédure d’activation du formulaire.
Par contre faut récupérer les informations de hauteur et largeur de la carte pour redimensionner correctement le formulaire et afficher toute la carte.
Dans l’aide de l’api si vous êtes en vb#net c’est ce bout de code:
' Get the size needed to display the card
Dim width As Integer
Dim height As Integer
view.GetCardSize(width, height)
Sinon grosso modo en vba:
Private Sub UserForm_Activate()
Dim File As IEdmFile13
Dim Folder As IEdmFolder10
Dim width As Long
Dim height As Long
Set vault = New EdmVault5
vault.LoginAuto "_TDM_PROD", 0
CheminFichier = "C:\xxx\xxx"
Set Folder = vault.GetFolderFromPath(CheminFichier)
Set File = Folder.GetFile("xxx.SLDPRT")
Set CardView = Folder.CreateCardView2(File.ID, 0, 400, 100, , 253)
CardView.GetCardSize width, height
UserForm1.width = width + 80 'à affiner pour la largeur
UserForm1.height = height + 10 'à affiner pour la hauteur
CardView.ShowWindow (True)
End Sub
Public Sub UserForm_Activate()
Dim l As Long
Dim h As Long
Set Folder = vault.GetFolderFromPath(fs.GetParentFolderName(CheminFichier))
Set File = Folder.GetFile(fs.GetFileName(CheminFichier))
Dim CardView As IEdmCardView63
Set CardView = Folder.CreateCardView2(File.ID, 0, 400, 100, , 253)
CardView.GetCardSize l, h
UserForm1.Width = l + 80
UserForm1.Height = h + 80
CardView.ShowWindow (True)
End Sub
Merci @Cyril_f ! Pas la première fois que tu arrive a me débloquer avec une histoire de macro ahaha
Je vais creuser de mon coté aussi et je ferais un retour aussi si je trouve la solution !
j’en ai codé pas mal que ce soit sur SW/PDM/Excel/Word/Outllook donc quand je peux aider.
Donc après test, sur SW c’est juste un problème de déclaration des variables. Excel s’en tire bien sans déclarer la variable CardView.
Dans l’api SW faut ajouter:
Dim CardView As IEdmCardView63 'ou IEdmCardView64 ça dépend de la version majeur de PDM
ça semble enfin me l’afficher !! J’avais pourtant déclarer la variables mais a l’intérieur de la procédure du UserForm_Activate … en la mettant en dehors de l’instruction ça me l’affiche !
Il faut encore que je creuse car de mon coté ça l’affiche comme une image dans le UserForm je ne peux pas modifier ni rien faire dessus
Oui c’est le problème, la carte affichée n’est qu’un objet « mort ». faut regarder dans les options et il me semble qu’il faut lancer d’autres fonction pour appliquer ensuite les modifications