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 :

[VBA-E]Faire varier la couleur d'une cellule


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 24
    Points : 7
    Points
    7
    Par défaut [VBA-E]Faire varier la couleur d'une cellule
    Bonjour,

    je suis confronté à une limite d'Excel. En efait,je veux faire de la mise en forme conditionnelle et automatique.

    C'est à dire que je dispose d'un ensemble de valeur {a,b,c,d,e,f} pouvant être pris par des cellules et je voudrais qu'en fonction des valeurs prises, une autre rangée de cellules prennent un fond de couleur défini...ça permet d'avoir une alerte plus visuelle.

    Savez vous comment faire ça ? D'autre part, il faudrait que le changement de couleur se fasse automatiquement, on ne doit pas lancer de macro.

    Merci d'avance pour vos illuminations,

    Benoue

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    tu pourrai t'inspirer de la méthode utilisée dans ce code :
    http://www.developpez.net/forums/vie...68617&start=18

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2004
    Messages : 73
    Points : 35
    Points
    35
    Par défaut
    Pour que ta macro se lance seule, tu peux utiliser l'événement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbook_SheetSelectionChange
    Le code s'éxécutera à chaque fois que tu cliquera dans une cellule

  4. #4
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Et moi, je dirais bien qu'une fonction dont le(s) paramètre(s) d'entrée est(sont, et j'arrête ces parenthèses...) un Range "devient" dynamique, et s'actualise lorsque la plage d'entrée est modifiée.
    Mais je ne le jurerais pas, c'est à vérifier.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 24
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Je n'ai pas tout saisi de la solution dont je devais m'inspirer, ça me semble correspondre à un cas bien particulier et je peine à voir comment m'en servir simplement.

    Benoue

  6. #6
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Ok, alors regarde ça.
    Est-ce que ça correspond à ce que tu veux faire. Dans cet exemple, les cellules A1 à A5 sont "surveillées". Selon la valeur saisie, la cellule située un cran à droite prend une couleur différente.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Not Intersect(Target, Range("A1:A5")) Is Nothing Then
            Select Case Target.Value
                Case 1
                    Target.Offset(0, 1).Interior.ColorIndex = 10
                Case 2
                    Target.Offset(0, 1).Interior.ColorIndex = 4
                Case 3
                    Target.Offset(0, 1).Interior.ColorIndex = 6
                Case 4
                    Target.Offset(0, 1).Interior.ColorIndex = 8
            End Select
        End If
    End Sub
    Bien sûr, ça va dans le code de la feuille où se trouvent les cellules à surveiller.

    Je viens de voir que c'est à peu près ce qu'il y a dans le code du lien de bbil... J'ai bossé pour rien.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 24
    Points : 7
    Points
    7
    Par défaut
    Cool, merci,

    Mais ce que je ne comprends pas, c'est que je ne spécifie jamais les valeurs correspondantes de A1:A5 ??

    Je veux pas exemple que si la valeur dans les cellules est "Reportée",la cellule passe au gris, si la valeur est "En Retard",ça passe au rouge.

    Pour retrouver le code des couleurs,ça ne pose pas de problème, mais c'est l'écriture des conditions qui me gênent.

  8. #8
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Heummm... Là, tu exagères un peu, quand même...
    Regarde l'aide (touche F1) sur "Case", et tu verras que tu n'as qu'à remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Case 1 
    ...
    Case 2
    ...
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Case "En Retard"
    ...
    Case "Reportée"
    ...

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 24
    Points : 7
    Points
    7
    Par défaut
    Ok je

    Merci de ton aide.

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 24
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Je viens d'écrire ça
    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
    Private Sub Workbook_SheetSelectionChange(ByVal Target As Range)
     
    'Worksheet_Change
     
        If Not Intersect(Target, Range("E8:E100")) Is Nothing Then
            Select Case Target.Value
                Case "Non démarrée"
                    Target.Offset(0, 1).Interior
                    .ColorIndex = 41
                    .Pattern = xlSolid
                Case "En cours"
                    Target.Offset(0, 1).Interior
                    .ColorIndex = 45
                    .Pattern = xlSolid
                Case "Réalisée"
                    Target.Offset(0, 1).Interior
                    .ColorIndex = 50
                    .Pattern = xlSolid
                Case "En retard"
                    Target.Offset(0, 1).Interior
                    .ColorIndex = 3
                    .Pattern = xlSolid
                Case "Reportée"
                    Target.Offset(0, 1).Interior
                    .ColorIndex = 15
                    .Pattern = xlSolid
            End Select
        End If
    End Sub
    mais les cellules situes en F_i ne changent pas en fonction des valeurs des cellules E_i.
    J'ai mis le nom de la fonction << Workbook_SheetSelectionChange >> pour que le changement de couleur se fasse automatiquement, mais rien..

  11. #11
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Tu veux me rappeler quand est appelé le trigger "Workbook_SheetSelectionChange", s'il te plait...

    A ta place, j'aurais laissé celui que je t'ai donné: Il se déclenche à chaque fois qu'une cellule (DE L'ONGLET DANS LE CODE DUQUEL TU AS MIS ce que je t'ai envoyé) change de valeur.
    Sauf peut-être si le changement de valeur se fait automatiquement, tu devras vérifier ça...

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 24
    Points : 7
    Points
    7
    Par défaut
    Euhhh, en fait,j'ai utilisé la remarque ci-dessus
    Citation Envoyé par mustang-ffw02
    Pour que ta macro se lance seule, tu peux utiliser l'événement Code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbook_SheetSelectionChange
    Le code s'éxécutera à chaque fois que tu cliquera dans une cellule
    J'ai laissé le nom de la fonction et modifié les
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
         Case "Non démarrée" 
                    Target.Offset(0, 1).Interior 
                    .ColorIndex = 41 
                    .Pattern = xlSolid
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
         Case "Non démarrée" 
                   Target.Offset(0, 1).Interior .ColorIndex = 41 
                     Target.Offset(0, 1).Interior .Pattern = xlSolid
    et ça marche nickel maintenant.

    Dernière chose, y'a t-il moyen de changer le Range("E8:E100") et le passer en paramètres d'entrée de la fonction ?
    Je dosi faire cette modif de cellules pour une cinquantaine de feuilles et j'espère faire une fonction générique et l'appeler dans chaque feuille en lui passant le Range et l'offset en paramètres.
    Un truc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    Call coloriage_cellule (cellules_à_surveiller, première valeur de l'Offset, Seconde valeur de l'offset)
     
    End Sub

  13. #13
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Si ta zone à surveiller dépend de la feuille, et ne change pas, ça ne pose pas de problème.
    Je ne sais pas dans quelle version d'Excel tu es, mais en 2003, dans l'événement "Workbook_SheetSelectionChange", tu as 2 paramètres: "Target" et "Sheet". Il te suffit de te faire une fonction qui, selon la feuille, te donne la zone à surveiller.

Discussions similaires

  1. faire clignoter la couleur d'une cellule
    Par zangaloni dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 10/12/2019, 11h55
  2. comment faire changer la couleur d'une cellule
    Par eddycool dans le forum Excel
    Réponses: 8
    Dernier message: 03/11/2009, 19h08
  3. Réponses: 4
    Dernier message: 27/11/2008, 14h59
  4. [plot] Faire varier la couleur d'une courbe
    Par christophe_halgand dans le forum MATLAB
    Réponses: 4
    Dernier message: 25/01/2008, 18h11
  5. Réponses: 4
    Dernier message: 07/02/2007, 23h33

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