Affecter un raccourci clavier à un cmdbutton dans un UF

Bonjour à tous,

Après un grand nombre de recherches et essais, je ne parviens pas à créer un raccourci clavier pour activer un cmdbutton dans un UserForm.
J’ai tenté différentes approches, la dernière étant celle-ci :

Private Sub UserForm_Initialize()
Me.KeyPreview = True
End Sub

Private Sub UserForm1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyF4 Then
Call cmdButton_1_Click
End If
End Sub

J’ai également testé la commande : Application.OnKey, mais rien n’y fait !

Idéalement, il faudrait que la raccourci active un cmdbutton sans que le userform ait la focal.
Je précise que je travaille sur SW 2010. Il se peut qu’il y ait des problèmes de compatibilité…

Si vous avez déjà été confrontés au problème et que vous connaissez les commandes adéquates, je vous en serai reconnaissant.

Merci !

Bonsoir,

Le seul moyen que j’ai trouvé pour que ça fonctionne, c’est de mettre le bouton en Enable = False.
La ligne à l’initialisation du UserForm n’est pas nécessaire à mon sens.
Et j’ai dû changer ça:

Private Sub UserForm1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

Par:

Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

Bonjour,

Y a-t-il autre chose que ce bouton sur la userform ?

N’est-il pas possible de créer la macro dédiée à l’exécution automatique de la fonction lancée par ledit bouton, puis d’assigner un raccourci au bouton de macro de la barre d’outil ?

En clair, un raccourci clavier lance la macro, qui lance la fonction, et qui se ferme en vue du prochain appui sur les touches de raccourci clavier.

1 « J'aime »

Bonsoir,

Merci pour vos réponses. J’essayerai demain.
Sylk, oui, j’ai une vingtaine de boutons sur mon UF. L’idée étant de tous les paramétrer en leur attribuant des raccourcis.

Mon UF a déjà son raccourci mais dans un souci d’efficacité, je souhaiterais que la vingtaine de boutons soit paramétrée.

Nous sommes une dizaine à utiliser les macros, qui sont sur serveur. Ma première idée était de les insérer individuellement dans un onglet sous SW ; après coup, je me suis rendu compte de la tâche fastidieuse que représenterait la màj pour chacun si un changement dans la ou les macros devait se produire ou si un dossier venait à changer de nom ou d’emplacement. Le UF m’a semblé être la meilleure solution afin d’assurer une fluidité et simplicité dans les cas précédemment mentionnés.
Ceci étant dit, si je suis passé à côté d’une « technique » et que le UF ne se révèle pas obligatoire, je suis à votre écoute.

Merci pour vos réponses,

Bonjour,

Pour la mise à jour ce n’est pas si contraignant que ça.
Chez nous, j’ai développé tout un tas de macro qui sont lancées via appui sur une icône située à côté des icônes d’enregistrement, retour en arrière… de base de SW.
Comme on administre le paramétrage global et que l’on génère un fichier de paramétrage utilisés par tous (sldreg) la mise à jour des liens de macros peut se faire facilement (mais si on peut laisser les chemins d’accès et méthodes appelées fixe c’est toujours mieux).
Ensuite pour la mise à jour du code, faut juste trouver un moment où personne n’a SW d’ouvert pour pouvoir mettre à jour le contenu et déployer les nouvelles fonctionnalités ou corrections de bug.
Bien penser à mettre les macros en lecture seule et verrouiller leur contenu par mot de passe pour éviter les manipulations par des personnes qui n’y connaisse rien (j’ai déjà eu des macros vidées de leur contenu heureusement que j’avais des sauvegardes ailleurs).
L’idée de @Sylk est bonne, en revanche elle nécessite de bien informer les utilisateurs des fonctionnalités associées à chaque raccourcis clavier.

1 « J'aime »

Bonjour @Cyril_f

Alors pour le coup, la clarté des fonctions et raccourcis associés c’est précisément un atout de cette méthode :
image
Une icône explicite et une infobulle avec intitulé, raccourci, et description. On fait difficilement plus clair pour l’utilisateur.

Pour moi, rien ne vaut une barre d’outils perso avec un bouton pour chaque fonction liée à un bouton de la userform. On peut la laisser ouverte et à portée de main, ou bien la masquer (pour rendre les raccourcis comme « intégrés nativement » et invisibles.
Les barres d’outils sont transférables avec les paramètres de SW, donc plutôt facile à déployer.

Le seul bémol, sachant que la macro se ferme après chaque exécution de la fonction, c’est peut-être si certaines valeurs de variables doivent persister entre 2 fonctions…

Je n’ai pas mieux à proposer pour le moment.

Je suis en phase mais à la vue des utilisateurs chez moi je peux dire que même une infobulle ça va au-delà de leur « compétence ».
En gros faut qu’ils daignent survoler les icônes disponibles et ne pas se contenter d’utiliser SW20xx comme on utilisait SW9x (95/98/99)

Bonjour;
Il est possible de créer une (ou plusieurs) barre-outil complète et paramétrable à partager sur tous vos postes Solidworks (via les compléments):

Cette barre outil a aussi l’avantage de pouvoir activer (ou non) l’accès aux boutons/macro selon l"environnement de travail (si vous travaillez dans un assemblage, il n’est pas nécessaire de pouvoir utiliser les macro spécifiques aux mises en plan …).
L’inconvénient est de devoir créer des icônes personnalisées et lisible mais cela reste surmontable.
Nota : La version que nous utilisons sur nos postes et la version bêta (appelée à l’époque « MyToolbar ») . Je n’ai pas testé la version « Toolbar+ » proposée dans le pack « Cad+ » …

1 « J'aime »

Bonjour,

Merci pour vos réponses.
La solution de la Toolbar a déjà été testée.


Elle est bonne puisqu’elle permet d’attribuer des raccourcis individuels,
cependant, elle nécessite, si changement dans les multiples macros il y a, de mettre à jour le lien, pour chaque macro modifiée, et pour chaque utilisateur.
Effectivement Cyril_f, il faudrait déjà pour la màj que chaque utilisateur ait bien SW fermé, pour l’avoir testé, c’est contraignant. De plus, outre les changement opérés au sein des macros, il peut y avoir des changements de localisation des fichiers ou changement de nom des dossiers.
J’avais déjà testé, comme tu me l’as suggéré Cyril_f d’enregistrer un .sldreg qui permettrait une màj rapide. Mais cela ne s’est pas révélé efficace dans notre situation.
L’idée du USF alors était de n’avoir qu’un seul changement à opérer. Plus simple pour les utilisateurs donc.
Pour aller plus loin, l’idée de déposer sur le bureau des utilisateurs un batch qui permettrait de copier/coller le fichier macro mis à jour sur le serveur, en local ; cela afin d’augmenter sensiblement la réactivité des macros.

Mais j’en reviens toujours à mon souci de raccourcis directement inscrits dans le code, aucune syntaxe essayée ne semble fonctionner !
Cyril_f, j’avais écrit UserForm1 car en toute logique, ayant 2 USF dans mon projet, il m’avait semblé pertinent de le nommer. Je me trompe ?

Ah oui mais alors là ce qu’il faut coder c’est une macro pour lancer la fonction « startUserBrain() » à leurs neurones…

1 « J'aime »

Bonjour @N_MS

Non. Il suffit d’intégrer toutes les fonctions dans une macro unique (commune donc), et de choisir la fonction (dite « Méthode ») ciblée pour chaque bouton.
Si tu mets à jour la macro, tant que tu ne changes pas le nom des fonctions appelées par les boutons, toutes les màj se répercuteront. La màj de la toolbar chez l’utilisateur ne sera utile que pour ajouter de nouveaux boutons/fonctions.

C’est tout l’intérêt de la barre outil que je propose ci-dessus.
Cette dernière est à localiser sur un serveur partagé, les différentes macro qui lui sont associées le sont sous la forme de liens (emplacement des macro) et en cas de mises à jours ou d’ajout de fonctions, elle sera automatiquement rechargée au prochain démarrage de Solidworks pour tout les utilisateurs.

Sinon il existe l’utilitaire CustomToolbar qui permet également d’ajouter une barre d’outil avec raccourcis vers macro.
Je configure cette barre sur mon poste puis j’ai un fichier bat qui permet de propager sur le poste depuis lequel le fichier bat est lancé.
Un fichier bat pour sauvegarder les fichier locaux sur le serveur et un fichier restoration des fichier locaux par la sauvegarde du serveur.
Ce qui me permet de propager rapidement des amélioration avec nouvelles macro pour tous.
Avant je passais par la même barre d’outil @maclane (mais le service informatique avait bloqué l’installation de logiciel de source pas assez connu!)
Pour le code du fichier bat pour copier du reseau vers le local:

Echo Message > log.txt
Echo Message >> log.txt
chcp 65001
Echo "Fermer Solidworks puis appuyer sur entrée"
pause
cd %LOCALAPPDATA%\Visiativ\myCADtools\CustomToolbar
ren "%LOCALAPPDATA%\Visiativ\myCADtools\CustomToolbar" "CustomToolbar save-%date:/=-%" 
xcopy "Z:\XXX\xxx\Solidworks\Configuration\CustomToolbar\Sauvegarde Profil\Profil-SW2023\" "%LOCALAPPDATA%\Visiativ\myCADtools\CustomToolbar" /e /i /c /h /y > "Z:\XXX\xxx\Solidworks\Configuration\CustomToolbar\log.txt

Edit: Je viens de faire une demande de développement via Visiativ pour avoir un chemin de sauvegarde sur réseau et restauration via un fichier de sauvegarde, pour cet utilitaire.

2 « J'aime »

… Ils t’on répondu sur ce développement ? J’en avais fais la demande aussi il y à quelques années…sans réponses.

Même chose @Maclane , j’ai refais une nouvelle demande avant d’écrire l’édit.
En groupant nos demande cela passera peut-être!
Et si @fmarchand par exemple peut appuyer la demande ce serais encore mieux!
Exemple du logiciel concurrent, qui me semble top sur ce point:

1 « J'aime »