IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Mettre de la couleur dans une cellule aléatoire


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2013
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Mettre de la couleur dans une cellule aléatoire
    Allo!
    Je suis débutante en VBA...
    J'aimerais que mon programme choisisse aléatoirement des cellules (par exemple 2 cellules différentes à chaque fois) et qu'il colore le fond de la cellule en rouge... J'essaie depuis 3 heures et je tourne en rond.. Quelqu'un peut m'aider??

  2. #2
    Invité
    Invité(e)
    Par défaut Juste pour le fun
    Bonjour,

    Je l'ai fais juste pour le fun.
    J'ai commenté la fonction et la procédure, j'en ai mis plus qu'il en fallais, donc beaucoup de chose ne sont pas utile dans cette macro, mais c'est pour l'apprentissage du VBA.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Mets ce code dans un module standard (Alt+F11 puis menu "Insertion" --> "Module"), une fois ceci fait, revients dans Excel et pose un bouton "Formulaire" sur ta feuille puis dans la boite "Affecter une macro' qui vient de s'ouvrir, double-clique sur "Colorer" et enfin, teste. Fais en sorte que la plage A140 soit visible dans son entièreté.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    Sub Colorer()
     
        Dim Plage As Range
        Dim Col As Integer
        Dim Lgn As Integer
     
        'borne la plage, à adapter...
        Set Plage = Range("A1:P40")
     
        'Initialise le générateur de nombres aléatoires
        Randomize
     
        'défini une ligne et colonne au hazard
        Lgn = Int(Rnd * Plage.Rows.Count) + 1
        Col = Int(Rnd * Plage.Columns.Count) + 1
     
        'redimensionne d'une colonne et d'une ligne pour effacer les cellules hors plage
        'dues à l'offset et supprime les couleurs de fond
        Plage.Resize(Plage.Rows.Count + 1, Plage.Columns.Count + 1).Interior.ColorIndex = 0
     
        'colorise
        With Cells(Lgn, Col)
     
            .Interior.ColorIndex = 3
            .Offset(1, 0).Interior.ColorIndex = 3
     
        End With
     
    End Sub
    Hervé.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Je ne me serais pas gourré par hasard ???!!!

    Avec les 2 fonctions, tu va pouvoir générer des couleurs aléatoire sur quelques cellules avec adresse aléatoire.

Discussions similaires

  1. Mettre une couleur dans une cellule avec user form
    Par moilou2 dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 10/01/2008, 12h12
  2. mettre une couleur dans une cellule d'un TStringrid
    Par vitch8 dans le forum Delphi
    Réponses: 1
    Dernier message: 18/12/2006, 17h33
  3. changer de couleur dans une cellule stringgrid
    Par popy1970 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 24/04/2006, 20h21
  4. [JTable] Mettre un composant Swing dans une cellule
    Par NeptuS dans le forum Composants
    Réponses: 4
    Dernier message: 09/09/2005, 12h18
  5. mettre de la couleur dans une cellule
    Par Jiraiya42 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 03/06/2005, 10h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo