VBA - rafraichir Label en fonction du document ouvert
3 participants
Page 1 sur 1
VBA - rafraichir Label en fonction du document ouvert
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
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
- Messages : 19
Date d'inscription : 22/04/2021
Localisation : Saint-Etienne
Re: VBA - rafraichir Label en fonction du document ouvert
Salut,
Tu peux essayer avec la fonction repaint de la userform mais ça ne marche pas à tous les coups!
myUserForm.repaint
Tu peux essayer avec la fonction repaint de la userform mais ça ne marche pas à tous les coups!
myUserForm.repaint
lumpazepfel- Fédérateur
- Messages : 319
Date d'inscription : 02/11/2015
Localisation : Ensisheim
Re: VBA - rafraichir Label en fonction du document ouvert
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
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
- Messages : 19
Date d'inscription : 22/04/2021
Localisation : Saint-Etienne
Re: VBA - rafraichir Label en fonction du document ouvert
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.
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
ATTENTION : mettre dans bouton "END" dans la userform pour arrêter la boucle.
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.
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
ATTENTION : mettre dans bouton "END" dans la userform pour arrêter la boucle.
lumpazepfel- Fédérateur
- Messages : 319
Date d'inscription : 02/11/2015
Localisation : Ensisheim
Re: VBA - rafraichir Label en fonction du document ouvert
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):
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
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):
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
- Messages : 19
Date d'inscription : 22/04/2021
Localisation : Saint-Etienne
Re: VBA - rafraichir Label en fonction du document ouvert
Salut Florian,
Oui, avec une sélection ça peut marcher. Je l'utilise pour affecter des couleurs sur les éléments sélectionnés.
Oui, avec une sélection ça peut marcher. Je l'utilise pour affecter des couleurs sur les éléments sélectionnés.
lumpazepfel- Fédérateur
- Messages : 319
Date d'inscription : 02/11/2015
Localisation : Ensisheim
Re: VBA - rafraichir Label en fonction du document ouvert
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 :
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 :
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
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
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
- Messages : 19
Date d'inscription : 22/04/2021
Localisation : Saint-Etienne
Re: VBA - rafraichir Label en fonction du document ouvert
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.
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- Fédérateur
- Messages : 319
Date d'inscription : 02/11/2015
Localisation : Ensisheim
Re: VBA - rafraichir Label en fonction du document ouvert
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.
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- Fédérateur
- Messages : 319
Date d'inscription : 02/11/2015
Localisation : Ensisheim
Re: VBA - rafraichir Label en fonction du document ouvert
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
--
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
- Messages : 4
Date d'inscription : 10/04/2018
Localisation : Haute Savoie
Sujets similaires
» Récupérer le nom d'une part active dans un produit ouvert
» Modification tableau drawing document
» exporter plusieurs calques dans un même document dxf ou dwg
» userform ouvert _ possibilité d'agir sur le .part
» [Résolu]Tester si deux drawing sont ouvert
» Modification tableau drawing document
» exporter plusieurs calques dans un même document dxf ou dwg
» userform ouvert _ possibilité d'agir sur le .part
» [Résolu]Tester si deux drawing sont ouvert
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|