patricktoulon
XLDnaute Barbatruc
Bonsoir à tous
j'aimerais bien trouver ce qui ne va pas dans ma fonction de récupération du ruban là ca me crasch excel
j'aimerais bien trouver ce qui ne va pas dans ma fonction de récupération du ruban là ca me crasch excel
VB:
'callback created by [[''creatorRibbonX'']]
'[createRibbonX Application] created by (''patricktoulon'')
'Version 2024 5.2
'POUR MEMO 4 fonctions importantes à connaitre pour les controls dynamiques
'L 'objet IRibbonUI possède 4 méthodes :
'1° myribbon.Invalidate() qui actualise en une seule fois tous les contrôles personnalisés du classeur.
'2° myribbon.InvalidateControl("Id du control") qui actualise un contrôle particulier (ControlID correspond à l'identificateur unique du contrôle).
'3° myRibbon.ActivateTab ("id de l'onglet à activer")qui active l'onglet désigné par son ID dans les parenthèses
'4° myRibbonInvalidateControlMso ("Id de l'element"(onglet/group/control) )qui actualise l'element désigné par son ID dans les parenthèses
'Nom du projet:[C:\Users\patricktoulon\Desktop\CreatorRibbonX V4.9 et V5.0\creatorRibbonX 4.9.9.X\Project_switch_onglet_developer_visible\exemple.xml]
'créé le:[29/12/2024]
Public myRibbon As IRibbonUI ' {Variable pour l'object ribbon}
Public boolbool As Boolean
#If VBA7 Then
Public Declare PtrSafe Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As LongPtr)
#Else
Public Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
#End If
Sub KILLRIBBON()
Set myRibbon = Nothing
End Sub
Function GetSavedRibbon() As IRibbonUI
Dim objRibbon As IRibbonUI
Dim iRibbonPointer As LongPtr
On Error GoTo erreur
lRibbonPointer = CLngPtr(Replace(Names("NhRibbon").Value, "=", ""))
CopyMemory objRibbon, lRibbonPointer, LenB(lRibbonPointer)
Set GetSavedRibbon = objRibbon
CopyMemory objRibbon, 0&, LenB(lRibbonPointer)
Set objRibbon = Nothing
Exit Function
erreur:
Err.Clear: MsgBox " L application n'a pas pu recuper le ruban" & vbCrLf & " Vous devez redemarrer l application": On Error GoTo 0: End
On Error GoTo 0
End Function
'**********************************************
'utilisation avant de faire un des 4 invalidate dans vos events dynamique
'If myRibbon is nothing then set myRibbon=GetSavedRibbon
'**********************************************'Callback pour l' event customUI.onLoad
Sub CustomUIOnLoad(ribbon As IRibbonUI)
Set myRibbon = ribbon
ActiveWorkbook.Names.Add Name:="NhRibbon", RefersTo:=ObjPtr(myRibbon)
End Sub
'l'event ribbon Load_Image
Public Sub Ribbon_loadImage(imageId As String, ByRef image)
Set image = LoadPicture(ThisWorkbook.Path & "\images\" & imageId)
End Sub
'procedure {getvisible} du tab [idMso :''TabDeveloper''] []'dans le parent [tabs '' ]
'valeur par defaut
Sub TabBuild_Getvisible(control As IRibbonControl, ByRef returnedVal)
returnedVal = boolbool
End Sub
'procedure {onAction} du bouton [ID:''button_1'' Label:''onglet developpeur'']'dans le parent [group_0'' Label:''Groupe N° 1'']
Sub onglet_developpeur_Click(control As IRibbonControl)
boolbool = Not boolbool
If myRibbon Is Nothing Then Set myRibbon = GetSavedRibbon
myRibbon.InvalidateControlMso ("TabDeveloper")
End Sub