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 :

Colorer une plage de cellule en fonction de la couleur d'une autre plage de cellules sur la même ligne


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Colorer une plage de cellule en fonction de la couleur d'une autre plage de cellules sur la même ligne
    Bonjour,

    Débutante sur vba et non habituée aux forums j'ai essayé de trouver parmi les sujets la solution à mon probleme mais n'y arrive pas. J'espère que je serai claire et compréhensible.

    Si je prends l'exemple de ma ligne 6:

    POur mon tableau qui va de B6 à X200
    Si les cellules de L6 à W6 sont TOUTES grisées (attention, elles le sont par le biais de mises en forme conditionnelles et non pas manuellement)
    Alors les cellules de B6 à K6 doivent être grisées également
    Sinon, on ne touche pas à la couleur des cellules B6 à K6

    Merci par avance pour le temps que vous pourrez accorder à mon problème.

    Anne

  2. #2
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,
    (attention, elles le sont par le biais de mises en forme conditionnelles et non pas manuellement)
    alors pourquoi ne pas changer la destination de ta formule conditionnelle ?

    bonne journée

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    De L6 à W6, il y a à peu près une condition par colonne donc trop compliqué de faire une formule conditionnelle pour griser les cellules de B à K. C'est pour ça que je recherche à griser les cellules B à K grâce au format des cellules L à W.
    Ai-je répondu à ta question? ou suis-je tombée à coté?

  4. #4
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    oui, je crois comprendre, encore faut'il savoir sur quelle version tu travailles pour connaitre le numéro de ta couleur des cellules déjà grisées, fais un test avec l'enregistrement automatique et je te donnerais probablement la solution

    as-tu compris ? sinon je détaille la manip pour que tu me donnes le résultat

    passes-tu, dans ta version par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .ThemeColor = xlThemeColorDark1
            .TintAndShade = -0.14996795556505'exemple
    ou par

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Encore une fois j'espère avoir compris. Je travaille sur Excel 2007
    Avec l'enregistrement automatique de macro ça donne ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    With Selection.Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorDark1
            .TintAndShade = -0.349986266670736
            .PatternTintAndShade = 0
        End With

  6. #6
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    déjà pour commencer, testes ce morceau de programme, pour la ligne 6
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Range("L6:W6").Interior
        If .ColorIndex = 48 Then Range("b6:k6").Interior.ColorIndex = 48
    End With
    si je n'ai pas été assez détaillé, essayes ce code complet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub essai()
    Dim x As Long
    For x = 6 To 200
        With Range("L" & x, "W" & x).Interior
            If .ColorIndex = 48 Then Range("b" & x, "k" & x).Interior.ColorIndex = 48
        End With
    Next x
    End Sub
    et donnes-moi le résultat
    si aucune action, vérifies le numero de colorindex comme ça :
    si toutes ces cellules sont grisées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox Range("L6:W6").Interior.ColorIndex
    je viens de voir une légère différence, ce code sera plus précis :
    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
    Sub essai()
    Dim x As Long
    For x = 6 To 200
        With Range("L" & x, "W" & x).Interior
            If .ColorIndex = 48 Then
                With Range("b" & x, "k" & x).Interior
                    .Pattern = xlSolid
                    .PatternColorIndex = xlAutomatic
                    .ThemeColor = xlThemeColorDark1
                    .TintAndShade = -0.349986266670736
                    .PatternTintAndShade = 0
                End With
            End If
        End With
    Next x
    End Sub

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    La dernière formule marche mais uniquement quand je mets ma couleur manuellement. Sur les lignes où je laisse la mise en forme conditionnelle mettre le gris, cela ne fonctionne pas. Mais déjà c'est un grand pas!!!
    Il me semble avoir lu sur un site qu'il était difficile de récupérer le fonds de couleur quand c'était une mise en forme conditionnelle... peut être que ce n'est pas compatible avec vba?!
    En tout cas déjà merci pour cette 1ere solution

    peut être faut-il que je mette toutes mes conditions de mise en forme sous vba? Mais il me semble que vba n'aime pas trop les dates non?
    Est-ce une solution envisageable?

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 936
    Points : 28 932
    Points
    28 932
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    A ma connaissance, il n'est pas possible de détecter le format d'un Range qui a été attribué par la Mise en forme conditionnelle.
    Pour cela il faut faire une procédure qui parcourt les cellules concernées et là faire une boucle sur le nombre de conditions et tester ensuite si la condition en question est remplie.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("xnn").FormatConditions.count

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Malheureusement ça devient compliqué à comprendre pour mon niveau...

  10. #10
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    re bonsoir,
    en suivant les conseils de corona,
    fais une macro temporaire pour savoir combien de conditions existent dans les cellules grisées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub essai()
    Dim x
    For x = 4 To 6
    MsgBox Range("l" & x, "w" & x).FormatConditions.Count
    Next x
    End Sub
    si le nombre reste identique, on a une chance que les conditions soient les memes, dans ce cas tu peux l'utiliser pour transformer la macro initiale, moi j'ai mis 4 au hasard ci-dessous pour exemple
    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
    Sub essai()
    Dim x As Long
    For x = 6 To 200
       If Range("L" & x, "W" & x).FormatConditions.Count= 4 Then 'changer le 4 pour le vrai nombre de conditions
                With Range("b" & x, "k" & x).Interior
                    .Pattern = xlSolid
                    .PatternColorIndex = xlAutomatic
                    .ThemeColor = xlThemeColorDark1
                    .TintAndShade = -0.349986266670736
                    .PatternTintAndShade = 0
                End With
            End If
        End With
    Next x
    End Sub
    dis-moi si ça peut coller, attention changes le "4" pour ton nombre exact

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Alors je trouve 15 conditions.
    La dernière formule proposée me colore bien les cellules en gris, mais parcontre ca me les colore toutes sans distinguer uniquement les lignes sur lesquelles les cellules des colonnes L à W sont toutes grisées.
    Peut être un mix à faire entre les deux formules suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub essaideux()
    Dim x As Long
    For x = 6 To 200
       If Range("L" & x, "W" & x).FormatConditions.Count = 15 Then 
                With Range("b" & x, "k" & x).Interior
                    .Pattern = xlSolid
                    .PatternColorIndex = xlAutomatic
                    .ThemeColor = xlThemeColorDark1
                    .TintAndShade = -0.349986266670736
                    .PatternTintAndShade = 0
                End With
            End If
      Next x
    End Sub
    Et

    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
    Sub essai()
    Dim x As Long
    For x = 6 To 200
        With Range("L" & x, "W" & x).Interior
            If .ColorIndex = 48 Then
                With Range("b" & x, "k" & x).Interior
                    .Pattern = xlSolid
                    .PatternColorIndex = xlAutomatic
                    .ThemeColor = xlThemeColorDark1
                    .TintAndShade = -0.349986266670736
                    .PatternTintAndShade = 0
                End With
            End If
        End With
    Next x
    End Sub

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Encore une fois, merci pour le temps accordé!

    Je viens de faire plusieurs tests ca ne fonctionne toujours pas.

    J'ai bien 15 conditions.
    J'ai donc essayé avec 10 conditions, ca ne prend pas effet, avec 18 non plus--> donc ok
    Le problème est que ca ne prend en compte que le nombre de conditions et j'ai l'impression que la prise en compte du format "grisé" lié à ces conditions n'est pas pris en compte. Ne serait pas possible de rajouter dans la formule quelque chose pour dire que ces cases de L à W doivent toutes être de la même couleur (sans forcément préciser que c'est gris)?

    Désolée de ne pouvoir faire de propositions de formule, il va falloir que je planche sacrément sur vba...

    Merci d'avance

    Anne

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Points : 350
    Points
    350
    Par défaut
    Bonjour

    Tu peux tester les conditions.
    Exemple de MFC en L6, étendue juqu'en W6, [1 condition et 1 ligne :
    la formule est : =L$5<>""
    Format Motif : Gris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub test()
      Dim Col As Byte, Non As Boolean
      For Col = 12 To 23 'test de la condition
        If Cells(5, Col) ="" Then Non = True: Exit For
      Next
       Range("B6:K6").Interior.ColorIndex = IIf(Non, xlNone, 15)
    End Sub
    Il est évident que tu dois multiplier le nombre de tests avec plusieurs conditions par cellule et séparer les tests quand les conditions sont différentes d'une cellule à l'autre.

Discussions similaires

  1. [XL-2003] impression couleur d'une cellule en fonction de la couleur d'une autre cellule
    Par facteur dans le forum Macros et VBA Excel
    Réponses: 47
    Dernier message: 21/09/2012, 17h18
  2. Réponses: 5
    Dernier message: 07/12/2010, 08h58
  3. [XL-2000] Coloration d'une cellule en fonction du numéro saisi dans une autre
    Par Nerva dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/11/2010, 14h07
  4. Réponses: 5
    Dernier message: 03/02/2009, 13h43
  5. Réponses: 7
    Dernier message: 13/10/2007, 23h31

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