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