XL 2016 Colorier des cellules en fonction d'autres cellules

Lorenzini

XLDnaute Occasionnel
Bonjour,

J'ai un tableau pour lequel j'aimerais que des cellules se mettent en surbrillance par rapport à d'autres...
Je joint une image pour mieux me faire comprendre ; c'est là que je réalise que ce qui me paraît simple est inabordable pour moi, je veux dire à le traduire dans VBA pour que mon baudet de PC fasse cette chose toute simple que je lui demande...
J'aimerais que lorsque je clique dans une cellule de la colonne B (qui va de B3 à B22...ce sont des noms), en + de la ligne qui se met en surbrillance (et s'arrête à la dernière valeur trouvée), les TITRES au-dessus de ces valeurs se mettent AUSSI en surbrillance (la même couleur).
P.ex. ici, lorsque je clique sur "Laurent", la ligne se met bien en vert, super...
Elle s'arrête bien à "583 193
exemple 1.jpg
", bien, encore super, y'a plus rien après, donc c cool, c'est çà que je voulais, que la surbrillance s'arrête à la dernière valeur sur la ligne...
Là où je trouve mes limites au vu de mes maigres connaissances en VBA, c'est que je ne sais pas comment arriver à ce que les titres de colonnes (ici, "Source des éléments" et "Phare") se mettent aussi en couleur (la même pour faire simple ; verte).
J'aimerais donc que les titres au-dessus des valeurs concernées se mettent en surbrillance. C'est ce "au-dessus des valeurs concernées" que je ne sais comment traduire en VBA ??
Autre exemple, si je clique sur "PizzaYolo", j'aimerais que "Citadelle" et "Pont" se mettent en couleur...
Quelqu'un pourrait-il m'aider SVP ; je sèche...
Merci d'avance,
 

Pièces jointes

  • Hero Wars.xlsm
    31.6 KB · Affichages: 13

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @Lorenzini :),

Avec une petite procédure évènementielle et deux MFC.

La procédure évènementielle crée trois noms de classeur:
  1. Ligne qui est le numéro de ligne de la cellule sélectionnée si elle appartient à la plage b3:n22
  2. Colonne qui est le numéro de colonne de la cellule sélectionnée si elle appartient à la plage b3:n22
  3. DerCol qui est le numéro de la dernière cellule de la ligne (de la cellule sélectionnée de la plage b3:n22) qui n'est pas vide
Une MFC sur la plage b3:n22 de formule:
VB:
=ET(LIGNE(B3)=ligne;COLONNE(B3)>=2;COLONNE(B3) <= DerCol)

Et une MFC sur la plage des titres (e2:n2) de formule:
VB:
=ET(DECALER(E$1;ligne-1;0)<>"")

Le code de la procédure évènementielle est :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim der&
   If Intersect(Target, Range(plage)) Is Nothing Then
      ActiveWorkbook.Names.Add Name:="ligne", RefersToR1C1:=0
      ActiveWorkbook.Names.Add Name:="colonne", RefersToR1C1:=0
   Else
      ActiveWorkbook.Names.Add Name:="ligne", RefersToR1C1:=ActiveCell.Row
      ActiveWorkbook.Names.Add Name:="colonne", RefersToR1C1:=ActiveCell.Column
      If Cells(ActiveCell.Row, "n") <> "" Then der = Cells(1, "n").Column Else der = Cells(ActiveCell.Row, "O").End(xlToLeft).Column
      ActiveWorkbook.Names.Add Name:="DerCol", RefersToR1C1:=der
   End If
End Sub
 

Pièces jointes

  • Lorenzini- Hero Wars MFC- v1.xlsm
    29.8 KB · Affichages: 22

Lorenzini

XLDnaute Occasionnel
Bonsoir @Lorenzini :),

Avec une petite procédure évènementielle et deux MFC.

La procédure évènementielle crée trois noms de classeur:
  1. Ligne qui est le numéro de ligne de la cellule sélectionnée si elle appartient à la plage b3:n22
  2. Colonne qui est le numéro de colonne de la cellule sélectionnée si elle appartient à la plage b3:n22
  3. DerCol qui est le numéro de la dernière cellule de la ligne (de la cellule sélectionnée de la plage b3:n22) qui n'est pas vide
Une MFC sur la plage b3:n22 de formule:
VB:
=ET(LIGNE(B3)=ligne;COLONNE(B3)>=2;COLONNE(B3) <= DerCol)

Et une MFC sur la plage des titres (e2:n2) de formule:
VB:
=ET(DECALER(E$1;ligne-1;0)<>"")

Le code de la procédure évènementielle est :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim der&
   If Intersect(Target, Range(plage)) Is Nothing Then
      ActiveWorkbook.Names.Add Name:="ligne", RefersToR1C1:=0
      ActiveWorkbook.Names.Add Name:="colonne", RefersToR1C1:=0
   Else
      ActiveWorkbook.Names.Add Name:="ligne", RefersToR1C1:=ActiveCell.Row
      ActiveWorkbook.Names.Add Name:="colonne", RefersToR1C1:=ActiveCell.Column
      If Cells(ActiveCell.Row, "n") <> "" Then der = Cells(1, "n").Column Else der = Cells(ActiveCell.Row, "O").End(xlToLeft).Column
      ActiveWorkbook.Names.Add Name:="DerCol", RefersToR1C1:=der
   End If
End Sub
Alors là ! Chapeau bas ! Confirmation, je n'aurais jamais trouvé... avant... mmmh... longtemps... Un tout TOUT GRAND MERCI mapomme ! C'est génial le résultat ! J'adore ! MERCI :)
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Lorenzini, mapomme,

tu as écrit : « C'est génial le résultat ! J'adore ! »

alors voici ce que tu peux faire : sans cliquer dessus, met ton pointeur de souris sur la case rectangulaire "J'aime" en bas du post #2 de mapomme ; tu verras alors plusieurs émoticônes au-dessus, et en glissant ta souris vers le haut, tu peux cliquer sur l'un d'eux ; ici, c'est le 2ème icône, qui est ainsi : 😍

soan
 

Discussions similaires

Réponses
7
Affichages
216

Statistiques des forums

Discussions
312 086
Messages
2 085 197
Membres
102 814
dernier inscrit
JLGalley