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.
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 Commentaire(s):
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
By Hervé Thiriez, sur 8:05 AM
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 !
By Hervé Thiriez, sur 8:08 AM
Enregistrer un commentaire
<< Accueil