Question colorisation cellules en fonction de la selection

Bonjour à tous,

J'ai une question concernant une formule (que j'ai récupérée et modifiée) mais qui ne fonctionne pas exactement comme prévu.

Avec cette formule, lorsque je sélectionne une cellule, la ligne et la colonne de cette cellule se colorise. Ça c'est OK, par contre quand je clique sur une autre cellule, la couleur dans la ligne précédente s'enlève (ça c'est également OK), mais la couleur de la colonne précédente reste (c'est donc illisible très rapidement et c'est surtout pas l'effet recherché).

Ci-dessous le code :

Public old_color, old_sel
Option Explicit

Sub Worksheet_SelectionChange(ByVal sel As Range)
If Not old_sel = "" Then Range(old_sel).EntireRow.Interior.ColorIndex = old_color
old_sel = sel.Address
old_color = sel.EntireRow.Interior.ColorIndex
sel.EntireRow.Interior.ColorIndex = 33

If Not old_sel = "" Then Range(old_sel).EntireColumn.Interior.ColorIndex = old_color
old_sel = sel.Address
old_color = sel.EntireColumn.Interior.ColorIndex
sel.EntireColumn.Interior.ColorIndex = 33

End Sub

J'ai remarqué que si j'inverse la colonne et la ligne, ça inverse aussi le résultat, la ligne reste colorée et la colonne redevient sans couleur.

PS : si possible j'aimerai rajouté une limite à la coloration, que ça ne soit pas toute la ligne ou toute la colonne mais de B4 à B10 par exemple.

Merci d'avance pour votre aide.

Re-Bonjour,
J'ai continué à chercher et j'ai trouvé une solution, juste en changeant l'ordre de mes commandes (désolé je suis totalement novice donc je ne sais pas si c'est une "bonne" formule ou pas), mais voila le code :

Public old_color, old_sel
Option Explicit

Sub Worksheet_SelectionChange(ByVal sel As Range)
If Not old_sel = "" Then Range(old_sel).EntireColumn.Interior.ColorIndex = old_color
If Not old_sel = "" Then Range(old_sel).EntireRow.Interior.ColorIndex = old_color
old_sel = sel.Address
old_color = Range(old_sel).Interior.ColorIndex
sel.EntireColumn.Interior.ColorIndex = 33
sel.EntireRow.Interior.ColorIndex = 33

End Sub

Je garde le sujet ouvert au cas où une personne veuille bien m'aider pour limiter la colorisation des cellules (pas la ligne ou la colonne entière mais juste de telle à telle case)

Bonjour,

Voir avec ce code

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim r As Range
  Set r = Range("A2:W50")
  If Not Intersect(r, Target) Is Nothing Then
    r.Interior.ColorIndex = xlNone
    r.Rows(Target.Row + 1 - r.Row).Interior.ColorIndex = 33
    r.Columns(Target.Column + 1 - r.Column).Interior.ColorIndex = 33
  End If
End Sub

Slts

bonjour

une petite contribution à améliorer

13benoit.xlsm (15.20 Ko)

le code pour une plage

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If Intersect([A1:D24], Target) Is Nothing Then Exit Sub
Calculate
End Sub

Merci beaucoup de votre aide !!

Par contre je n'ai pas compris la solution avec "Calculate" ... c'est une autre manière d'écrire en VBA ?

J'ai presque réussi à faire ce que je voulais (voir fichier joint), avec même la colorisation qui ne se fait que lorsque j'ai un X dans la cellule. Par contre j'ai une erreur lorsque je sélectionne deux (ou plusieurs) cellules (sachant que je voudrais qu'il ne se passe rien).

8matrix.xlsm (18.55 Ko)

re

dans ce cas tu remplaces le tronçon Is nothing ....... par

 Is Nothing And Target.Count = 1 

nb) je suis naze en VBA

Merci ça fonctionne.

J'essaye maintenant de coloriser la colonne et les lignes avec un X quand je sélectionne une case entre E2 et O3. Genre je sélectionne la case F2, la colonne F se colorise mais aussi les lignes 13, 15 et 20 (parce qu'il y a un X). Si vous avez une idée je suis preneur :) mais je continue à chercher !

Rechercher des sujets similaires à "question colorisation fonction selection"