Evenement au clic (Worksheet_SelectionChange ?)

Bonjour

J'ai un tableau Excel assez conséquent (tableau double entrée, avec des titres dans la ligne 1 et dans la colonne A) en terme de lignes (der_lig) et de colonnes (der_col) , dans lequel j'aimerais, quand je sélectionne la cellule i , j que les cellules 1 , j et i , 1 se mettent en "surbrillance" (se colorent en jaune dans mon cas), pour bien voir à quels titres la cellule fait référence (surtout que les titres de la ligne 1 sont à 45° ).

EDIT il faudrait également que les cellules modifiées reviennent à leur couleur d'origine une fois la cellule i , j désélectionnée...

Je crois que me souvenir que pour activer un évènement au clic il faut utiliser "Worksheet_SelectionChange" mais il me manque un bout de code...

C'est assez frustrant car à l'époque cela ne me posait pas de problème mais comme ça fait longtemps que je n'ai pas touché au VBA je sollicite votre aide...

Merci d'avance !

EDIT2 : j'ai trouvé ça sur le site https://www.excel-pratique.com/fr/vba/evenements_feuille.php mais je ne sais pas manipuler Target..

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim i%
Dim j%
Dim der_lig%
Dim der_col%

'pour dimensionner la plage de cellules dans laquelle s'applique l'évènement :

der_lig = Range("A1").End(xlDown).Row
der_col = Range("A1").End(xlToRight).Column

For i = 2 To der_lig
For j = 3 To der_col

'et là c'est la grand vide, ça ne fonctionne évidemment pas, sans compter qu'il faut après cette action remettre la couleur d'origine (252, 213, 180) de la ligne 2 à 33 et (184, 204, 228) de la ligne 34 à la dernière ligne, et  xlColorIndexNone pour les colonnes :

Cells(1, j).Interior.Color = RGB(255, 255, 0) And Cells(i, 1).Interior.Color = RGB(255, 255, 0)
Next j
Next i

End Sub

Bonjour,

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim der_lig%, der_col%
    With Me.Range("A1")
        der_lig = .End(xlDown).Row
        der_col = .End(xlToRight).Column
        .Resize(der_lig, der_col).Interior.ColorIndex = xlColorIndexNone
        .Cells(Target.Row, 1).Interior.Color = vbYellow
        .Cells(1, Target.Column).Interior.Color = vbYellow
    End With
End Sub

Cordialement.

Tu l'écris comme une condition (un peu comme tu parles)

il faut écrire comme 2 exécutions :

Cells(1, j).Interior.Color = RGB(255, 255, 0) 
Cells(i, 1).Interior.Color = RGB(255, 255, 0)

Je n'ai pas essayai le reste ...


ah trop tard ... bonjour MFerrand !

Merci beaucoup pour ton intérêt ! ça sent bon mais c'est pas tout à fait ça

Comme je l'expliquais dans le commentaire du code ci-dessus (que j'ai rajouté quand tu étais en train de répondre je pense, désolé...), les cellules de la 1ère ligne n'ont pas de remplissage, contrairement à celle des cellules de la 1ère colonnes qui en plus change à partir de la ligne 33 (je joins le fichier pour plus de facilité)

8fichier-test.xlsm (25.08 Ko)

De plus, la couleur des cellules de la colonne 1 est bien réinitialisée, mais pas la couleur des cellules de la ligne 1 : le jaune reste, et je ne vois pas où le réinitialiser dans ton code...

Salut JulKing,

c'est vrai qu'on perd vite la main! Quelques semaines suffisent parfois...

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
iCol = Cells(1, Columns.Count).End(xlToLeft).Column
iRow = Range("A" & Rows.Count).End(xlUp).Row
'
Range(Cells(1, 2), Cells(1, iCol)).Interior.Color = Cells(1, 1).Interior.Color
Range("A2:A" & iRow).Interior.Color = Cells(1, 1).Interior.Color
'
If Not Application.Intersect(Target, Range(Cells(2, 2), Cells(iRow, iCol))) Is Nothing Then
    Cells(1, Target.Column).Interior.ColorIndex = 6
    Cells(Target.Row, 1).Interior.ColorIndex = 6
End If
'
End Sub

Je pense que c'est ce que tu cherches!

A+

19reperes.xlsm (15.29 Ko)

Merci beaucoup curulis !!!! Je l'ai légèrement adapté pour répondre à mes contraintes de couleur, ça fonctionne parfaitement... Merci encore !

Si tu introduis une colonne vide en B, rien ne peut fonctionner !

J'ai fait un léger correctif de cadrage...

Pour réintroduire tes couleurs, tu reprends l'ensemble... pour le mécanisme de base, tu l'as.

NB- Dans mon code, j'opérais en adressage relatif à partir de A1 (comme il s'agit de A1, cet adressage se confond avec l'adressage sur la feuille, mais cela me permettait d'enlever toute couleur du tableau d'un seul coup ; pour rétablir une couleur de fond dans le tableau hors entête, tu peux adresser : .Offset(1, 1).Resize(der_lig - 1, der_col - 1).Interior....)

Cordialement.

Merci à vous. Avec la solution de curulis57 avec la colonne B vide cela fonctionne bien tout de même

Peut-être que ta solution est plus "propre" (je la garde sous le coude) mais je comprends mieux celle de curulis que j'ai appliqué !

merci encore

Bonjour tout le monde,

Bonjour MFerrand,

et comment qu'il faut garder un code de MFerrand sous le coude!

Il va bien falloir que je m'attaque à ce fameux "resize"! Très joli code!

Merci MFerrand! Tu n'as pas un fan club?

A+

Je vais te faire une confidence ! J'utilisais assez peu Resize il n'y a pas si longtemps, et avec des commandes type :

plage.Value = plage.Value avec plage définie sous la forme : Range(Cells(a, b), Cells(c, d)) j'avais un certain nombre de cas où ça plantait et il fallait que je contourne...

Puis en observant le code émis par certains membres du Forum, j'ai noté à une époque une utilisation assez massive de Resize...

C'était H2so4 ou Banzai, ou les deux ! Je ne sais plus bien ! Il y avait des Resize chez d'autres, mais plus sporadiques. C'était peut-être fortuit, et peut-être le hasard qui m'a fait tomber sur cette utilisation de façon répétée, mais une fois l'attention captée, dès qu'il y en avait un dans un bout de code, c'est la première chose que je voyais !

Avant que ça tourne à l'obsession, je me suis dit qu'il fallait que j'essaie... et je me suis rendu compte que des expressions qui plantaient, réécrites avec Resize passaient sans problème !

Quand quelque chose va tout seul, l'habitude est vite prise !! En plus à l'usage tu constates que ça facilite énormément l'écriture : à partir d'une cellule, avec Offset et Resize tu définis n'importe quelle plage...

Cordialement.

Rechercher des sujets similaires à "evenement clic worksheet selectionchange"