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 :

Identifier une cellule ayant une couleur de fond [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 491
    Points : 155
    Points
    155
    Par défaut Identifier une cellule ayant une couleur de fond
    Bonsoir,

    J'ai un fichier excel avec un code couleur sur certaines cellules et je voudrais transposer ce fond de couleur de la celule en texte sur la cellule de droite.

    Je m'explique :
    si A1 est en verte alors mettre dans B1 "conforme"
    si A1 est en jaune alors mettre dans B1 "acceptable"
    si A1 est en rouge alors mettre dans B1 "non conforme"
    si A1 n'a pas de couleur alors rien faire
    et on continue comme cà de A1 jusqu'à A15000

    J'ai vu que les couleurs en VBA étaient gérées ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     With Selection.Interior
            .ColorIndex = 3 'ROUGE
            .Pattern = xlSolid
        End With
        Range("E8").Select
        With Selection.Interior
            .ColorIndex = 6 'JAUNE
            .Pattern = xlSolid
        End With
        Range("E11").Select
        With Selection.Interior
            .ColorIndex = 43 'VERT
            .Pattern = xlSolid
    Est ce que vous pourriez m'aider à ce sujet ?

    Merci par avance

    Nini un peu perdu

  2. #2
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    Bonjour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub valeur_couleur()
    Dim cell As Range
    'Il faut adapté le nom de sheets à votre classeur
    For Each cell In Sheets("feuil16").Range("a1:a15000")
    If Cells(cell.Row, 1).Interior.ColorIndex = 3 Then Cells(cell.Row, 2) = "non conforme" 'rouge.non conforme
    If Cells(cell.Row, 1).Interior.ColorIndex = 6 Then Cells(cell.Row, 2) = "acceptable" 'jaune.acceptable
    If Cells(cell.Row, 1).Interior.ColorIndex = 43 Then Cells(cell.Row, 2) = "conforme" 'vert.conforme
    Next cell
     
    End Sub

  3. #3
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut couleurs
    Bonsoir,

    Pour plus d'élégance, et de lisibilité, je préfèrerais la méthode
    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
    Public Sub essai_couleur()
     
    Dim i As Integer
    Dim lib As String
     
    For i = 1 To 15000
        With Cells(i, 1)
            Select Case .Interior.ColorIndex
                Case 3
                    lib = "non conforme"
                Case 6
                    lib = "acceptable"
                Case 43
                    lib = "non conforme"
            End Select
            .Offset(0, 1).Value = lib
        End With
    Next i
     
    End Sub
    Reste à savoir si le nombre 15000 ne peut pas être modulé, c'est à dire défini en fonction du nombre de lignes informées.

  4. #4
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonjour,

    Etant sous 2013, tu pourrais chercher à exploiter des possibilités apparues depuis 2007 et qui devraient se révéler plus rapide que les for each sur des plages conséquentes.

    Soit c'est un one shot et tu n'as pas besoin de VBA pour aller vite
    Soit ce sont des traitements répétitifs et tu exploites en VBA les pistes que t'a donné l'enregistreur de macro en pensant à exploiter les cellules visibles après un filtre.

    Donc de base :
    • tu mets un filtre auto sur ta colonne
    • tu fais trier par couleur - tu choisis la 1ère
    • tu fais filtrer par couleur - tu choisis cette 1ère couleur
    • Si ta couleur 1 est le rouge, dans la 1ère cellule à côté du rouge, tu mets conforme
    • Tu double-clic sur la poignée de recopie, Excel te recopie conforme sur toutes les cellules adjacentes aux rouges sans avoir à scroller avec la souris...
    • tu fais "effacer les filtre..."
    • tu reprends le tri par couleur en changeant la couleur et en étendant la sélection
    • tu refais un filtre sur cette couleur 2 etc..

    C'est bien plus rapide à faire qu'à écrire
    Le fait de faire un tri de couleur avant de faire un filtre est destiné à éviter les ruptures de plages si tu as des cases d'autres couleurs, blanches par exemple, ce qui perturberait l'automatisme de la poignée de recopie.
    Si toute ta colonne est avec tes 3 couleurs, tu peux ne faire que du filtre ce qui ira encore plus vite...

    cordialement,

    Didier

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 491
    Points : 155
    Points
    155
    Par défaut
    Bonjour

    Merci pour vos réponse, j'ai du faire une erreur dans le titre car je suis sous 2003 et non 2013.

    En tout cas, un grand merci car j'ai pu grace à vous faire un code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub valeur_couleur()
    Dim c As Range
     
    For Each c In Range("E2", [E5000].End(xlUp))
    If c.Interior.ColorIndex = 3 Then c.Offset(0, 1) = "Non acceptable"  'rouge.non conforme
    If c.Interior.ColorIndex = 6 Then c.Offset(0, 1) = "Acceptable" 'jaune.acceptable
    If c.Interior.ColorIndex = 43 Then c.Offset(0, 1) = "Conforme" 'vert.conforme
    Next c
     
    End Sub
    Encore merci

    Nini

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  3. [XL-2007] problème de codage en vba ("copie d'une partie d'une cellule dans une cellule vide")
    Par skipeemed dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 26/10/2010, 17h01
  4. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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