Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Microsoft 365Modifier la couleur de fond d'une cellule lorsque l'on clique dessus
Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Bonsoir,
J'ai un tableau situé à l'intérieur d'une feuille et je souhaiterai qu'en cliquant sur une cellule du tableau la ligne entière change de couleur.
Je joins un exemple avec les explications du problème rencontré.
Par avance je remercie la ou les personnes qui voudront bien m'aider
bonjour
mfc sur les deux tableaux avec deprotection et reprotection
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo fin
ActiveSheet.Unprotect
Dim zone As Range
Select Case True
Case Not Intersect(Target, [C5:D11]) Is Nothing
Set zone = [C5:D11]
Case Not Intersect(Target, [b16:h25]) Is Nothing
Set zone = [b16:h25]
End Select
[C5:D11].FormatConditions.Delete
[b16:h25].FormatConditions.Delete
If ActiveCell = "" Then Exit Sub
With zone.FormatConditions.Add(xlExpression, Null, "=LIGNE(" & zone.Cells(1).Address(False, False) & ")=" & ActiveCell.Row)
.Font.Color = vbRed
.Interior.Color = vbYellow
.Font.Bold = True...
La question principale est de savoir si quand on clique ailleurs la ligne du tableau doit reprendre sa présentation initiale, ce qui est nettement plus compliqué...
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo fin
Cells.FormatConditions.Delete
If Target = "" Then Exit Sub
Dim zone As Range
Set zone = [c2:d11]
With zone.FormatConditions.Add(xlExpression, Null, "=LIGNE(" & zone.Cells(1).Address(False, False) & ")=" & ActiveCell.Row)
.Font.Color = vbRed
.Interior.Color = vbYellow
.Font.Bold = True
End With
fin:
End Sub
Bonjour,
Tout merci pour vos réponses.
Chris : Bien sûr, lorsque l'on clique sur une cellule extérieure au tableau tout redevient normal.
PatrickToulon : La macro fonctionne, sauf à modifier la zone (pour moi 'est le tableau qui m'intéresse), mais ce ne pas compliqué de modifier.
Par contre, comme ma feuille est protégée, je dois enlever la protection en incluant au début de la macro : ActiveSheet.Unprotect, ce qui impose de remettre la protection après.
Ce qui n'est pas trop gênant pour mon fichier puisqu'il comporte une barre d'outils personnalisé avec un bouton permettant de mettre ou sortir la protection.
VB:
Sub ProtectionFeuille()
Dim ActualSheet As String
ActualSheet = ActiveSheet.Name
Sheets(ActualSheet).Select
Application.ScreenUpdating = False
If Sheets(ActualSheet).Range("A1") = 0 Then
ActiveSheet.Unprotect
Sheets(ActualSheet).Range("A1") = 1
Application.ScreenUpdating = True
ElseIf Sheets(ActualSheet).Range("A1") = 1 Then
Sheets(ActualSheet).Range("A1") = 0
Sheets(ActualSheet).Range("A1").Select
Application.ScreenUpdating = True
ActiveSheet.Protect
End If
End Sub
Et à l'aide d'une mise en forme conditionnelle, un message apparaît dans une cellule pour indiquer que la protection est désactivée.
Mais la macro SelectionChaange.... efface la mise en forme conditionnelle.
Ah, on est compliqué, mais c'est la magie d'Excel et des macros de solutionner ces petits problèmes dès que l'on trouve le bon code.
ToFatBoy : le formulaire n'est pas un tableau structuré mais sert uniquement à saisir des informations (en D5 à D11) qui alimenteront le tableau.
Il y a, comme indiqué, ci-dessus une MFC dans une cellule pour indiquer lorsque la feuille n'est plus protégée.
En tout cas, merci pour vos réponses et espérant pouvoir trouver d'autres réponses au problème restant.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo fin
ActiveSheet.Unprotect
Cells.FormatConditions.Delete
'If Target = "" Then Exit Sub
Dim zone As Range
Set zone = [Tableau13]
With zone.FormatConditions.Add(xlExpression, Null, "=LIGNE(" & zone.Cells(1).Address(False, False) & ")=" & ActiveCell.Row)
.Font.Color = vbRed
.Interior.Color = vbYellow
.Font.Bold = True
End With
fin:
End Sub
bonjour
mfc sur les deux tableaux avec deprotection et reprotection
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo fin
ActiveSheet.Unprotect
Dim zone As Range
Select Case True
Case Not Intersect(Target, [C5:D11]) Is Nothing
Set zone = [C5:D11]
Case Not Intersect(Target, [b16:h25]) Is Nothing
Set zone = [b16:h25]
End Select
[C5:D11].FormatConditions.Delete
[b16:h25].FormatConditions.Delete
If ActiveCell = "" Then Exit Sub
With zone.FormatConditions.Add(xlExpression, Null, "=LIGNE(" & zone.Cells(1).Address(False, False) & ")=" & ActiveCell.Row)
.Font.Color = vbRed
.Interior.Color = vbYellow
.Font.Bold = True
End With
fin:
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFormattingCells:=True
End Sub
Re-Bonjour,
C'est pratiquement parfait, pour moi je n'ai besoin de sélectionner uniquement le 2éme tableau structuré en remplaçant [b16:h25] par [Tableau13].
Les cellules D5😀11 ne sont pas verrouillées car elles permettent la saisie sans enlever la protection de la feuille.
Tout fonctionne bien lorsque je clique sur une cellule du tableau, mais lorsque que je clique en dehors la protection se sort automatiquement.
En fait lorsque je clique en dehors du tableau, la protection de la feuille ne doit pas être désactivée, et je ne peux cliquer que sur les cellulesD5😀11 qui ne sont pas verrouillées
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo fin
ActiveSheet.Unprotect
Dim zone As Range
Select Case True
'Case Not Intersect(Target, [C5:D11]) Is Nothing
'Set zone = [C5:D11]
Case Not Intersect(Target, [Tableau13]) Is Nothing
Set zone = [Tableau13]
End Select
'[C5:D11].FormatConditions.Delete
[Tableau13].FormatConditions.Delete
If ActiveCell = "" Then Exit Sub
With zone.FormatConditions.Add(xlExpression, Null, "=LIGNE(" & zone.Cells(1).Address(False, False) & ")=" & ActiveCell.Row)
.Font.Color = vbRed
.Interior.Color = vbYellow
.Font.Bold = True
End With
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFormattingCells:=True
fin:
End Sub
Je suppose que ladite cellule est en dehors du tableau et donc c'est bien ce que je disais : il ne faut pas utiliser "Cells.FormatConditions.Delete". 😉
Dans la macro Worksheet_SelectionChange que tu as postée en #6 tu déproteges ta feuille en début de macro, mais tu ne la reprotèges pas en fin de macro. 🙃
Bien, je crois avoir trouvé la solution avec la macro de PatrickToulon adaptée à mon cas.
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo fin
Dim zone As Range
Select Case True
Case Not Intersect(Target, [Tableau13]) Is Nothing
Set zone = [Tableau13]
End Select
[Tableau13].FormatConditions.Delete
If ActiveCell = "" Then Exit Sub
With zone.FormatConditions.Add(xlExpression, Null, "=LIGNE(" & zone.Cells(1).Address(False, False) & ")=" & ActiveCell.Row)
.Font.Color = vbRed
.Interior.Color = vbYellow
.Font.Bold = True
End With
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFormattingCells:=True
[A1] = 0
fin:
End Sub
Marci PatrickToulon pour la solution et à TooFatBoy pour avoir répondu
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD