Microsoft 365 Modifier la couleur de fond d'une cellule lorsque l'on clique dessus

  • Initiateur de la discussion Initiateur de la discussion Alain 79
  • Date de début Date de début

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 !

Alain 79

XLDnaute Occasionnel
Supporter XLD
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
 

Pièces jointes

Solution
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...
bonsoir
VB:
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.
 
Oui j'ai oublié de mettre la macro modifiée :
Code:
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
Et de joindre le fichier après modification
 

Pièces jointes

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
 
le formulaire n'est pas un tableau structuré mais sert uniquement à saisir des informations (en D5 à D11) qui alimenteront le tableau.
Ok.

Il y a, comme indiqué, ci-dessus une MFC dans une cellule pour indiquer lorsque la feuille n'est plus protégée.
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
 

Pièces jointes

- 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

Discussions similaires

Réponses
5
Affichages
368
Retour