Dégradé d'une couleur à une autre sur une plage Excel

Bonsoir,

J'aimerai réaliser un dégradé continu sur une plage de données sur excel sans mise en forme conditionnel en passant d'une couleur à une autre. Concrètement dans mon fichier ci-joint, j'aimerai que la plage utilisée pour la répartition globale (K5:N37) soit un dégradé de couleur entre la couleur d'affectation intra et la couleur d'affectation collecte.

En solution de dépannage je pourrai faire une mise en forme conditionnel à partir de valeurs cachées pour réaliser ce dégradé, mais j'aimerai dans l'idéale soit une solution que je n'aurai pas trouvé (j'arrive à faire un dégradé dans une cellule uniquement), soit une macro qui me permette de l'exécuter sans avoir besoin de passer par "cette supercherie". Je demande donc de l'aide à la communauté afin de réaliser cette macro, étant totalement novice en la matière.

Si j'obtiens une réponse à ma demande, je m'engage à la poster dans la partie astuce (où j'ai cherché avant de poster un fichier) cette solution afin de la partager avec la communauté (en expliquant bien-sûr que mon bienfaiteur l'a réalisé) car je pense que cela peut servir à bien des personnes.

P.S. : le fichier joint est un fichier que j'ai anonymisé pour des raisons de confidentialités, ce qui explique pourquoi certaines formules peuvent vous paraître incohérente.

Je vous remercie par avance de l'aide que vous pourrez m'apporter

Bonjour

Voici un essai (un tout petit peu triché)

'   Affichage en dégradé sur plusieurs cellules non contigues
'       Le tableau tabColor doit contenir une couleur de plus que de colonnes à degrader

Sub Test()
Dim cptCol              '   Compteur des colonnes
Dim coulDeb, coulFin    '   Couleur de debut et de fin
Dim tabColor()          '   tableau des couleurs

    '   jaune clair, jaune plus sombre, jaune encore plus sombre, vert sombre, vert moins sombre
    '       ===> Attention un taleau déclaré de cette manière commence à 0 (zero)
    tabColor = Array(13431551, 10086143, 6740479, 9359529, 14348258)
    coulDeb = 0     '       Couleur de debut du dégradé de la cellule
    coulFin = 1     '       --      -- fin   -- --      -- -- --

    '   Pour chaque colone (ici colonne de K à N)
    For cptCol = 11 To 14
        With Cells(6, cptCol).Interior              '   cells.interior permet de definir (entre autres) la couleur d'une cellule
            .Pattern = xlPatternLinearGradient      '   definir le mode couleur dégradée
            .Gradient.Degree = 0                    '   definir l'inclinaison du dégradé en degres
                                                    '       --> 0 := vertical, 90 := horizontal, autres valeur := oblique
            .Gradient.ColorStops.Clear              '   effacer d'anciens dégradés eventuels
            With .Gradient.ColorStops.Add(0)        '   ajouter le dégradé de debut
                .Color = tabColor(coulDeb)          '       a la couleur de debut
            End With
            With .Gradient.ColorStops.Add(1)        '   ajouter le dégradé de debut
                .Color = tabColor(coulFin)          '       a la couleur de fin
            End With
        End With
        coulDeb = coulDeb + 1   '   passer à la coleur suivante dans le tableau pour la couleur de debut
        coulFin = coulFin + 1   '   idem pour la couleur de fin
    Next

End Sub

'   Pour Tester les couleurs
'       Tester les couleurs "jaune" en ligne 6
'       Mettre une couleur en K puis une couleur plus sombre en L
'       Recommencer jusqu'en N
'       Noter les valeurs des couleurs obtenues
'       Tester les couleurs "verte" en ligne 6
'       Mettre une couleur en K puis une couleur plus clair en L
'       Recommencer jusqu'en N
'       Noter les valeurs des couleurs obtenues
Sub AfColor()
    For cptCol = 11 To 14
        Cells(4, cptCol) = Cells(6, cptCol).Interior.Color
    Next
End Sub

(..)

PS/ Mon code fonctionne en "test" sur la ligne 6... à adapter ensuite sur les lignes souhaitées

PPS/ Pour accélérer l'affichage mettre un Application.ScreenUpdating = False / True autour de la boucle For/Next, sinon l'effet ralenti est assez joli mais peut s'avérer long sur plusieurs lignes

Merci beaucoup pour ta réponse ! Cela fonctionne bien avec le dégradé vertical, moins bien pour le dégradé horizontal mais avec ce que tu m'as fait je pense arriver à faire le dégradé horizontal comme je le souhaite. Je reviendrai poster ici les résultats pour faire profiter tout le monde !

Bonjour

Je n'ai pas remarqué de dégradé horizontal dans ta "cellule exemple"...

Cependant à ma connaissance tu ne peux pas faire les 2 en même temps dans le formatage d'une cellule... Non ?

Peut-être que c'est possible mais c'est bien au-delà de mes compétences si tel est le cas (je suis plutôt novice sur VBA).

Je vais juste essayer cet après-midi de faire un dégradé horizontal

J'ai bien essayé de parvenir à résoudre mon problème mais étant totalement novice je n'y arrive pas. J'ai trouvé ce code d'office sur extendoffice :

Sub colorgradientmultiplecells()
'Updateby Extendoffcie 20160725
    Dim xRg As Range
    Dim xTxt As String
    Dim xCell As Range
    Dim xColor As Long
    Dim I As Long
    Dim K As Long
    Dim xCount As Long
    On Error Resume Next
    If ActiveWindow.RangeSelection.Count > 1 Then
      xTxt = ActiveWindow.RangeSelection.AddressLocal
    Else
      xTxt = ActiveSheet.UsedRange.AddressLocal
    End If
LInput:
    Set xRg = Application.InputBox("please select the cells range:", "Kutools for Excel", xTxt, , , , , 8)
    If xRg Is Nothing Then Exit Sub
    If xRg.Areas.Count > 1 Then
        MsgBox "does not support multiple selections", vbInformation, "Kutools for Excel"
        GoTo LInput
    End If
    On Error Resume Next
    Application.ScreenUpdating = False
    xCount = xRg.Rows.Count
    For K = 1 To xRg.Columns.Count
        xColor = xRg.Cells(1, K).Interior.Color
        For I = xCount To 1 Step -1
            xRg.Cells(I, K).Interior.Color = xColor
            xRg.Cells(I, K).Interior.TintAndShade = (xCount - (I - 1)) / xCount
        Next
    Next
End Sub

Le problème c'est qu'il fait un dégradé de la couleur choisie vers du blanc, or moi je souhaite passer d'un jaune RGB(255,230,198) à un vert (198,224,180) en dégradé horizontal.

Je suis désolé de me tourner vers vous sans pouvoir aider plus que ça

Rechercher des sujets similaires à "degrade couleur plage"