Colorier uniquement une cellule qui change

gia17

XLDnaute Junior
Bonjour à tous,

Dans un classeur excel j'ai une très grande plage (H20:EK50) dans laquelle j'ai mis une validation de donnée. Je ne peux saisir que 3 valeurs : "A", "P" ou "X".

Selon la valeur de la cellule je veux appliquer une MFC. Ca je sais faire mais le fichier devient "lourd" ou "lent" et je pensais qu'avec un code VBA je pourrai l'alléger.

En VBA, je sais créer un code pour lancer une boucle sur les lignes et colonnes pour vérifier la valeur de la cellule et la colorier. J'ai placé ce code dans l’événement Worksheet_Change mais c'est encore plus long qu'avec les MFC car à chaque fois qu'une cellule est modifiée, la vérification se fait sur toute la plage.

D'où ma question, comment puis-je modifier le code pour colorier uniquement la cellule qui vient d'être modifiée sans parcourir toute la plage (H20:EK50) ???

J'avais essayé en définissant les constantes i=activecell.row et c=activecell.coloum mais par exemple quand je modifier la cellule H20 et que je fais "entrer", le code avec i et c prend en compte la cellule H21 (et si je fais la flèche "droite", ca prend en compte la cellule I20...)

Merci par avance de votre aide, bonne journée
Cordialement
 

DoubleZero

XLDnaute Barbatruc
Re : Colorier uniquement une cellule qui change

Bonjour, gia17, le Forum,

Peut-être avec le code suivant... si j'ai bien compris le besoin.

Code:
Option Explicit
Dim AVANT
Private Sub Worksheet_Change(ByVal c As Range)
If Not Intersect(c, Range("h20:ek50")) Is Nothing Then If c <> AVANT Then c.Interior.ColorIndex = 6
End Sub
Private Sub Worksheet_SelectionChange(ByVal c As Range)
If Not Intersect(c, Range("h20:ek50")) Is Nothing Then AVANT = c
End Sub

A bientôt :)

P. S. : Gros poutous, Modeste :D:D
 
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : Colorier uniquement une cellule qui change

Bonjour gia17,

L'événement Worksheet_Change reçoit en argument un Range nommé Target ... qui représente la cellule qui vient d'être modifiée!?

La "lourdeur" du fichier est-elle réellement lié à la présence des MFC? Pas certain!?

Sans indications plus précises de ta part, tu peux peut-être t'inspirer de ce qui suit:
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, [H20:EK50]) Is Nothing Then Exit Sub
    If Target.Count > 1 Then Exit Sub
    Select Case Target.Value
        Case "A"
            Target.Interior.ColorIndex = 3
        Case "P"
            Target.Interior.ColorIndex = 4
        Case "X"
            Target.Interior.ColorIndex = 8
        Case Else
            Target.Interior.ColorIndex = xlNone
    End Select
End Sub

[Edit:] Salut jeune fille ;)
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 957
Membres
103 990
dernier inscrit
lamiadebz