Affichage carte de données via macro VBA

Bonjour à tous :smiley:

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)

Et le résultat est le suivant…

ça affiche la carte de données à moitié transparente et quand je passe la souris dessus, ça disparait !
L’aide sur la fonction : CreateCardView2

Si quelqu’un a une idée de comment faire ? que ce soit avec cette méthode ou une autre je suis preneur !

Merci d’avance :wink:

Bonjour,

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)

1 « J'aime »

Ah je vois ! Mais comment faire pour la « poser » dans un UserForm ?!

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

Même en suivant ce code ça m’affiche toujours la carte de données en transparence au milieu de rien et non pas sur le UserForm :confused:

Vous l’avez bien mis dans la procédure d’activation de l’UserForm?
Faut appeler également ce formulaire dans un module principal par Userform.Show

Oui dans ma première fonction j’effectue :

UserForm1.Show 

et dans le UserForm1 j’ai le code suivant :


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

Code VBA sous Excel ou SW? (j’ai testé sur Excel)

VBA sous SolidWorks !

Je vais tester un peu plus tard et ferais un retour

1 « J'aime »

Merci @Cyril_f ! Pas la première fois que tu arrive a me débloquer avec une histoire de macro ahaha :slight_smile:
Je vais creuser de mon coté aussi et je ferais un retour aussi si je trouve la solution !

:wink: 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
1 « J'aime »

ç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 :confused: 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

1 « J'aime »