VBA CATIA V5 - Récupérer la langue de l'interface utilisateur

Signaler
Messages postés
5
Date d'inscription
mardi 26 juillet 2011
Statut
Membre
Dernière intervention
1 août 2011
-
Messages postés
5
Date d'inscription
mardi 26 juillet 2011
Statut
Membre
Dernière intervention
1 août 2011
-
Bonjour,

J'ai l'impression que ce forum est plus dédié aux développements de macros Office mais je tente quand même ma chance.

Je souhaite ajouter une petite option à mon développement VBA pour CATIA.
Elle consiste à récupérer la langue de l'interface utilisateur (Tools/Customized/Options/Language for user interface) afin que le contenu de mes UserForms (caption, controltiptext, msgbox) soient dans la même langue. Alors je ne vais pas me risquer à traduire ça dans toutes les langues mais français-anglais-espagnol-allemand suffiront.

Typiquement, il faudrait récupérer une variable d'environnement (si elle existe) et lancer une routine derrière du genre

Sub CATMain()

If mavariable_langue = "english" Then
myUF.Caption = "Customize your data"
...
Elseif mavariable_langue = "français" Then
myUF.Caption = "Personnalisez vos données"
...
etc.

Il me semble (d'après mes lectures) que les setting controllers servent à interagir sur les options d'environnements (Tools/Options/...) et pas sur la personnalisation de l'environnement. Toutefois, je suppose que Dassault n'aurait pas laissé ça manquant ?!

Voilà mon problème.

Ma question est alors de savoir si quelqu'un l'a déjà fait ou si quelqu'un connaît simplement le moyen de récupérer (sans modifier) la langue de l'interface CATIA V5 ?

Merci d'avance pour votre aide
Adrien

8 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
Bonjour,

Ton "CATIA" accepte-t-il l'utilisation de fonctions de l'Api de Windows ? (car là est la question)
Si oui : utilisation de la fonction GetLocaleInfo de la librairie JKernel32 de l'Api de Windows.
Tu peux en connaître plus sur son utilisation en consultant cette fonction sur le site de AllApi. Elle est même assortie d'un exemple facile.

____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
Messages postés
5
Date d'inscription
mardi 26 juillet 2011
Statut
Membre
Dernière intervention
1 août 2011

Merci pour ta réponse rapide

Je pense que oui car j'ai déjà fait une fonction qui récupère le séparateur décimal des options régionales...à condition de charger la librairie dont tu parles.
Dsl de ne pas être affirmatif mais je ne suis pas trop familié avec la prog. Mécanicien de formation, j'ai appris sur le tas à développer en VBA.

En revanche, cette fonction retourne quelle langue ? Celle de Windows ou celle de CATIA ? Car elles peuvent être différentes ! Je suppose qu'elle retourne la langue du système intérogé ?
Ce n'est pas parce qu'il s'agit d'une fonction de l'API Windows qu'elle retourne forcément la langue de Windows ? (pour ma culture perso, qui doit vachement s'enrichir !!!)
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
Cette fonction retournera bien évidemment la langue de Windows (puisqu'il s'agit d'une fonction de l'Api de Windows)!
J'ignore si CATIA aoffre ce qu'offre EXCEL, à savoir :
Application.LanguageSettings.LanguageID(msoLanguageIDInstall) (référence numérique de la langue en mode création)
et
Application.LanguageSettings.LanguageID(msoLanguageIDUI) (référence numérique de la langue en mode exécution)
Ouvre ton aide VBA/CATIA et cherche à partir du mot "Language" ou "Langue". Je ne peux le faire pour toi, ne possédant pas CATIA

____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
Ceci dit :
Si, comme je le crains assez, VBA/CATIA n'a rien prévu de similaire, tu peux toujours tenter un petit code du genre :

On Error Resume Next
Err.Clear

Set oFileSystem = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFileSystem.GetFolder(Catia.Parent.Path)
Set EmptyPartFolder = oFileSystem.GetFolder(oFolder.ParentFolder.ParentFolder.Path & "\startup\templates") ' dossier relatif des modèles vides
Set EmptyPartFile = oFileSystem.GetFile(EmptyPartFolder.Path & "\empty.CATPart")

If Err.Number = 0 Then
  On Error GoTo 0
  Set oEmptyPart = Catia.Documents.Open(EmptyPartFile.Path)
  MSGBOX oEmptyPart.Part.MainBody.Name ' ===>> juste pour voir si marche
  Select case LCase(oEmptyPart.Part.MainBody.Name)
   case "partbody"
       langue = "Anglais"
    case "hauptkörper" Then
       langue = "Allemand"
    'case  .......
        ' ...etc...
  end select
  msgbox langue

  'etc... et n'oublie pas de fermer le fichier
'  oFileSystem.GetFile(EmptyPartFolder.Path & "\empty.CATPart") ouvert par ce code,
' de mettre tous les Sets à Nothing, etc... (comme d'hab, quoi)
...
End if


voilà ... à tenter (en corrigeant au besoin pour "coller" au VBA de Catia), donc
____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
A tenter également (marche sous VBA/Excel) :
Dim toto As Boolean
toto = -1
MsgBox CStr(toto)
Select Case CStr(toto)
  Case "True"
    langue = "Anglais"
  Case "Vrai"
    langue = "Français"
  '... etc ...
End Select
MsgBox langue

Plus facile.

Et si cette astuce ne va pas sous CATIA, tu peux en chercher d'autre, du même genre (les noms par défaut, etc...)
Voilà. Désolé de ne pouvoir aller plus loin en procédant ainsi "à l'aveuglette"


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
En voilà une autre qui me vient à l'esprit et que je te mets ici juste pour que tu orientes bien le choix des astuces possibles :
 On Error Resume Next
  toto = CStr(vbNo) / 0 ' on provoque ainsi forcément une erreur
  MsgBox Err.Description
  Select Case Err.Description
    Case "Division par zéro"
      langue = "Français"
    'Case ... etc ...
  End Select
On error Goro 0

Bonne chasse.


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
Messages postés
5
Date d'inscription
mardi 26 juillet 2011
Statut
Membre
Dernière intervention
1 août 2011

Wouah...Tu as beaucoup bossé pour moi

À moins de bosser un peu maintenant.

- D'abord je réponds à ta 1ere question. Voici le lien vers l'aide VB CATIA si tu souhaites y jeter un oeil :
http://www.catiadesign.org/_doc/catia/catia_vb/

Malheureusement, j'avais déjà cherché et quasi rien trouvé (faut dire que c'est une belle bouze cette aide).
J'ai trouvé ce truc :

Func GetLoadExtendedLanguageLibInfo( CATBSTR ioAdminLevel,
CATBSTR ioLocked) As boolean

Retrieves information about the LoadExtendedLanguageLib setting parameter.
Refer to SettingController for a detailed description.

Petit soucis, comme je le disais dans mon 1er message, les settings controller à priori ne permette pas d'accéder à la bonne boîte de dialogue.
Je vais creuser un peu encore pour voir ce que retourne cette fonction.

- Je vais regarder ce que donne tes bouts de code. En revanche je vais mettre un peu de temps, j'ai souvent du mal à adapter les codes Excel pour CATIA. Alors n'attends de réponses rapidement.

Merci pour ton aide.
Adrien
Messages postés
5
Date d'inscription
mardi 26 juillet 2011
Statut
Membre
Dernière intervention
1 août 2011

Bonne nouvelle.

Dans mon précédent message, j'ai voulu te parler d'une solution probable qui ne me plaisait pas trop (pas sûr de la fiabilité).
En fait, mon appli fonctionne avec une StartUp. C'est un dire qu'un modèle vide pré-configuré est ouvert à l'avance. J'avais en tête de récupérer le nom d'un élément toujours présent et qui change selon la langue sélectionnée. C'est le cas du "MainBody" !!
Mais j'ai un tout petit peu peur car l'utilisateur à la possibilité de modifier ça avant de lancer la macro. Faut voir si ça ne pourrait pas être bloqué mais bon.

En fait, c'est exactement ce que tu fais ! Et ça marche quasi en l'état. Bravo
Mais la 1ere méthode est plus fiable car les autres m'ont toujours retournées la langue du VBA (anglais) et non pas celle de CATIA...actuellement en français.

Mais en tout cas ça fonctionne. Néanmoins, je ne sais pas trop comment procéder. Peut-être qu'ouvrir la StartUp après avoir lancé la macro est une solution plutôt que de laisser l'utilisateur l'ouvrir pour lancer ensuite la macro !

Merci pour tout
Adrien