Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

ID d'un bouton dans le ruban

10 réponses
Avatar
Roland Miller
Bonjour,

Par VBA je cherche =C3=A0 savoir le ID d'un bouton dans un menu.

Par exemple =E2=80=A6 Dans le menu Insertion et dans la section Tableaux =
=E2=80=A6 il y a le bouton Tableau avec son image.

Je recherche le ID de ce bouton.

En Excel et dans des versions ant=C3=A9rieures =E2=80=A6 j'utilisais du cod=
e tel que MsgBox (Application.CommandBars(Nom ou X=C3=A8me).Controls(Nom ou=
le X=C3=A8me).ID)

Mais maintenant =E2=80=A6 si je comprend bien =E2=80=A6 il y a le Ruban, le=
s menus, les sous-menus et les boutons. J'ai vraiment cherch=C3=A9 =E2=80=
=A6 tent=C3=A9 avec l'enregistreur de macros mais sans succ=C3=A8s.

Sauriez-vous comment faire?

Merci =C3=A0 l'avance.

10 réponses

Avatar
Péhemme
Bonjour,
Depuis Excel 2007, il n'est plus possible (où je n'ai jamais trouvé) de
connaître l'ID d'un bouton 'natif' du ruban, seules le nom des images
(imageMso) peuvent être connues via :
Fichier/Personnaliser le ruban, en pointant la souris sur le nom sur
l'icône.
En revanche, si tu parles d'un ruban que tu as créé, tu n'as pas d'autres
moyens que de retourner dans le 'xml' et repérer le nom que tu lui as donné.
Je n'ai pas été d'une grande aide...
J'espère qu'un gourou te donneras une réponse plus satisfaisante.
Bonne journée
Michel
"Roland Miller" a écrit dans le message de groupe de discussion :
Bonjour,
Par VBA je cherche à savoir le ID d'un bouton dans un menu.
Par exemple … Dans le menu Insertion et dans la section Tableaux … il y a le
bouton Tableau avec son image.
Je recherche le ID de ce bouton.
En Excel et dans des versions antérieures … j'utilisais du code tel que
MsgBox (Application.CommandBars(Nom ou Xème).Controls(Nom ou le Xème).ID)
Mais maintenant … si je comprend bien … il y a le Ruban, les menus, les
sous-menus et les boutons. J'ai vraiment cherché … tenté avec l'enregistreur
de macros mais sans succès.
Sauriez-vous comment faire?
Merci à l'avance.
Avatar
Péhemme
J'ai lu trop rapidement ton message.
Je confirme ce que j'ai écrit sur l'ID du bouton, en revanche, pour celui
qui t'intéresse, son imageMso est : TableInsertExcel
Si tu veux l'utiliser dans un ruban que tu développes, c'est ce nom que tu
dois prendre (l'id, c'est toi qui le donne).
Michel
"Roland Miller" a écrit dans le message de groupe de discussion :
Bonjour,
Par VBA je cherche à savoir le ID d'un bouton dans un menu.
Par exemple … Dans le menu Insertion et dans la section Tableaux … il y a le
bouton Tableau avec son image.
Je recherche le ID de ce bouton.
En Excel et dans des versions antérieures … j'utilisais du code tel que
MsgBox (Application.CommandBars(Nom ou Xème).Controls(Nom ou le Xème).ID)
Mais maintenant … si je comprend bien … il y a le Ruban, les menus, les
sous-menus et les boutons. J'ai vraiment cherché … tenté avec l'enregistreur
de macros mais sans succès.
Sauriez-vous comment faire?
Merci à l'avance.
Avatar
MichD
Bonjour,
Sur ce site, tu trouveras tous les explications et fichiers exemples à
télécharger sur le ruban d'Excel. (en anglais)
https://www.rondebruin.nl/win/section2.htm
MichD
Avatar
Roland Miller
Bonjour. Merci. J'ai lu attentivement ce dont vous m'avez référ é.
Mais je me pose tout de même une question.
Manuellement … Dans Personnaliser le ruban … je suis arriv é à créer un onglet avec un groupe et aussi à ajouter u n bouton relié à une de mes macros. Mais … ceci demeure d ans tous les classeurs à moins de manuellement aller le décocher ou supprimer par la suite.
Mon besoin est de désactiver ou supprimer ce nouvel onglet si je chang e de classeur. N'y a-t'il pas du code pour faire ceci? L'enregisteur de mac ro ne donne rien pour ceci???
Bien sûr aussi j'aimerais réactiver l'onglet si je reviens dans c e classeur.
Merci à l'avance,
Avatar
MichD
Le 22/01/20 à 09:48, Roland Miller a écrit :
Bonjour. Merci. J'ai lu attentivement ce dont vous m'avez référé.
Mais je me pose tout de même une question.
Manuellement … Dans Personnaliser le ruban … je suis arrivé à créer un onglet avec un groupe et aussi à ajouter un bouton relié à une de mes macros. Mais … ceci demeure dans tous les classeurs à moins de manuellement aller le décocher ou supprimer par la suite.
Mon besoin est de désactiver ou supprimer ce nouvel onglet si je change de classeur. N'y a-t'il pas du code pour faire ceci? L'enregisteur de macro ne donne rien pour ceci???
Bien sûr aussi j'aimerais réactiver l'onglet si je reviens dans ce classeur.
Merci à l'avance,

Bonjour,
Le plus simple, au début de ta macro, tu inscris ceci :
'----------------------
If Ucase(activeworkbook.name)= Ucase("NomDuClasseur.xlsm" then
'Ton code
Else
Msgbox "Cette action n'est pas disponible dans ce classeur."
End if
'----------------------
MichD
Avatar
MichD
Le 22/01/20 à 10:27, MichD a écrit :
Le 22/01/20 à 09:48, Roland Miller a écrit :
Bonjour. Merci. J'ai lu attentivement ce dont vous m'avez référé.
Mais je me pose tout de même une question.
Manuellement … Dans Personnaliser le ruban … je suis arrivé à créer un
onglet avec un groupe et aussi à ajouter un bouton relié à une de mes
macros. Mais … ceci demeure dans tous les classeurs à moins de
manuellement aller le décocher ou supprimer par la suite.
Mon besoin est de désactiver ou supprimer ce nouvel onglet si je
change de classeur. N'y a-t'il pas du code pour faire ceci?
L'enregisteur de macro ne donne rien pour ceci???
Bien sûr aussi j'aimerais réactiver l'onglet si je reviens dans ce
classeur.
Merci à l'avance,

Bonjour,
Le plus simple, au début de ta macro, tu inscris ceci :
'----------------------
If Ucase(activeworkbook.name)= Ucase("NomDuClasseur.xlsm" then
   'Ton code
Else
    Msgbox "Cette action n'est pas disponible dans ce classeur."
End if
'----------------------
MichD

Ouais, que se passe-t-il si tu modifies le nom du classeur? Une autre
approche simple, tu crées un nom dans la collection "Name" en vba auquel
tu attribues une valeur particulière.
Pour créer le "NOM" invisible par l'interface de calcul :
Remplace toto par un nom plus rare et original.
Cette ligne de code doit s'exécuter seulement une fois après quoi, tu
peux la supprimer.
Names.Add "toto", "MonFichierParticulier", False
Maintenant dans la petite procédure que je t'ai soumise, tu remplaces
par ceci :
If Ucase([toto])= Ucase("MonFichierParticulier" then
'Ton code
Else
Msgbox "Cette action n'est pas disponible dans ce classeur."
End if
Maintenant, même si le classeur change de nom, cela n'altèrera pas ta
procédure.
MichD
Avatar
Roland Miller
Encore merci.
Mais … pas de problèmes pour gérer le classeur. MOn probl ème est que je ne sais pas quel code utiliser? 'Ton code.
Quel code utiliser pour désactiver l'onglet et/ou le Groupe dans l'Ong let?
If Ucase([toto])= Ucase("MonFichierParticulier" then
'Ton code
Else
Msgbox "Cette action n'est pas disponible dans ce classeur."
End if
Avatar
MichD
Le 22/01/20 à 10:52, Roland Miller a écrit :
Encore merci.
Mais … pas de problèmes pour gérer le classeur. MOn problème est que je ne sais pas quel code utiliser? 'Ton code.
Quel code utiliser pour désactiver l'onglet et/ou le Groupe dans l'Onglet?
If Ucase([toto])= Ucase("MonFichierParticulier" then
'Ton code
Else
Msgbox "Cette action n'est pas disponible dans ce classeur."
End if

Les 2 suggestions faites ne désactivent pas ou active une commande. Il
limite simplement l'action de cette macro à ce classeur spécifique. Où
j'ai écrit ton code, c'est le code de ta macro, c'est tout.
Sinon, tu dois consulter le site internet que je t'ai suggéré et
apprendre à construire un menu particulier pour un classeur.
L'apprentissage prend un certain temps... moi, je n'interviens pas sur
ce sujet particulier.
MichD
Avatar
MichD
Le 22/01/20 à 10:52, Roland Miller a écrit :
Encore merci.
Mais … pas de problèmes pour gérer le classeur. MOn problème est que je ne sais pas quel code utiliser? 'Ton code.
Quel code utiliser pour désactiver l'onglet et/ou le Groupe dans l'Onglet?
If Ucase([toto])= Ucase("MonFichierParticulier" then
'Ton code
Else
Msgbox "Cette action n'est pas disponible dans ce classeur."
End if

Une autre alternative est de créer une barre d'outils personnalisée qui
apparait dans le menu "Complément" du ruban. Pour ce faire, tu peux
utiliser la manière de code dans les anciens classeurs d'avant 2007.
Je te donne un exemple de code. Cette barre d'outils peut être créée par
les événements dans le thisworkbook de ton classeur :
à copier dans le ThisWorkbook
'------------------------------------
Private Sub Workbook_Activate()
Creer_Barre_Menu
End Sub
'------------------------------------
Private Sub Workbook_Deactivate()
supprimer_Ma_Barre
End Sub
'------------------------------------
Ce qui suit :
Dans un module standard, le code implique que le nom du module est
module1. Tu peux le modifier si tu places ce code dans un module ayant
un autre nom.
'------------------------------------
Sub Creer_Barre_Menu()
Dim Mbar As CommandBar
On Error Resume Next
Call Application.CommandBars("MichD").Delete
Set Mbar = Application.CommandBars.Add("MichD")
With Mbar
.Visible = True
.Position = msoBarTop
End With
With Mbar.Controls
With .Add
.Style = msoButtonIconAndCaption
.Caption = "Ok1"
.Style = msoButtonIconAndCaption
.OnAction = "Module1.MaMacro"
'Utiliser une image déjà dans la feuille comme image
'sur ton bouton de commande.
'Nom de la feuille et l'image où se retrouve l'image
'Feuil1 n'est pas le nom de l'onglet de la feuille
'mais la propriété Name
'Worksheets("Feuil1").Shapes("MichD1").Copy
'Pour utiliser l'image d'un bouton existant
'.FaceId = 19
'.PasteFace
End With
With .Add
.Style = msoButtonIconAndCaption
.Caption = "Ok2"
.Style = msoButtonIconAndCaption
.OnAction = "Module1.MaMacro1"
Feuil1.Shapes("MichD2").Copy
' .FaceId = 27
.PasteFace
End With
End With
End Sub
'------------------------------------
Sub supprimer_Ma_Barre()
Application.CommandBars("MichD").Delete
End Sub
'------------------------------------
MichD
Avatar
Roland Miller
Encore un grand merci. Je comprend bien.
J'utilise depuis plusieurs années et je maîtrise bien tout ce qui concerne Sub Creer_Barre_Menu().
Mais alors … je cherchais à savoir le ID des images des bouton s pour utiliser des … nouveaux boutons … dont je n'ai pas l e ID. (Controls.ID et/ou FaceID) À l'époque de 2003 … je réussissais.
J'ai viens de trouver ce que je cherchais et si ça peut aider quelqu'u n … tant mieux. Voici le lien : https://fring.developpez.com/vba/ex cel/faceid/#L1.1