Colorer les cellules automatiquement selon leur valeur

Bonsoir,

j'ai découvert VBA ce Week end car je voulais améliorer un formulaire du boulot. En parcourant ce forum j'ai réussi à sortir un petit code.

Pour commencer doucement mon but était de mettre en vert les cellules contenant le mot "OK" et de ne rien faire si elles sont vides. J'ai réussi à faire ce que je voulais mais j'ai créé un bouton pour actualiser la macro. Ma question est : comment faire pour supprimer ce bouton et que la cellule devienne verte dés que j'aurai écrit "ok" et redevienne "sans remplissage" si il n'y a rien dedans voici mon code:

Sub essai()

Range("k7:k300").Select

For Each Cell In Selection

If Cell.Value = "OK" Then

Cell.Interior.Color = RGB(0, 176, 80)

End If

If Cell.Value = "" Then

Cell.Interior.ColorIndex = xlColorIndexNone

End If

Next

End Sub

merci d'avance.

Bonsoir,

La solution existe en VBA, mais pourquoi ne pas utiliser la mise en forme conditionnelle "Texte qui contient..." qui est bien plus simple et efficace dans ce cas ?

Bref c'est peut-être juste pour t'exercer

Bonjour,

Pourquoi n'utilises-tu pas une MFC (mise en forme condititionnelle) et ceci sans VBA ?

Cdlt.

je sais que ça existe mais je voudrai découvrir le VBA

Re,

En tout cas, si le but est de s’entraîner sans MFC voici le code à mettre dans la feuille concernée qui colore les cellules de la colonne K contenant OK en vert

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count = 1 And Target.Column = 11 Then
        If Target.Value = "OK" Then
            Target.Interior.Color = RGB(0, 176, 80)
        End If

        If Target.Value = "" Then
            Target.Interior.ColorIndex = xlColorIndexNone
        End If
    End If
End Sub

@+

OK merci je vais installer ça de suite et surtout essayer de comprendre tous ces termes.

encore merci.

Re,

Explication pour t'aider :

L'événement Worksheet_Change permet d’exécuter une action sur une cellule (ou des cellules) lorsque celle-ci est modifiée.

Target est la variable désignant cette cellule (ou ces cellules).

De plus la 2ème ligne se traduit par : Si UNE cellule est modifiée et qu'elle se situe en colonne 11 alors :

Ensuite j'ai inséré ta macro en remplaçant cell par target.

Bonne soirée,

Re,

Et la même, un peu différentes !...

Cdlt.

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("K7:K300")) Is Nothing Then
        If IsEmpty(Target) Then
            Target.Interior.Color = xlNone
        End If
        If UCase(Target.Value) = "OK" Then
            Target.Interior.Color = RGB(0, 176, 80)
        End If
    End If
End Sub

ok ça marche bon rien d'étonnant pour vous,

et aussitôt j'ai voulu modifier le code pour mettre du gris dans la colonne 12 lorsque je mets aussi "OK" dans une cellule mais là j'ai une erreur. nom ambigu détecté Worksheet_Change

Est-il possible de mettre 2 macros identiques dans ma feuille1 ?

j'ai recopié le même code avec ElseIf en plus et en modifiant la colonne et la couleur et c'est ok facile pour un débutant

et vraiment merci de votre aide à tous je reviendrai vers vous dans pas trop longtemps pour des codes un peu plus poussés...pour moi bien évidement

Bonjour,

La mise à jour :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("K7:L300")) Is Nothing Then
        If IsEmpty(Target) Then
            Target.Interior.Color = xlNone
        End If
        If UCase(Target.Value) = "OK" Then
            Select Case Target.Column
                Case 11: Target.Interior.Color = RGB(0, 176, 80)    'vert
                Case 12: Target.Interior.Color = RGB(217, 217, 217)   'gris
            End Select
        End If
    End If
End Sub

Bonsoir,

Ca devient une habitude, on se suit avec Jean-Eric

Ma version :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count = 1 Then
        If Target.Column = 11 Then
            If Target.Value = "OK" Then
                Target.Interior.Color = RGB(0, 176, 80)
            End If
        Else
            If Target.Column = 12 Then
                If Target.Value = "OK" Then
                    Target.Interior.Color = RGB(217, 217, 217)
                End If
            End If
        End If
        If Target.Value = "" Then
            Target.Interior.ColorIndex = xlColorIndexNone
        End If
    End If
End Sub

Bonne soirée,

OUAHHHHH ….donc je vois 2 façons de coder comme des pros...plus une troisième la mienne

est-ce que dans le domaine du codage vous vous tirez la bourre à celui qui codera en moins de caractères possibles par exemple ou vous lancez vous des défis sur des gros problèmes, pour moi c'est dingue mais on êtes des artistes !

je voudrais copier des lignes d'une feuille (Demandes d'achat) d'un premier classeur vers une autre feuille (Envoyer pour réception) d'un autre classeur, si une condition de présence de date est respectée.

j'enverrai plusieurs lignes mais les colonnes iraient de A à J.

pouvez-vous me donner quelques indices car je voudrais chercher un peu de mon côté avec de vous demander la solution

Re,

Allez, un peu plus court.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lColor As Long
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("K7:L300")) Is Nothing Then
        If IsEmpty(Target) Then Target.Interior.color = xlNone
        If UCase(Target.Value) = "OK" Then
            lColor = IIf(Target.Column = 11, 5287936, 14277081)
            Target.Interior.color = lColor
        End If
    End If
End Sub

Pour ta nouvelle question, clôture ce sujet et crée en un nouveau en joignant un fichier.

Cdlt.

ok merci pour tout

Rechercher des sujets similaires à "colorer automatiquement leur valeur"