XL 2021 Afficher une palette de 10 couleurs dans le ruban

  • Initiateur de la discussion Initiateur de la discussion Dudu2
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Dudu2

XLDnaute Barbatruc
Bonjour,

J'aimerais afficher une petite palette de 10 couleurs dans le ruban dans un fichier de Macros utilisé en Compléments .xlam.

1747738893337.png


Je sais qu'il y a la ressource de @patricktoulon qui permet d'intervenir dans le Ruban mais partant de zéro, je ne sais pas par quel bout prendre le problème.

Merci par avance pour toute suggestion ou même proposition.
 
Solution
a ben si tu veux tu importe par vba (si tu sais faire)
mais surtout c'est le contenu du xlam qui doit aller dans le sample
étapes
ouvrir le sample
  1. si le xlam n'est pas activer l'ouvrir
  2. transférer le contenu (module et feuille du xla) dans le sample
  3. donner un nom au vbaproject du sample (celui qui ne le fait pas y prend des baffes)
  4. fermer ou déactiver le xla
  5. enregistrer sous
  6. choisir format xlam(le dialogue se positionne sur le dossier des addins )
  7. cliquer sur l'ancien xlam
terminé ton groupe palette est intégré dans ton xlam

et si un jour tu decide un beau dimanche ou n'importe quel jour de la semaine
de modifier ton ruban avec customUi editor ou l'exellent magnifique lumineux creatorRibbonx voici le...
bonjour
bon dudu2 j'ai chercher voir si on pouvait avoir des image (couleur) externe en officeoui avec toute les astuces que je peux connaitre
et finalement non ce n'est pas possible
alors a moins que tu accepte que les icones des bouton ne soient pas la couleur ca ne sera pas possible de les avoir directement dans le ruban en officeUI

maintenant si tu veux je peux te préparer un fichier avec la palette en customUI et tu devra tout transférer de ton xlam dans celui ci et le renommer comme ton xla
alors maintenant je te propose le choix
soit le bouton et le menu
soit tout les boutons dans le rubant en officeUi mais pas d'icone couleur
soit alors le customui et tu aura ce que tu veux
si tu choisi customUI
il te faudra transférer tout de ton xlam dans le sample et sauver le sample en XLAM
demo du customUI créer avec creatorRibbonX AllImages
demo1.gif
 

Pièces jointes

Bonjour,

Alors je vais lire en détail mais juste au niveau test...
- Sample DUDU2 customUI: tout bon ! Peut-être le jaune pas tout jaune ?
1747820838951.png


- palette color dynamique perso customUi v2: colore mais on n'a pas les couleurs
1747820938946.png


- palette color dynamique perso customUi Mixte commandbars(1): toujours le problème sur PasteFace()
1747821072332.png


Donc le 1er me parait bien.
 
Ok donc il faut que je parte de ton classeur Sample pour y transférer tous mes UserForms et Macros, c'est ça ?
On ne peut pas importer dans un .xlsm les éléments de ton classeur Sample, c'est ça ?
Pas mal le dernier !
 
a ben si tu veux tu importe par vba (si tu sais faire)
mais surtout c'est le contenu du xlam qui doit aller dans le sample
étapes
ouvrir le sample
  1. si le xlam n'est pas activer l'ouvrir
  2. transférer le contenu (module et feuille du xla) dans le sample
  3. donner un nom au vbaproject du sample (celui qui ne le fait pas y prend des baffes)
  4. fermer ou déactiver le xla
  5. enregistrer sous
  6. choisir format xlam(le dialogue se positionne sur le dossier des addins )
  7. cliquer sur l'ancien xlam
terminé ton groupe palette est intégré dans ton xlam

et si un jour tu decide un beau dimanche ou n'importe quel jour de la semaine
de modifier ton ruban avec customUi editor ou l'exellent magnifique lumineux creatorRibbonx voici le projet xml
XML:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="CustomUIOnLoad" lang="en">
<!--
CreatorRibbonX All Image 2025 Version 6.7 developed BY patricktoulon
-->
<!--project Ribbon name :pallettecolor_DUDU2-->
<ribbon startFromScratch="false">
<tabs>
<tab idMso="TabHome" visible="true">
<group id="paletteXone" label="palette color">
<button id="button_1" screentip="rouge" image="Rouge.png" tag="255" onAction="ChangeColorCell"/>
<button id="button_2" screentip="jaune" image="Jaune.png" tag="65535" onAction="ChangeColorCell"/>
<button id="button_3" image="Vert.png" screentip="vert" tag="65280" onAction="ChangeColorCell"/>
<button id="button_4" image="Bleu.png" screentip="bleu" tag="15174705" onAction="ChangeColorCell"/>
<button id="button_5" image="Violet.png" tag="14438496" onAction="ChangeColorCell" screentip="Violet"/>
<button id="button_6" image="Orange.png" screentip="Orange" tag="2329968" onAction="ChangeColorCell"/>
<button id="button_7" image="Olive.png" screentip="Olive" tag="2329968" onAction="ChangeColorCell"/>
<button id="button_8" image="Rose.png" screentip="Rose" tag="13811710" onAction="ChangeColorCell"/>
<button id="button_9" image="Gris.png" screentip="Gris" tag="10395294" onAction="ChangeColorCell"/>
<button id="button_10" image="Turquoise.png" screentip="Turquoise" tag="16645413" onAction="ChangeColorCell"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>

je joins le zip du projet
projet que tu peux reprendre avec mon creator ou tout autre editeur ou creator customUI
 

Pièces jointes

peut être déplacer la création de l'image
VB:
Sub afficher_la_palette()
    Dim barre, ColoRx, Noms, i&, ColorXs
    'on reprend les constantes en array
    ColorXs = Array(PaulRouge, Jaune, Vert, Bleu, Violet, Orange, Olive, Rose, Gris, Turquoise)
    'on reprend les constante en noms
    Noms = Array("PaulRouge", "Jaune", "Vert", "Bleu", "Violet", "Orange", "Olive", "Rose", "Gris", "Turquoise")
    'on delete le popup si il existe
    On Error Resume Next
    CommandBars("colorperso").Delete
    On Error GoTo 0
    
    'creation de la barre popup
    Set barre = CommandBars.Add("colorperso", msoBarPopup, False, True)
    'création des bouton du popup
    For i = 0 To UBound(ColorXs)
        With Cells(Rows.Count, Columns.Count)
                .Interior.Color = ColorXs(i)
                .CopyPicture Format:=xlBitmap 'on copie la cellule en picture
            End With
          DoEvents
        With barre.Controls.Add(msoControlButton, 1, , , True)
            .Caption = Noms(i) 'on lui donne son texte de caption
            'on colorie une cellule loin loin loin  avec la couleur index i
              .PasteFace 'on colle l'image au bouton
            .OnAction = "ChangeColorCell" 'on lui donne sa macro au bouton
            .Tag = ColorXs(i) 'on met la couleur dans le tag du bouton
        End With
    Next
    Cells(Rows.Count, Columns.Count).Interior.Color = xlNone 'on nettoie la cellule qui nous a servir a faire les icons de couleur
    barre.ShowPopup 'on affiche le popup
    'le menu s'auto detruit
    On Error Resume Next
    CommandBars("colorperso").Delete
    On Error GoTo 0
End Sub
mais 1000 doevents pour un copy bitmap ça me parait un peu long selon moi ,tu dois avoir un autre problème
rassure moi tu a bien 2016 64 sur w64
 
re il y a visiblement des sa passer avec ce clipboard lourdaud comme pas possible sur les versions récentes d'excel c'est toujours pareil
peut être qu'un jour il va falloir s'y pencher
franchement un bitmap pour une image de 20 sur 20 tout rempli de la même couleur , même pas il clignote chez moi le curseur

en attendant il ne te reste plus que le customUI qui n'a pas de charge clipbord les image sont en png entre 700 octets et 1.2 k
qui pour info ont été créée par vba avec mes fonctions persos images
regarde
demo1.gif

regarde chez moi
demo1.gif
 
a ben si tu veux tu importe par vba (si tu sais faire)
mais surtout c'est le contenu du xlam qui doit aller dans le sample
étapes
ouvrir le sample

  1. si le xlam n'est pas activer l'ouvrir
  2. transférer le contenu (module et feuille du xla) dans le sample
  3. donner un nom au vbaproject du sample (celui qui ne le fait pas y prend des baffes)
  4. fermer ou déactiver le xla
  5. enregistrer sous
  6. choisir format xlam(le dialogue se positionne sur le dossier des addins )
  7. cliquer sur l'ancien xlam
terminé ton groupe palette est intégré dans ton xlam
Je ne comprends rien à cette séquence d'actions qui n'est pas applicable car comment je livre tout ça à une personne extérieure ?

Alors je me suis dit, je vais faire un test parce que si c'est pas plus simple que ça, ça ne sert à rien !
J'ai simplement enregistré le Sample.xlsm en tant que Sample.xlam (qui va donc dans le répertoire des AddIns) et activé le Complément et maintenant la palette apparaît sur tous mes classeurs.

1747839725826.png
 
Dernière édition:
oui bien sur mais c'est un xla d'activé en plus 😉
essai celui la pour la version menu
xlscreen pour diminuer la qualité
essaie aussi en debloquant les attentes isavailableformat
mais bon comme j'estime qu'il n'y a pas de raison valable pour que ça se produises j'ai du mal afair un diag
VB:
'Auteur: patricktoulon
Option Explicit
Declare PtrSafe Function IsClipboardFormatAvailable Lib "user32" (ByVal wFormat As Long) As Long
Declare PtrSafe Function EmptyClipboard Lib "user32" () As Long
Declare PtrSafe Function OpenClipboard Lib "user32" (ByVal hwnd As LongPtr) As Long
Declare PtrSafe Function CloseClipboard Lib "user32" () As Long

Public Const PaulRouge = "255"
Public Const Jaune = 65535
Public Const Vert = 65280
Public Const Bleu = 15174705
Public Const Violet = 14438496
Public Const Orange = 1338847
Public Const Olive = 2329968
Public Const Rose = 13811710
Public Const Gris = 10395294
Public Const Turquoise = 16645413
Public fichier As String
Public fichier2 As String

'ici on va cré le xml pour ajouter le bouton dans l'onglet"Accueil"("TabHome" en customUI)
Sub CreateRibbon()
    Dim DocXmL, CuI, RibbonX, oCreation, BtabS, BtaB, bGrouP, ButtoN
    Set DocXmL = CreateObject("Microsoft.XMLDOM")    'creation
    Set CuI = DocXmL.appendchild(DocXmL.createelement("customUI")) 'creation de balise cusomUI
    'ses attributs
    CuI.setattribute "xmlns", "http://schemas.microsoft.com/office/2009/07/customui"
    CuI.setattribute "onLoad", "CustomUIOnLoad"
    
    Set oCreation = DocXmL.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8"" standalone=""yes""")    'creation de l'entete du process
    DocXmL.InsertBefore oCreation, DocXmL.ChildNodes.Item(0)    'insertion parametre process
    
    Set RibbonX = DocXmL.createelement("ribbon") 'creation de  balise "ribbon"
    CuI.appendchild (RibbonX)
    
    Set BtabS = DocXmL.createelement("tabs") 'creation de la balise tabs(qui contient tout les tab(onglets du ruban)
    RibbonX.appendchild (BtabS)
    
    Set BtaB = DocXmL.createelement("tab"): BtaB.setattribute "idMso", "TabHome" 'creation de balise tab
    BtabS.appendchild (BtaB)
    
    'creation de balise "group"
    Set bGrouP = DocXmL.createelement("group"): bGrouP.setattribute "id", "gColorPerso": bGrouP.setattribute "label", "Palette Color"
    BtaB.appendchild (bGrouP)
    
    'creation de balise button(le bouton)
    Set ButtoN = DocXmL.createelement("button"): ButtoN.setattribute "id", "bColorPerso": ButtoN.setattribute "label", "Afficher Palette Color"
    ButtoN.setattribute "imageMso", "HappyFace" 'choisir l'icon que l'on veux ici
    bGrouP.appendchild (ButtoN)
    'les attribut du bouton
    ButtoN.setattribute "onAction", ThisWorkbook.FullName & "!afficher_la_palette" 'sa macro associée
    ButtoN.setattribute "size", "large" ' style gros bouton
    
    'creation du fichier officeUI
    fichier = Environ("LocalAppData") & "\Microsoft\Office\Excel.officeUI"
    SaveFormatDocToFileXL DocXmL, fichier
    bGrouP.RemoveChild (ButtoN)
    
    Set ButtoN = DocXmL.createelement("button"): ButtoN.setattribute "id", "bColorPerso2": ButtoN.setattribute "label", "Afficher Palette Color"
    ButtoN.setattribute "imageMso", "SadFace" 'choisir l'icon que l'on veux ici
    bGrouP.appendchild (ButtoN)
    'les attribut du bouton
    ButtoN.setattribute "onAction", ThisWorkbook.FullName & "!afficher_la_palette" 'sa macro associée
    ButtoN.setattribute "size", "large" ' style gros bouton
    SaveFormatDocToFileXL DocXmL, fichier
    ForcerMajRuban_OfficeUI
    
    'Debug.Print code
End Sub

Sub afficher_la_palette()
    Dim barre, ColoRx, Noms, i&, ColorXs, cp&
    'on reprend les constantes en array
    ColorXs = Array(PaulRouge, Jaune, Vert, Bleu, Violet, Orange, Olive, Rose, Gris, Turquoise)
    'on reprend les constante en noms
    Noms = Array("PaulRouge", "Jaune", "Vert", "Bleu", "Violet", "Orange", "Olive", "Rose", "Gris", "Turquoise")
    'on delete le popup si il existe
    On Error Resume Next
    CommandBars("colorperso").Delete
    On Error GoTo 0
    
    'creation de la barre popup
    Set barre = CommandBars.Add("colorperso", msoBarPopup, False, True)
    'création des bouton du popup
    For i = 0 To UBound(ColorXs)
        cp = 0
        
        'Do While IsClipboardFormatAvailable(&H2) <> 0
        '    cp = cp + 1
        '    DoEvents
        'Loop
        
        'Debug.Print cp & "tours avant de copier"
        cp = 0
        With Cells(Rows.Count, Columns.Count)
            'ColumnWidth = 1.8
            .Interior.Color = ColorXs(i)
            'DoEvents
            .CopyPicture Appearance:=xlScreen, Format:=xlBitmap 'on copie la cellule en picture
        End With
        'Do While IsClipboardFormatAvailable(&H2) = 0
        '    DoEvents
        'Loop
        'Debug.Print cp "tours  avant de coller"
        With barre.Controls.Add(msoControlButton, 1, , , True)
            .Caption = Noms(i) 'on lui donne son texte de caption
            'on colorie une cellule loin loin loin  avec la couleur index i
            .PasteFace 'on colle l'image au bouton
            .OnAction = "ChangeColorCell" 'on lui donne sa macro au bouton
            .Tag = ColorXs(i) 'on met la couleur dans le tag du bouton
        End With
        OpenClipboard 0&
        EmptyClipboard
        CloseClipboard
    Next
    Cells(Rows.Count, Columns.Count).Interior.Color = xlNone 'on nettoie la cellule qui nous a servir a faire les icons de couleur
    barre.ShowPopup 'on affiche le popup
    'le menu s'auto detruit
    On Error Resume Next
    CommandBars("colorperso").Delete
    On Error GoTo 0
End Sub
Sub ChangeColorCell()
    'Cette ma"cro est appeler par tout les boutons
    'on donne la couleur a la cellule a"vec la va"leur du tag du bouton cliqué
    Selection.Interior.Color = Val(CommandBars.ActionControl.Tag)
End Sub



'le customui et officeUI travaillent  en UTF-8 alors
'fonction pour enregistrer au format UTF-8 avec le MSXML2 transféré dans le adodb stream
' le code est propre et indenté comme tout xml qu'il se doit d'être
Public Sub SaveFormatDocToFileXL(ByVal doc, ByVal FileName As String)
    Dim ReaderXml As Object, StreamFormaté As Object, WriterFormat As Object, elem
    Set ReaderXml = CreateObject("MSXML2.SAXXMLReader.6.0")
    Set StreamFormaté = CreateObject("ADODB.Stream")
    Set WriterFormat = CreateObject("MSXML2.MXXMLWriter")
    With StreamFormaté
        .Open
        .Type = 1    'adTypeBinary
        With WriterFormat
            .omitXMLDeclaration = False
            .standalone = True
            .byteOrderMark = False    'If not set (even to False) then
            '.encoding is ignored.
            .Encoding = "utf-8"    'Even if .byteOrderMark = True
            'UTF-8 never gets a BOM.
            .indent = True
            .Output = StreamFormaté
            With ReaderXml
                Set .contentHandler = WriterFormat
                Set .dtdHandler = WriterFormat
                Set .errorHandler = WriterFormat
                .putProperty "http://xml.org/sax/properties/lexical-handler", WriterFormat
                .putProperty "http://xml.org/sax/properties/declaration-handler", WriterFormat
                .Parse doc
            End With
        End With
        If Dir(FileName) <> "" Then Kill fichier
        .SaveToFile FileName
        .Close
    End With
    Set ReaderXml = Nothing
    Set StreamFormaté = Nothing
    Set WriterFormat = Nothing
End Sub

'fonction de sauvegarde du fichier officeUI de personnalisation si il existe  déjà
' en le renomant en back
Sub sauvegardeofficeUI()
    fichier = Environ("LocalAppData") & "\Microsoft\Office\Excel.officeUI"
    If Dir(fichier) <> "" Then
        Name fichier As Replace(fichier, ".officeUI", ".officeUIBack")
    End If
End Sub

Sub ForcerMajRuban_OfficeUI()
    
End Sub
'exemple du résultat à obtenir

'<?xml version="1.0" encoding="utf-8" standalone="yes"?>
'<customUI onLoad="CustomUIOnLoad" xmlns="http://schemas.microsoft.com/office/2009/07/customui">
'    <ribbon>
'        <tabs>
'            <tab idMso="TabHome">
'                <group id="gColorPerso" label="Palette Color">
'                    <button id="bColorPerso" label="Afficher Palette Color" imageMso="HappyFace" onAction="C:\Users\patricktoulon\Desktop\palette color dynamique perso customUi Mixte commandbars.xlsm!afficher_la_palette" size="large"/>
'                </group>
'            </tab>
'        </tabs>
'    </ribbon>
'</customUI>
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
40
Affichages
3 K
Retour