Autres Pourquoi la palette par défaut comporte-t-elle des doublons ? - Excel4 - LIRE.CELLULE(63; )

luigiF

XLDnaute Junior
Salut à Vous,

une question "métaphysique" me taraude depuis longtemps ...
Quelqu'un pourrait-il m'expliquer pourquoi la palette par defaut d'Excel, comportant 56 valeurs différentes de "colorindex", compte certaines couleurs (color) en double ?
Exemple :
(Colorindex = 5) et (Colorindex = 32) renvoient tous les deux à RGB(0,0,255), (Color=16711680) , rgbBlue, Blue

J'ai beau chercher, je ne comprends pas quel a pu être l’intérêt d'une telle définition originelle de la palette par défaut d'Excel.
Je n'y vois qu'une source potentielle d'erreurs et de complications.

En temps normal je n'utilise jamais "colorindex" pour manipuler les couleurs mais dans certains programmes qui nécessitent de trouver très rapidement "en bloc" la couleur de fond d'un très grand nombre de cellules, le moyen le plus rapide que je connaisse passe par l'utilisation de la fonction Excel4 "LIRE.CELLULE(63; )" qui renvoie évidemment "Colorindex" et non "Color"

Merci pour vos réponses,

Cordialement,

LuigiF
 

luigiF

XLDnaute Junior
Je suppose que si les boites de gouache achetées au supermarché pour les gamins contenaient par défaut systématiquement des tubes en double (voire des tubes d'une seule et même couleur) ... lesdits gamins ne manqueraient de se poser la même question que moi au sujet de la palette d'Excel.

Et encore ... avec la gouache on pourrait le justifier : "il y a deux tubes de bleu car on en utilise beaucoup pour peindre le ciel et la mer mon petit ..."

Mais enfin ... ma question initiale était simple :

"pourquoi la palette par défaut contient-elle des doublons ?"
"Quel a bien pu être, à l'origine, l’intérêt d'une telle stratégie qui est une source d'erreurs pour tous ceux qui ne connaissent pas en détail le fonctionnement de la palette ?" (surement plus de 90% des utilisateurs).

Je sais très bien qu'on peut personnaliser la palette pour supprimer les doublons. Je le fais depuis le début ...
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,
peut-être que le 7 est au départ un 8 (lui-même une puissance de 2)
Donc le gars, il a fait 8 palettes de 8 couleurs (assez logique). Puis subrepticement, il en a subtilisé une pour la garder rien que pour lui en pensant que tout le monde n'y verrait que du feu. C'est raté ! Heureusement pour lui, il y a prescription aujourd'hui.
 

eriiic

XLDnaute Barbatruc
Bonjour,

si on met les valeurs hexa des couleurs en tableau on note une certaine régularité dans la construction.
Comme si ils avaient choisi des séries +/- réparties, crées avec un certain pas, sans trop tenir compte qu'une pouvait revenir.
000000FFFFFF0000FF00FF00FF000000FFFFFF00FFFFFF00
000080008000800000008080800080808000C0C0C0808080
FF9999663399CCFFFFFFFFCC6600668080FFCC6600FFCCCC
800000FF00FF00FFFFFFFF00800080000080808000FF0000
FFCC00FFFFCCCCFFCC99FFFFFFCC99CC99FFFF99CC99CCFF
FF6633CCCC3300CC9900CCFF0099FF0066FF996666969696
663300669933003300003333003399663399993333333333

Par ailleurs, peut-être que le 7 n'est pas 8-1 mais 6+1 ??? (N&B + couleurs primaires + complémentaires) +6 séries de 8.
Je propose qu'on crée un topic dédié pour en discuter :)
eric
 

Modeste geedee

XLDnaute Barbatruc
Je propose qu'on crée un topic dédié pour en discuter :)
eric
il y a déjà beaucoup de choses écrites là :

à l'occasion voir aussi :
 
Dernière édition:

Modeste geedee

XLDnaute Barbatruc
Bonsour®
possibilité de réer sa propre palette
un exemple d'utilisation : Arc-en-ciel + 8 niveau de gris
VB:
Sub PaletteArcEnCiel()
Dim i As Integer, j As Integer, idx As Integer, k As Integer, R As Integer, G As Integer, B As Integer
    ReDim TblR(56)
    ReDim TblG(56)
    ReDim TblB(56)
    ReDim Tblrgb(56)
    ThisWorkbook.Sheets.Add
    Application.ScreenUpdating = False
    [A1] = "Idx": [B1] = "Defaut": [c1] = "Dec": [D1] = "R": [E1] = "G": [F1] = "B": [G1] = "Hex": [H1] = "Arc-en-ciel": [I1] = "Dec": [J1] = "R": [K1] = "G": [L1] = "B": [M1] = "Hex"
    For i = 1 To 7
        For j = 1 To 8
            idx = j + (8 * (i - 1)) ' calcul index de la palette
            k = (j - 1) * 32
            Select Case i
            Case 2
                TblR(idx) = 255:     TblG(idx) = k:       TblB(idx) = 0
            Case 3
                TblR(idx) = 255 - k: TblG(idx) = 255:     TblB(idx) = 0
            Case 4
                TblR(idx) = 0:       TblG(idx) = 255:     TblB(idx) = k
            Case 5
                TblR(idx) = 0:       TblG(idx) = 255 - k: TblB(idx) = 255
            Case 6
                TblR(idx) = k:       TblG(idx) = 0:       TblB(idx) = 255
            Case 1
                TblR(idx) = 255:     TblG(idx) = 0:       TblB(idx) = 255 - k
            Case Else '---- de noir 0,0,0  àblanc 255,255,255)
                TblR(idx) = Round(((j - 1) * 36.425), 0):    TblG(idx) = TblR(idx):    TblB(idx) = TblR(idx)
            End Select
          
            Tblrgb(idx) = RGB(TblR(idx), TblG(idx), TblB(idx))
        
            With ActiveSheet
            .Cells(1 + idx, 1).Value = idx
            .Cells(1 + idx, 2).Interior.ColorIndex = idx
            R = ThisWorkbook.Colors(idx) Mod 256
            G = Int(ThisWorkbook.Colors(idx) / 256 ^ 1) Mod 256
            B = Int(ThisWorkbook.Colors(idx) / 256 ^ 2) Mod 256
             .Cells(1 + idx, 3).Value = ThisWorkbook.Colors(idx)
             .Cells(1 + idx, 4).Value = R
              .Cells(1 + idx, 5).Value = G
               .Cells(1 + idx, 6).Value = B
               .Cells(1 + idx, 7).Value = "&H" & Application.Dec2Hex(B, 2) & Application.Dec2Hex(G, 2) & Application.Dec2Hex(R, 2)
              
            .Cells(1 + idx, 8).Interior.Color = Tblrgb(idx)
              .Cells(1 + idx, 9).Value = Tblrgb(idx)
              .Cells(1 + idx, 10).Value = TblR(idx)
            .Cells(1 + idx, 11).Value = TblG(idx)
            .Cells(1 + idx, 12).Value = TblB(idx)
            .Cells(1 + idx, 13).Value = "&H" & Application.Dec2Hex(TblB(idx), 2) & Application.Dec2Hex(TblG(idx), 2) & Application.Dec2Hex(TblR(idx), 2)
    End With
             '********************************************
' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!selon le cas activer ou non ces 2 sections'
' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! affectation RGB à la palette standard
            ' ThisWorkbook.Colors(idx) = tblrgb(idx)
            '********************************************
        Next
    Next
            '********************************************
 ' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! restoration palette par defaut
            ' ThisWorkbook.ResetColors
            '********************************************
     Application.ScreenUpdating = True
  End Sub
 

patricktoulon

XLDnaute Barbatruc
re
bonsoir
ou d'utiliser ce qui existe déjà de façon détournée
click droit sur cell

VB:
Sub add_palette_full_color_context()
    Dim pop1pop2, bout
    With CommandBars("Cell")
        .Reset
        Set pop1 = .Controls.Add(msoControlPopup, , , 1, True): pop1.Caption = "interior.color"
        Set pop2 = .Controls.Add(msoControlPopup, , , 2, True): pop2.Caption = "font.color"


        Set bout = pop1.Controls.Add(msoControlButton, , , 1, True)
        bout.Caption = "standard": bout.FaceId = 300
        bout.OnAction = "'my_color " & """cellinterior""" & "'"

        Set bout = pop1.Controls.Add(msoControlButton, , , 2, True)
        bout.Caption = "personalisée": bout.FaceId = 1930
        bout.OnAction = "'my_color " & Chr(34) & "cellinterior"","" 150 ""'"

        Set bout = pop2.Controls.Add(msoControlButton, , , 1, True)
        bout.Caption = "standard"
        bout.OnAction = "'my_color " & """cellfontcolor""" & "'"

        Set bout = pop2.Controls.Add(msoControlButton, , , 2, True)
        bout.Caption = "personalisée": bout.FaceId = 1930
        bout.OnAction = "'my_color " & Chr(34) & "cellfontcolor"","" 150 ""'"


    End With
End Sub

la palette
VB:
Function my_color(Optional X As Variant = "Getcouleur", Optional perso As String = 0)
    Dim x1&, x2&, x3&
    If perso > 0 Then x1 = 255: x2 = 10: x3 = 5
    If Application.Dialogs(xlDialogEditColor).Show(1, x1, x2, x3) = True Then
        Select Case X
        Case "cellinterior": ActiveCell.Interior.Color = ActiveWorkbook.Colors(1)
        Case "cellfontcolor": ActiveCell.Font.Color = ActiveWorkbook.Colors(1)
        Case "Getcouleur": my_color = ActiveWorkbook.Colors(1)
            'etc..
            'etc..
        End Select
    End If
End Function

et pour une autre utilisation
VB:
Sub test_out_off_context1()    'personalisée
    MsgBox my_color(perso:=1)
End Sub
Sub test_out_off_context2()    'standard
    MsgBox my_color
End Sub
on a quand même un choix de couleur plus important même en standard ;)
 

Statistiques des forums

Discussions
312 104
Messages
2 085 339
Membres
102 865
dernier inscrit
FreyaSalander