Bonjour à tous,
Je souhaiterais trouver, s'il existe, le code VBA qui permet de simuler un clic sur un des boutons du Ruban. Savez-vous si cela est possible ?
Merci
Bonjour à tous,
Je souhaiterais trouver, s'il existe, le code VBA qui permet de simuler un clic sur un des boutons du Ruban. Savez-vous si cela est possible ?
Merci
bonjour
exemple je clique sur le bouton souligné
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Sub testcliccmbCtrl() CommandBars.FindControl(ID:=115).Execute End Sub
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer :: ça peut servir aux autres
et n'oublie pas de voter
Salut.
Il faut remplacer IdMso par l'identifiant du bouton du ruban. Tu peux connaître l'identifiant d'un bouton du ruban via Fichier/Options/Personnaliser le ruban, puis passer la souris sur le bouton souhaité dans une des deux listes. L'IdMso du bouton apparaîtra en infobulle.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Application.CommandBars.ExecuteMso IdMso
Par exemple, si tu veux ajouter un segment sur un tableau structuré, tu peux utiliser Application.CommandBars.ExecuteMso "TableSlicerInsert"
Il est préférable d'utiliser ExecuteMso plutôt que la méthode de Patrick qui ne fonctionne pas pour tous les contrôles du ruban. Par exemple, pour placer un segment sur un tableau structuré, tu peux utiliser CommandBars.FindControl(id:=24998).Execute (encore faut-il connaître l'ID...), mais si tu veux "cliquer" sur "Lignes à bande" pour mettre/enlever l'alternance de couleurs sur les lignes d'un tableau structuré, tu devras utiliser Application.CommandBars.ExecuteMso "TableStyleBandedRows", car CommandBars.FindControl(id:=12480).Execute ne fonctionne pas et lève une exception.
Sur https://www.microsoft.com/en-us/down....aspx?id=50745, tu peux télécharger un zip contenant une kyrielle de fichiers Excel reprenant les Noms des contrôles et leurs ID numériques.
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
re
@pierre
Attention tout de meme en cas de ribbon custom au controls qui reprennent les idmso de controls existants dans le xml ( a tester)
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer :: ça peut servir aux autres
et n'oublie pas de voter
Ben, teste-le, alors, au lieu de venir soulever un problème qui n'existe pas
La question initiale porte sur le fait d'activer par vba des actions du ruban. Ton code déclenche a priori l'action d'un contrôle de commandbar. Tu es donc encore une fois hors sujet! Dès lors, il me semble normal d'utiliser ExecuteMso.
Si tu crées un bouton en lui attribuant un idMso, l'action qui sera réalisée sera identique à celle du bouton original. Un OnAction est inopérant sur un bouton créé en utilisant un idMso.
Si tu rediriges l'action d'un bouton "natif" avec une commande dans le xml de ton ruban personnalisé, le bouton "natif" lancera l'action que tu as redéfinie.
Tu ne peux pas avoir plusieurs boutons avec des idMso identiques qui agiraient de manière différente, ça mettrait à mal la définition même d'un ID, il me semble.
Si tu rediriges l'action d'un idMso sur une procédure perso (possible en utilisant les noeuds Commands et Command dans le xml de ton ruban perso), le bouton qui utilise cet idMso lancera ta procédure perso, que ce soit par clic dans Excel ou par ExecuteMso en VBA.
Bref, je ne comprends pas bien le sens de ta remarque et n'en saisis pas la pertinence![]()
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
re
Pierre
exemple de copie dans un autre
il me semble que ca embarque tout non?
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon startFromScratch="false"> <tabs> <!-- Ajoute un nouvel onglet nommé OngletPerso --> <tab id="OngletPerso" label="Mes fonctions préférées" visible="true"> <!-- Ajoute le groupe standard 'bibliothèque de fonctions' --> <group idMso="GroupFunctionLibrary" /> </tab> </tabs> </ribbon> </customUI>
j'ai deux classeurs dans le quel j'ai copié le groupe des outils texte du tabhome dans mon onglet perso et je n'ai rien ajouté les fonctions sont opérantes
je testerais demain a l'atelier
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer :: ça peut servir aux autres
et n'oublie pas de voter
Ben oui ça embarque tout, et alors? Que cherches-tu à tester ou à prouver par là? Que n'as-tu pas compris dans mon message précédent?
Dit autrement: Les boutons qui ont le même idMso enclenchent la même action.. Ca saurait difficilement être plus clair. Ca dit quand même bien que tu peux avoir plusieurs boutons avec le même idMso mais ils lanceront forcément la même action. Qu'est-ce que tu ne comprends pas dans cette phrase?
Dans le classeur test-ruban, j'utilise le ruban perso suivant:
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon startFromScratch="false"> <tabs> <tab id="dvp" visible="true" label="DVP"> <group id="groMso" visible="true" label="tests"> <button idMso="TableSlicerInsert" size="normal" visible="true" /> </group> <group id="groMso1" visible="true" label="tests 1"> <button idMso="TableSlicerInsert" onAction="PersoSlicer" size="normal" visible="true" /> </group> </tab> </tabs> </ribbon> </customUI>
En allant sur l'onglet DVP du ruban, il y a donc deux groupes contenant chacun un bouton TableSlicerInsert. Dans le groupe groMso1, j'ai renseigné un onAction, mais, comme je l'ai déjà dit, OnAction est inopérant sur les idMso. Si tu es dans le tableau et que tu cliques sur un de ces boutons, ou sur le bouton natif d'insertion d'un segment du tab "Création tableau", ou sur le même bouton placé sur la barre d'accès rapide, tu pourras insérer un segment. Il en va de même si tu lances la macro SimulateMso => logique.
Dans le classeur test-ruban-1, je redirige l'action de TableSlicerInsert grâce au ruban qui utilise une redirection de commande:
Dans CE classeur, TabSlicerInsert est redirigé vers la procédure Test. Que tu cliques sur le bouton natif, sur un des boutons présents dans l'onglet DVP ou sur le bouton d'ajout d'un segment que tu aurais mis sur la barre d'accès rapide, tu déclencheras la procédure Test. Idem si tu lances la macro SimulateMso de ce fichier (ça n'a évidemment pas de sens de faire cela, ceci dit).
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <commands> <command idMso="TableSlicerInsert" onAction="Test" /> </commands> <ribbon startFromScratch="false"> <tabs> <tab id="dvp" visible="true" label="DVP"> <group id="groMso" visible="true" label="tests"> <button idMso="TableSlicerInsert" size="normal" visible="true" /> </group> <group id="groMso1" visible="true" label="tests 1"> <button idMso="TableSlicerInsert" onAction="PersoSlicer" size="normal" visible="true" /> </group> </tab> </tabs> </ribbon> </customUI>
De plus, sauf à créer un ruban FromScratch, ça n'a pour moi pas de sens d'embarquer tout un groupe MSO dans un onglet perso.
Je rappelle qu'au départ, tu parles de Application.CommandBars.FindControl(id:=...).Execute qui n'est pas une réponse valide puisque le demandeur parle expressément du ruban => Application.CommandBars.ExecuteMso ...
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Partager