CATIA V5 | 3DEXPERIENCE
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment :
Fnac : 2 jeux de société achetés ...
Voir le deal

VBA - rafraichir Label en fonction du document ouvert

3 participants

Aller en bas

VBA - rafraichir Label en fonction du document ouvert Empty VBA - rafraichir Label en fonction du document ouvert

Message par Flo42 Ven 28 Jan 2022 - 10:05

Bonjour,

Je bloque sur un petit sujet (encore).
J'ai un userform qui s'initialise à l'ouverture de Catia, il y a pleins de boutons qui me servent à faire des actions en auto sur Catia.
Dans ce même userform, il y a un label qui m'indique le nom du document ouvert.
J'aimerais qu'en changeant de fenêtre ou en ouvrant un nouveau document, que ce label se mette à jour automatiquement en indiquant le nom du document affiché.

J'ai regardé sur internet comment faire mais je n'ai pas trouvé de problématique commune à mon soucis.

J'ai trouvé quelques codes qui affichent l'heure dans un UF et l'actualisent toutes les secondes avec une boucle.
J'ai voulu faire la même démarche en actualisant toutes les secondes le code qui récupère le nom du document (Label8.Caption = CATIA.ActiveDocument.Name) mais je n'arrive pas à l'intégrer correctement et j'ai même l'impression que ces boucles liées au temps ne marchent pas sur le VBA de Catia.

Quelqu'un a-t-il la solution ?

Merci,

Flo

Flo42
timide
timide

Messages : 19
Date d'inscription : 22/04/2021
Localisation : Saint-Etienne

Revenir en haut Aller en bas

VBA - rafraichir Label en fonction du document ouvert Empty Re: VBA - rafraichir Label en fonction du document ouvert

Message par lumpazepfel Lun 31 Jan 2022 - 12:50

Salut,

Tu peux essayer avec la fonction repaint de la userform mais ça ne marche pas à tous les coups!
myUserForm.repaint
lumpazepfel
lumpazepfel
Fédérateur
Fédérateur

Messages : 319
Date d'inscription : 02/11/2015
Localisation : Ensisheim

Revenir en haut Aller en bas

VBA - rafraichir Label en fonction du document ouvert Empty Re: VBA - rafraichir Label en fonction du document ouvert

Message par Flo42 Lun 31 Jan 2022 - 13:10

Salut,

Merci pour ta réponse, hélas je vois bien que ça me remet en forme l'UF, mais sans me mettre à jour le label.
De plus, sans l'assigner à un bouton ça ne fonctionne pas dès que je change ou ouvre un autre document.

J'ai pas mal fouiné sur internet pour trouver des exemples et je suis tombé sur ça :

La personne arrive a ouvrir un fichier Catia via Fichier, Ouvrir du menu Catia et sa macro tourne en fond et détecte la version du fichier en l'affichant dans des textbox.
J'ai besoin de quelque chose du même genre, dès qu'on détecte un changement de fenêtre ou nouveau fichier la macro m'affiche ce nouvel état dans le label... j'espère ne pas trop vous embrouiller.

Flo

Flo42
timide
timide

Messages : 19
Date d'inscription : 22/04/2021
Localisation : Saint-Etienne

Revenir en haut Aller en bas

VBA - rafraichir Label en fonction du document ouvert Empty Re: VBA - rafraichir Label en fonction du document ouvert

Message par lumpazepfel Jeu 3 Fév 2022 - 20:49

Salut Florian,

Je ne sais pas si c'est possible en VBA.
Si tu regardes bien la vidéo, la fonction fichier ouvrir a été modifiée c'est donc une macro qui ouvre le fichier et affiche la version.
Elle ne tourne pas en tâche de fond en attendant une commande.
VBA - rafraichir Label en fonction du document ouvert Macro10

J'ai tout de même essayer un bout de code, mais il ne fonction que quand je clique dans différentes fenêtres affichées en mosaïque.
il ne permet pas de lancer une nouvelle commande CATIA
Code:

Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub CATMain()
    ' PI definition
    
    Dim myProd As Product
    Set myProd = CATIA.ActiveDocument.Product
    UserForm1.Show (False) 'propriété showmodal UserForm1 = False
    Do
        UserForm1.Label1.Caption = CATIA.ActiveDocument.Product.PartNumber
        DoEvents
        Sleep 100
    Loop While True
End Sub
VBA - rafraichir Label en fonction du document ouvert Macro_10
VBA - rafraichir Label en fonction du document ouvert Macro_11

ATTENTION : mettre dans bouton "END" dans la userform pour arrêter la boucle.
lumpazepfel
lumpazepfel
Fédérateur
Fédérateur

Messages : 319
Date d'inscription : 02/11/2015
Localisation : Ensisheim

Revenir en haut Aller en bas

VBA - rafraichir Label en fonction du document ouvert Empty Re: VBA - rafraichir Label en fonction du document ouvert

Message par Flo42 Ven 4 Fév 2022 - 8:12

Salut Marc,

J'ai testé et l'idée est bien là, merci.
J'ai essayé en ayant qu'une fenêtre Catia d'affichée et lorsque je passe sur l'autre fenêtre ça marche également mais plus moyen de changer de fenêtre ni de faire trop d'action sur Catia, je me doute que la macro tourne en boucle et fait ramer le logiciel.

A ton avis, est-ce-qu'on pourrait améliorer tout ça en jouant sur la méthode de sélection :
"Dim selection1 As selection
Set selection1 = partDocument1.selection
If selection1.Count = 0 Then ....."
Sur un Product, il y a toujours un élément de pré-sélectionné dans l'arbre (en bleu):
VBA - rafraichir Label en fonction du document ouvert Catiainsertmenu
Si on détecte cette pré-sélection alors on affiche le nom du doc dans le label.
Egalement, si on détecte une sélection, peut importe le type (une face, un axe, un élément dans l'arbre, ...), on affiche le nom du doc dans le label.
Pour un Part, il y a toujours un élément "défini comme objet de travail", souligné dans l'arbre, ne pourrait-on pas détecter ceci de la même manière qu'un product ?

Je vais essayer de coder ça de mon coté.

Encore merci,

Flo

Flo42
timide
timide

Messages : 19
Date d'inscription : 22/04/2021
Localisation : Saint-Etienne

Revenir en haut Aller en bas

VBA - rafraichir Label en fonction du document ouvert Empty Re: VBA - rafraichir Label en fonction du document ouvert

Message par lumpazepfel Dim 6 Fév 2022 - 20:42

Salut Florian,

Oui, avec une sélection ça peut marcher. Je l'utilise pour affecter des couleurs sur les éléments sélectionnés.
lumpazepfel
lumpazepfel
Fédérateur
Fédérateur

Messages : 319
Date d'inscription : 02/11/2015
Localisation : Ensisheim

Revenir en haut Aller en bas

VBA - rafraichir Label en fonction du document ouvert Empty Re: VBA - rafraichir Label en fonction du document ouvert

Message par Flo42 Lun 7 Fév 2022 - 13:16

Salut,

J'ai trouvé un programme sur le net pour afficher le nom d'une sélection dans un MsgBox.
Je l'ai adapté pour mon cas et ça fonctionne presque :
Code:
Public Function NomDsLabel()

Dim USel 'As selection
Dim InputObject(0)
Dim oStatus

InputObject(0) = "AnyObject"
Set USel = CATIA.ActiveDocument.selection
MsgBox "This macro will give you the name of a selected element, you have to hit ESCAPE key when you want to finish" & vbCrLf & vbCrLf & "Maximum number of loops is 100. " & "Names will depend if you select in Specification Tree or Graphic Area"
    For i = 1 To 100

        oStatus = USel.SelectElement2(InputObject, "Select something in Specification Tree", True)

        If (oStatus = "Cancel") Then
            Exit Function
            Else
        End If
        'MsgBox (USel.Item(1).Value.Name), , "VBScript"
        UserForm1.Label8.Caption = USel.Item(1).Value.Name 'ici c'est mon adaptation
        USel.Clear

    Next


End Function

Il y a toujours cette boucle qui m'empêche d'exploiter à 100% le logiciel, mais sans cette boucle impossible d'actualiser le label...
J'ai essayé de contourner cette boucle en gardant en mémoire dans une variable le nom de notre dernière sélection puis en déchargant et rechargant l'UF avec attribution de la variable au label :
Code:
   Dim bibi
    bibi = UserForm1.Label8.Caption
    Unload UserForm1
    UserForm1.Show
    UserForm1.Label8.Caption = bibi
Mais finalement ça me fait tourner en rond, car si je supprime la boucle et que j'utilise le bout de code ci-dessus alors dès que je change ma sélection il n'y a plus de détection de celle-ci.

J'ai l'impression qu'il me reste 2 solutions :
- soit utiliser un autre langage que VBA pour coder une macro qui intercepte, lis et compare les données de Catia (comme la vidéo exemple avec le fenêtre personnalisé d'ouverture de fichier) ;
- soit d'avoir un bouton dans mon UF et manuellement cliquer dessus pour avoir le nom du fichier et savoir s'il est confidentiel, au risque d'oublier de cliquer dessus et de faire des bêtises...

Malheureusement je n'ai pas assez de compétences en programmation pour la 1ère solution.

A plus,

Flo

Flo42
timide
timide

Messages : 19
Date d'inscription : 22/04/2021
Localisation : Saint-Etienne

Revenir en haut Aller en bas

VBA - rafraichir Label en fonction du document ouvert Empty Re: VBA - rafraichir Label en fonction du document ouvert

Message par lumpazepfel Lun 7 Fév 2022 - 20:51

Salut Florian,

Je suis arrivé au même résultat et à la même conclusion que toi : je ne vois pas comment réaliser ça en VBA!
En fouillant sur le net je viens de trouver cette fonction qui lance un exécutable en tache de fond:
CATIA.SystemService.ExecuteBackgroundProcessus
il faut maintenant trouver comment faire l’exécutable.
Bon courage.
lumpazepfel
lumpazepfel
Fédérateur
Fédérateur

Messages : 319
Date d'inscription : 02/11/2015
Localisation : Ensisheim

Revenir en haut Aller en bas

VBA - rafraichir Label en fonction du document ouvert Empty Re: VBA - rafraichir Label en fonction du document ouvert

Message par lumpazepfel Mer 9 Fév 2022 - 13:09

Il y a peut être une autre piste : agir sur le nom de la fenêtre.
A priori c'est possible, voir ici: https://www.maruf.ca/files/caadoc/CAAAfrTechArticles/CAAAfrLayoutV5.htm#The%20Name%20of%20the%20Window
mais je n'ai pas trouvé plus d'info sur la façon de procéder.
lumpazepfel
lumpazepfel
Fédérateur
Fédérateur

Messages : 319
Date d'inscription : 02/11/2015
Localisation : Ensisheim

Revenir en haut Aller en bas

VBA - rafraichir Label en fonction du document ouvert Empty Re: VBA - rafraichir Label en fonction du document ouvert

Message par Xavier KLEIN Mar 22 Fév 2022 - 10:49

bonjour
je peux proposer 2 pistes
1) dans le code VBA , stocker le nom du document actif MyCurrentDoc = CATIA.ActiveDocument.name
ensuite on vérifie que le document actif n a pas changé , quand on click sur un bouton/ une commande
catia.activeDocument est toujours identique a MyCurrentDoc
--
2) autre piste , utiliser un objet "Timer" ,qui déclanche une action a interval régulier
il va récupérer le nom du document actif et mettre a jour la Form
--

Xavier KLEIN
timide
timide

Messages : 4
Date d'inscription : 10/04/2018
Localisation : Haute Savoie

Revenir en haut Aller en bas

VBA - rafraichir Label en fonction du document ouvert Empty Re: VBA - rafraichir Label en fonction du document ouvert

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum