Autres [Résolu]ajouter une palette couleur dans le menu VBE

patricktoulon

XLDnaute Barbatruc
bonjour a tous
je ne sais pas pour vous mais quand je construit mes userforms et que je met de la couleur je n'ai que les 56 couleur de base (beurk!!!)

j'aimerais me faire un tout petit complément
un bouton dans la commandbar de VBE (l’éditeur de code vba)
qui m'afficherait un userform avec une palette plus importante de couleur (ca c'est bon j'ai en plusieurs méthodes)
le choix de la couleur s'inscrirait dans un textbox dans cette palette et un simple copier coller dans la propriété d'un control ou userform en construction manuel me suffirait

donc pour commencer
  1. comment ajoute on un bouton dans la commandbars VBE
  2. un userform est il possible qu'il soit affiché en mode édition dans VBE
  3. comment stiker la couleur choisi dans la dite palette couleur
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
bon ca y est on avance mon bouton fonctionne

alors je lance la sub test ça me met le bouton dans le menu outils (ca c'est ok)
je click sur userform1 dans VBE puis sur outils puis sur couleurs( ca c'est ok)
ma palette s'affiche ( ca c'est ok)
le click sur son bouton ok de la palette devrait me mettre le commandbutton1 en couleur choisie ( pas ok) ca le fait pas


mais on avance quand même
 

Pièces jointes

  • methode Roblochon.xlsm
    19.5 KB · Affichages: 6

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Oui, excusez-moi, j'avais retapé à la volée sans tester.
Voici qui fonction
Le module général:
Code:
Option Explicit
Public LeBouton As clsControlEvent
Sub test()
    Dim CTRL As CommandBarButton
    Dim evt As clsControlEvent
    Set CTRL = Application.VBE.CommandBars("Tools").Controls("Couleurs")
    If Not CTRL Is Nothing Then CTRL.Delete
    ' N'ai pas envie de reseter ma barre d'outils
    'Application.VBE.CommandBars("Tools").Reset
    Set CTRL = Application.VBE.CommandBars("Tools").Controls.Add(msoControlButton)
    With CTRL
        .Caption = "Couleurs"
        .BeginGroup = True
        .FaceId = 25
        .OnAction = "showpalette"
    End With

    Set evt = New clsControlEvent
    Set evt.ControlEvent = Application.VBE.Events.CommandBarEvents(CTRL)
    Set LeBouton = evt
End Sub
Sub showpalette()
    Dim lcolor As Long
    With Application.Dialogs(xlDialogEditColor)
        If .Show(2, 255, 10, 10) = True Then MsgBox ActiveWorkbook.Colors(2)
    End With
    ActiveWorkbook.ResetColors
End Sub

VB:
Option Explicit
Public WithEvents ControlEvent As CommandBarEvents


Private Sub ControlEvent_Click(ByVal Control As Object, Handled As Boolean, CancelDefault As Boolean)
    Application.Run Control.OnAction
    Handled = True
    CancelDefault = True
End Sub
A la prochaine

[Edit] Bing! Colllision.
 

Pièces jointes

  • methode Roblochon.xlsm
    15.3 KB · Affichages: 15

patricktoulon

XLDnaute Barbatruc
re
le set déclenche une erreur quand le control est absent
Capture.JPG
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,
Re bing! euh patrick, j'ai employé cette solution pour éviter le reset de mon menu outils (que d'ailleurs vous ne devriez pas mettre dans un fichier exemple).

C'est normal quand une collection ne trouve pas un item demandé.

soit vous mettez un on error resume next avant soit vous reseter votre menu outils
 

Staple1600

XLDnaute Barbatruc
Re le fil, Bonjour Roblochon

[Si je puis me permettre...]
Pour rester dans l'esprit qui est le mien, les mois en bre et les jours non ouvrés, en bref pour être fidèle au K.I.S.S
On a déjà la palette dans VBE, non?
Pourquoi donc qu'on devrait se compliquer la vie et le VBA pour un histoire de couleur sur un contrôle?
;)
01PT_kiss.jpg

[/Si je puis me permettre]
Et trop de couleurs tue la couleur, voir nos yeux
(Heureusement Michèle Morgan ne pratiquait pas le VBA, sinon Jean Gabin se serait tu ;))
C'est le docteur des yeux qui l'a dit ;)

PS: Par contre, lire du beau code VBA dans VBE, cela c'est pas fatiguant.
Et c'est intéressant surtout les modules de classe.

PS: Ce n'est que mon opinion, merci donc d'éviter la volée de bois vert.
J'ai le dos fragile ;)
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
@Roblochon
le msgbox ok mais quand on lui demande userform1.commandbutton1.backcolor=ActiveWorkbook.Colors(2) ca ne fonctionne pas
c'est cela qui m’intéresse

@Staple1600
oui mais la palette original est bidon exception faite des primaires ( a mon gout)
et je compte bien approfondir au forecolor,bordercolor etc...

mais je viens d'avoir peut être une idée plus simple a savoir changer les 56 couleurs ( ca je sais faire)
je ne sais pas si c'est répercuté dans le control ID:=1927 qui est la palette de base pour les palette couleur de tout dialog couleur excel 2007
je vais explorer cela aussi ca sera peut être plus propre et plus de choix

le(s) boutons dans le menu me serviraient qu'a changer la palette
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

patricktoulon
Ce qui compte c'est l'action qui se produit quand on clique sur le bouton, non ?
Pas son BackColor ou son ForeColor
Tu me diras : "Les goûts, les couleurs..."

Au bout, du bout, la finalité du truc, c'est quoi: avoir une palette dans VBE en cliquant sur un bouton
(C'est ce que j'ai compris)

[tentative d'humour capillo-tracté]
Ayant peur d'attraper le syndrome Jacques D. aussi appelé syndrome Franck P., je quitte momentanément cette discussion ;)
Parce que je le vaux bien.
[/humour capillo-tracté]
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Faut chercher un peu Patrick....
En ayant sélectionné le CommandButton1 en mode Edition du userform
VB:
Sub showpalette()
    Dim lcolor As Long
    Dim des As Object
    With Application.Dialogs(xlDialogEditColor)
        If .Show(2, 255, 10, 10) = True Then lcolor = ActiveWorkbook.Colors(2)
        Application.VBE.ActiveVBProject.VBComponents("UserForm1").Designer.Controls("CommandButton1").BackColor = lcolor
    End With
    ActiveWorkbook.ResetColors
End Sub

Je n'interviendrai plus sur ce sujet.

Bonne continuation
 

Discussions similaires

Statistiques des forums

Discussions
311 740
Messages
2 082 049
Membres
101 882
dernier inscrit
XaK_