bonjours a tous
j'ai un combobox CBmois dans mon ruban personnalisé qui déclenche un évènement on change en vba
dans cet évènement je voudrais cliquer sur le control" Gallery01" qui est aussi dans le ruban et dans le même group
est ce possible ???
bonjours a tous
j'ai un combobox CBmois dans mon ruban personnalisé qui déclenche un évènement on change en vba
dans cet évènement je voudrais cliquer sur le control" Gallery01" qui est aussi dans le ruban et dans le même group
est ce possible ???
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 Patrick,
Ta demande n'a pas d'intérêt. Il te suffit de déclencher la procédure qui aurait été déclenchée par clic sur un élément de la galerie...
"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...
---------------
Salut,
c'Est quoi l'intérêt si tu peux appeler le VBA directement ?
edit : pardon téléscopage...
Cycle de vie d'un bon programme :
1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise
Pas de question technique par MP, je ne réponds pas
Mes ouvrages :
Apprendre à programmer avec Access 2016, Access 2019 et 2021
Apprendre à programmer avec VBA Excel
Prise en main de Dynamics 365 Business Central
Pensez à consulter la FAQ Excel et la FAQ Access
Derniers tutos
Excel et les paramètres régionaux
Les fichiers Excel binaires : xlsb,
Autres tutos
Pô grave... Ca enfonce le clou ... Ceci dit, je pressens le besoin de Patrick, qui résulte d'une mauvaise architecture de code.
@Patrick:
Au passage, comme ça...
https://silkyroad.developpez.com/excel/ruban/
https://arkham46.developpez.com/arti...s/rubanimages/
https://arkham46.developpez.com/arti...sistant-ruban/
https://www.developpez.net/forums/re...ess%2Fruban%2F
Il me semble que ça couvre largement le sujet.
"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...
---------------
et ben non justement vous etes hâté un peu trop a mon avis ,le clou c'est en dessous votre pieds car le bouton que je veux cliqué je le redis est un controls gallery
je répète donc plus clairement
j'ai un control combobox CBMOIS (les 12 mois de l'année) qui déclenche son callbacks onchange
dans cet évènement je souhaiterais cliquer sur la gallery juste pour qu'elle se développe
est ce que c'est plus clair ?
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
Toujours tes réactions à l'emporte-pièce où tu prends ceux qui souhaitent t'aider pour des débiles... Le clou n'est pas dans notre soulier mais dans le tien.
Les fonctions CallBack ne peuvent rien faire d'autre que d'appeler une procédure "normale" en VBA. Autrement dit, ce que tu inities par un clic sur le ruban et l'appel de la fonction callback correspondante, tu dois pouvoir le lancer directement du VBA. Si tu mets du code "qui exécute quelque chose" dans une fonction CallBack, tu ne pourras forcément l'appeler que par action sur le contrôle du ruban, puisqu'elle doit recevoir le contrôle sur lequel tu as cliqué (C'est le mécanisme même du callback que tu dois comprendre si tu veux pouvoir manipuler le ruban de façon dynamique).
Ainsi, si tu dois "simuler" le clic sur le bouton, tu appelles la procédure appelée par la fonction CallBack.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Sub ProductShowCategories(control As IRibbonControl) ShowCategories control.Id End Sub Sub ShowCategories(CategorieID As Long) ... ... End Sub
Cela dit, je pense qu'il n'existe pas de fonction CallBack pour ouvrir une galerie => Liste des fonctions CallBack
"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 je prend personne pour des debilles
pour etre plus clair encore
ma gallery n'a que pour callback getItemCount-->Nbjour et getItemLabel --> Labeljour et il servent simplement a modifier les données a l'intérieur
mais en aucun cas a la développer(dans le doute j'ai testé )
hors c'est la développer automatiquement l'ors du onchange de la combo qui m'intéresse et non le .onction déclenché par le clic sur un de ses items(ca c'est pour plus tard)
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="RibbonSet"> <ribbon> <tabs> <tab id="test" label="test" > <group id="Calendrier" label="Calendrier"> <gallery id="gallery01" size="large" imageMso="StartAfterPrevious" label="Calendar" columns="7" getItemCount="Nbjour" showItemLabel="true" getItemLabel="Labeljour" <!-- onAction="Selectionjour" --> </gallery> <comboBox id="CBmois" label="mois" onChange="ChangeCBmois" > <item id="i1" label="janvier" /> <item id="i2" label="février" /> <item id="i3" label="mars" /> <item id="i4" label="avril" /> <item id="i5" label="mai" /> <item id="i6" label="juin" /> <item id="i7" label="juillet" /> <item id="i8" label="août" /> <item id="i9" label="septembre" /> <item id="i10" label="octobre" /> <item id="i11" label="novembre" /> <item id="i12" label="décembre" /> </comboBox> </group> </tab> </tabs> </ribbon> </customUI>
les callback
alors est ce possible ou pas ?
Code : 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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 Option Explicit Public MonRuban As IRibbonUI Dim Usf As Object Public calendar As IRibbonControl Public mois As Long 'Callback for customUI.onLoad 'Est déclenché lors du chargement du ruban personnalisé. Sub RibbonSet(ribbon As IRibbonUI) Set MonRuban = ribbon End Sub 'Callback for gallery01 getItemCount Sub Nbjour(control As IRibbonControl, returnedVal) Set calendar = control returnedVal = 49 End Sub 'Callback for gallery01 getItemLabel Sub Labeljour(control As IRibbonControl, index As Integer, returnedVal) Dim d, nextday, r, arrjour arrjour = Array("Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim") If mois = 0 Then mois = Month(Date) If index + 1 > 7 Then d = Weekday(DateSerial(2019, mois, 1), vbMonday) nextday = Day(DateSerial(2019, mois + 1, 0)) If (index + 1) >= d + 7 Then r = Format(index + 1 - d - 6, "#00") Else r = "-" If (index + 1) > nextday + d + 6 Then r = "-" returnedVal = r Else returnedVal = arrjour(index) End If End Sub 'Callback for gallery01 getItemCount Sub changecbmois(control As IRibbonControl, returnedVal) mois = Month(DateValue("01/" & returnedVal & "/2019")) MonRuban.InvalidateControl "gallery01" End Sub
pour ceux qui voudrais tester avec execel superieur a 2007
n'oubliez pas de modifier le rel aussi en conséquence
Code : Sélectionner tout - Visualiser dans une fenêtre à part <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="RibbonSet">
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
A mon avis non, puisqu'il n'y a pas de callback permettant de déployer la galerie, et c'est normal que ça n'existe pas. Tu as un problème d'ergonomie si tu veux déployer une galerie par code à la place de l'utilisateur. Le ruban n'a pas la vocation que tu veux lui attribuer. Utilise une boite de dialogue à la place. Je pense vraiment que le ruban n'est pas fait pour ce que tu souhaites réaliser.
"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
c'est dommage mon défit c'est justement de virer pas mal d'userform de certaine de mes app j'ai assez fait mumuse avec
je garde le stricte nécessaire ou quand je peux pas ou sais pas faire autrement
au pire tant pis je développerais manuellement c'était un + que j'aurais bien aimé
j'ai bien vu quelques solutions avec api mais ca vaut pas le coup pour ca
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
Comme je le dis précédemment, c'est alors un problème d'ergonomie. Le ruban n'a pas du tout pour vocation de remplacer des boites de dialogue qui, bien construites (!), ont parfaitement leur place dans une appli professionnelle. Le ruban ne sert qu'au pilotage par l'utilisateur. Il permet beaucoup moins de souplesse qu'une boite de dialogue en termes d'écoute des événements des contrôles.
Ca n'a pas beaucoup de sens pour moi d'essayer de remplacer des userform par des contrôles de ruban... C'est juste mon avis, ceci dit.
"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...
---------------
Bonjour,
Je m'interroge également sur le fait de mettre un calendrier dans le ruban.
Je ne suis pas convaincu que l'ergonomie et la maintenance soit améliorées.
Cependant, si c'est pour s'amuser, on peut utiliser les fonctions d'accessibilité.
Soit avec le gros module de l'article, mais ça fait beaucoup.
Soit en utilisant les fonctions masquées des objets accessibles.
Mais même si c'est un défi technique intéressant, ça reste risqué ne sachant pas comment la structure des rubans évoluera dans les futures versions.
Et côté maintenance c'est un cadeau empoisonné.
Code : 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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 Option Explicit ' Déplie la gallery de label pGallery du groupe de label pGroup de l'onglet actif ' Recherche sur le label dans l'onglet actif Public Function OpenGallery(pGroup As String, pGallery As String) Const ROLE_SYSTEM_PROPERTYPAGE = &H26& Const ROLE_SYSTEM_PANE = &H10& Const ROLE_SYSTEM_BUTTONDROPDOWNGRID = &H3A& Const ROLE_SYSTEM_TOOLBAR = &H16& Dim oRibbon As IAccessible Dim oGroup As IAccessible Dim oGal As IAccessible ' Ribbon Tool Bar Set oRibbon = CommandBars("ribbon") ' Ribbon Property page (recherche récursive) Set oRibbon = FindChildByRoleOrName(oRibbon, , ROLE_SYSTEM_PROPERTYPAGE, True) ' Ruban inférieur = onglet actif Set oRibbon = FindChildByRoleOrName(oRibbon, , ROLE_SYSTEM_PANE) ' Groupe Set oGroup = FindChildByRoleOrName(oRibbon, pGroup, ROLE_SYSTEM_TOOLBAR, True) ' Gallery : recherche récursive, il ne doit pas y avoir d'autres éléments avec le même label dans le même groupe Set oGal = FindChildByRoleOrName(oGroup, pGallery, ROLE_SYSTEM_BUTTONDROPDOWNGRID, True) ' Action par défaut = click Call oGal.accDoDefaultAction(ByVal 0&) End Function ' Fonction privée pour rechercher d'un objet accessible à partir de son parent, son role et son nom Private Function FindChildByRoleOrName(pParent As IAccessible, Optional pChildName As String = "*", Optional pChildRole As String = "*", Optional pRecursif As Boolean = False) As IAccessible Dim lName As String, lRole As Long Dim oChild As IAccessible Const NAVDIR_FIRSTCHILD = &H7& Const NAVDIR_NEXT = &H5& On Error GoTo gestion_erreurs Do If oChild Is Nothing Then Set oChild = pParent.accNavigate(NAVDIR_FIRSTCHILD, ByVal 0&) Else Set oChild = oChild.accNavigate(NAVDIR_NEXT, ByVal 0&) End If If pChildName <> "*" Then lName = oChild.accName(ByVal 0&) If pChildRole <> "*" Then lRole = oChild.accRole(ByVal 0&) If lRole Like pChildRole And lName Like pChildName Then Set FindChildByRoleOrName = oChild Exit Do End If If pRecursif Then Set FindChildByRoleOrName = FindChildByRoleOrName(oChild, pChildName, pChildRole, pRecursif) If Not FindChildByRoleOrName Is Nothing Then Exit Do End If Loop gestion_erreurs: If Err.Number <> 0 Then Set FindChildByRoleOrName = Nothing End If End Function
Assistant de création/modification de rubans Office
Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL
Blog Office Mon Site DVP
ah!!!
bonjour ArkHam
je vais regarder ca de plus près j'ai trouvé quelques exemple en effet mais c'est hard, ta méthode juste en aperçu rapide me semble beaucoup moins
oui en effet l'exercice lui même est tout aussi important et amusant pour moi a ce stade du développement rien n'est définitif
c'est quand même étonnant que un ".exécute " comme pour les msocontrol des commandbars n'est pas été prévu pour les controls ruban
Merci
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
re
oRibbon=nothing
oGroup=nothing
oGal=nothing
j'ai tenté par le ID et le label
j'ai téléchargé le pack zip sur le lien pour observer le listing events avec le accExplorer.exe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 'OpenGallery "Calendrier", "Calendar"' by label OpenGallery "Calendrier", "gallery01",by ID y a t il une référencé a activer ?
et malheureusement mon antivirus l'a shunté et détruite le zip complet
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
C'est bien ce je pensais, pas facile d'adapter ce genre de code à toutes les versions.
Pas besoin de référence particulière, juste Microsoft Office x.xx Object Library pour l'objet IAccessible, mais sinon ça ne compilerait pas.
Si tu n'arrives pas à télécharger le zip, essaye de prendre juste accExplorer32.exe
J'ai pris quelques raccourcis avec certaines recherches récursives.
Par exemple pour trouver l'objet de rôle ROLE_SYSTEM_PROPERTYPAGE.
Sur mon PC il trouve le bon, tu as peut-être plusieurs ROLE_SYSTEM_PROPERTYPAGE sur ton ruban.
Pour être sûr il faut descendre niveau par niveau, sans recherches récursives ou bien ciblées, mais c'est un peu pénible de trouver le rôle de chaque enfant jusqu'à celui qu'on cherche ; et il ne faut pas que l'arborescence d'objets change ensuite.
Sinon prendre un gros raccourci :
Chercher directement un ROLE_SYSTEM_TOOLBAR du nom du groupe (il ne devrait pas y en avoir plusieurs) :
Ou au pire chercher directement la galerie sans passer par le groupe.
Code : 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 ' Déplie la gallery de label pGallery du groupe de label pGroup de l'onglet actif ' Recherche sur le label dans l'onglet actif Public Function OpenGallery(pGroup As String, pGallery As String) Const ROLE_SYSTEM_BUTTONDROPDOWNGRID = &H3A& Const ROLE_SYSTEM_TOOLBAR = &H16& Dim oRibbon As IAccessible Dim oGroup As IAccessible Dim oGal As IAccessible ' Ribbon Tool Bar Set oRibbon = CommandBars("ribbon") ' Groupe Set oGroup = FindChildByRoleOrName(oRibbon, pGroup, ROLE_SYSTEM_TOOLBAR, True) ' Gallery : recherche récursive, il ne doit pas y avoir d'autres éléments avec le même label dans le même groupe Set oGal = FindChildByRoleOrName(oGroup, pGallery, ROLE_SYSTEM_BUTTONDROPDOWNGRID, True) ' Action par défaut = click Call oGal.accDoDefaultAction(ByVal 0&) End Function
Assistant de création/modification de rubans Office
Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL
Blog Office Mon Site DVP
re
non toujours pareil
les 3 sont nothing
j'en tenter par le id et le label au cas ou
de toute Facon c'est le ribbon au départ qui est nothing donc le reste ne peut pas suivre
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
Je ne suis pas sûr que la commandbars s'appelle ribbon sur toutes les configs
Assistant de création/modification de rubans Office
Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL
Blog Office Mon Site DVP
chez moi 2007 oui mais le "R" en majuscule c'est peut être ca je vais tester
édit : tester non c'est pas ca
re edit par contre l'erreur commence a group maintenant donc oribbon est bon
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
Ton fichier Patrick tel testé chez moi (Excel 2013 Fr)
Cordialement.
J'utilise toujours le point comme séparateur décimal dans mes tests.
vue sur les variables locales
le group et le controls ne sont pas captés
est il possible de convertir une variable object en variable IAccessible
car je peux me servir de calendar qui est un object et est défini comme le controls dans mon code dans le callback nbjour
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
re
a bon sur 2013 il fonctionne comme tel ?????
a ben ca alors !!!?????
32 bit ou 64
parce que la on a un soucis
jusqu'à présent tout ce qui on testé mes ruban sur version autre que 2007 avec"
n'affichait pas le ruban
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
il fallait mettre
et pareil dans le rel la modif devait être fait
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
c'est pour ca que j'ai 2 customUI.xml dans plusieurs de mes fichiers avec le double Relationship bien sur dans le rel
je pige plus rien la
a ben mince alors ca marche chez les autres pas chez moi
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager