1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| Option Explicit
Sub CoulAléatoire()
Dim Ws As Worksheet, Rng As Range, Cellule(1 To 2) As Range, UniRng As Range
Dim Rouge As Byte, Vert As Byte, Bleu As Byte
Dim LngAléaCouleur As Long, b As Long
Dim MaCouleurAléatoire As Long
LngAléaCouleur = AléaCouleur(Rouge, Vert, Bleu)
MaCouleurAléatoire = VBA.RGB(Rouge, Vert, Bleu)
Set Ws = ActiveWorkbook.ActiveSheet
Set Rng = Ws.Range("B10:C50")
' 1ère cellule en partant en haut à gauche de la plage Rng (B10:C50),
' en lisant de haut en bas (Row = ligne), de gauche à droite (Column = colonne).
Set Cellule(1) = Rng.Cells(1, 1)
Set Cellule(2) = Rng.Cells(3, 7)
'Union des 2 cellules.
Set UniRng = Union(Cellule(1), Cellule(2))
' Application d'une couleur aléatoire généré par la fonction AléaCouleur
UniRng.Interior.color = LngAléaCouleur
End Sub
'Fonction permettant de sortir 3 valeurs ByRef (Byte) RVB en 3 x 8 bit ou 1 valeur (Long) 1 x 24 bit
Public Function AléaCouleur(Optional ByRef SortieRouge As Byte, Optional ByRef SortieVert As Byte, Optional ByRef SortieBleu As Byte) As Long
'Selon l'aide d'EXCEL à propos de la fonction ALEA:
'Pour générer un nombre réel aléatoire compris entre a et b, utilisez :
'ALEA() * (b - a) + a
'Par contre, je l'interprête comme suit pour les valeurs positives:
'Aléa entre borne = Int(Rnd * (Max + 1 - Min)) + Min
' Cas Rnd = 0.99999 , Max = 255, Min = 0:
' - Valeur = 0.99999 * (255+1=256) = 255.99744
' - Arrondi.inf avec Int donne: NewValeur = Int(255.99744) = 255
VBA.Math.Randomize
SortieRouge = CByte(Int(Rnd * (255 + 1)))
SortieVert = CByte(Int(Rnd * (255 + 1)))
SortieBleu = CByte(Int(Rnd * (255 + 1)))
'Retour en 24 bit BVR24 plutôt que RVB24 : B*65536 + V*256 + R*1 => BBBBBBBBVVVVVVVVRRRRRRRR
'D'après http://support.microsoft.com/kb/456382/fr
AléaCouleur = (SortieRouge + SortieVert * CLng(256) + SortieBleu * CLng(65536))
End Function |
Partager