Pages

10 mars 2009

Flashage sans format conditionnel

Encore une intervention d’un lecteur qui me demande s’il est possible de faire flasher les cellules(cf. messages du 2 et du 6 mars) sans passer par des formats conditionnels.

Certes, c’est possible, mais au prix cependant d’une complexification sensible de la macro. Voici une solution, une des plus simples mais probablement pas la plus compacte. Ceci dit, elle est assez facile à comprendre :

Cette macro suppose que l’on ait donné le nom « Tableau » à la partie intérieure du tableau, donc en excluant les titres de ligne et de colonne.
On pourrait aussi attribuer le nom au tableau entier, titres compris, mais il faudrait alors modifier la macro en conséquence.

Remarque – Un avantage de cette solution par rapport aux solutions des deux articles précédents est qu’aucun flashage ne survient quand on active une cellule située hors du tableau mais placée dans une ligne, ou dans une colonne, du tableau.

2 commentaires:

  1. cduigou a dit :

    Une autre solution, sans boucle, sans variables, uniquement avec des objets range... (Tableau représente les données titres compris) :
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ' on ne travaille que si la cellule cliquée est unique
    If Target.Cells.Count = 1 Then
    ' on vérifie que la cellule cliquée est fait bien partie de "Tableau"
    If Not Intersect(Target, Range("Tableau")) Is Nothing Then
    With Range("Tableau")
    .Interior.ColorIndex = xlNone
    .Font.ColorIndex = 0
    Range(.Cells(1), Target).Interior.ColorIndex = 6
    Range(.Cells(1), Target).Font.ColorIndex = 5
    ' Cas particulier de la 1ère ligne/1ère colonne
    If Target.Row > .Cells(1, 1).Row And Target.Column > .Cells(1).Column Then
    Range(.Cells(1), Target.Offset(-1, -1)).Interior.ColorIndex = xlNone
    Range(.Cells(1), Target.Offset(-1, -1)).Font.ColorIndex = 0
    End If
    Target.Interior.ColorIndex = 8
    Target.Font.ColorIndex = 3
    End With
    End If
    End If
    End Sub

    RépondreSupprimer
  2. Certes, cela marche bien sans boucle ni variable.

    En revanche, c'est plus long - surtout si l'on remplace mes "GoTo Fin par des Exit Sub" - mais, surtout, cela n'efface pas le flashage quand on clique en dehors du bloc.

    Ceci dit, votre solution montre bien la variété des codes possibles pour réaliser une certaine tâche !

    RépondreSupprimer