XL 2019 (Résolu) VBA - Mise en surbrillance de ligne (fonction dans ruban)

Julien_B

XLDnaute Nouveau
Bonjour à tous,

J'ai ce petit code VBA qui semble fonctionner à 90%, et qui me permet de mettre en surbrillance la ligne entière selon la cellule sélectionnée.

VB:
Option Explicit

Dim highlightActive As Boolean

Sub ToggleConditionalFormatting()
    Dim ws As Worksheet
    Set ws = ActiveSheet
    
    highlightActive = Not highlightActive
    
    If highlightActive Then
        ApplyConditionalFormatting ws
        MsgBox "La mise en forme conditionnelle a été activée.", vbInformation
    Else
        RemoveConditionalFormatting ws
        MsgBox "La mise en forme conditionnelle a été désactivée.", vbInformation
    End If
    
    ' Activer le rafraîchissement de l'écran sur la feuille active
    ws.Application.ScreenUpdating = True
End Sub

Sub ApplyConditionalFormatting(ws As Worksheet)
    With ws.Cells.FormatConditions.Add(Type:=xlExpression, Formula1:="=LIGNE()=CELLULE(""ligne"")")
        .Interior.Color = RGB(214, 220, 228)
    End With
    
    ' Activer le rafraîchissement de l'écran spécifiquement pour cette feuille
    'ws.EnableCalculation = True
    ws.Application.ScreenUpdating = True
End Sub

Sub RemoveConditionalFormatting(ws As Worksheet)
    ws.Cells.FormatConditions.Delete
    
    ' Activer le rafraîchissement de l'écran spécifiquement pour cette feuille
    'ws.EnableCalculation = True
    ws.Application.ScreenUpdating = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  
ActiveSheet.Application.ScreenUpdating = True


End Sub

Dans l'idée, je compte activer et désactiver cette fonction via un bouton de commande dans le ruban Excel. Le seul hic, c'est que le rafraîchissement (screenupdating) ne fait pas en temps réel, c'est à dire que la colorisation des lignes de change pas à chaque changement de sélection à la souris. Concrètement, cela fonctionne si j'entre une valeur dans une cellule, mais pas lors du changement de sélection.

Ce type de fonction marche très bien sur un fichier donné en y mettant une simple MFC et en y ajoutant un Application.screenupdating = true dans le code de la feuille directement. Mais comme je compte utiliser cette fonction de manière universelle, je ne peux pas entre de code VBA dans Thisworkbook, ou dans une feuille, je dois garder tout le code dans un module standard de mon fichier Personnal.xlsb pour pouvoir l'utiliser dans mon ruban.

Quelqu'un a-t-il une idée?

Juien
 

patricktoulon

XLDnaute Barbatruc
re ben inclu le dans ton ruban VOIR CUSTOMUI 🤣
Soit dans ton xlsb soit dans un xlsam(macro complémentaire) ou tu aura au préalable intégrer ton/tes boutons
pour le customui tu a dans les ressources creatorRibbonX qui est gratuit et assiste les débutants dans la conception d'un/des onglet supplémentaire
 

Julien_B

XLDnaute Nouveau
Bonjour Patricktoulon,

Je suis bien parvenu à intégrer la macro dans mon ruban et j'arrive bien à l'activer via un bouton. C'est juste que le code semble manquer d'un petit quelque chose.
Je ne comprends pas très bien la réponse.
 

Julien_B

XLDnaute Nouveau
Problème résolu,

Je suis passé par un module de classe à part et cela semble fonctionner :).

Pour infos, dans le module standard:

VB:
Option Explicit

Public highlightActive As Boolean
Dim appEvents As New EventClassModule

Sub ToggleConditionalFormatting()
    highlightActive = Not highlightActive
    
    If highlightActive Then
        Set appEvents.App = Application
        ApplyConditionalFormatting activeSheet
        MsgBox "Mode surbrillance activé.", vbInformation
    Else
        RemoveConditionalFormatting activeSheet
        Set appEvents.App = Nothing
        MsgBox "Mode surbrillance désactivé.", vbInformation
    End If
    
    Application.ScreenUpdating = True ' Activer le rafraîchissement de l'écran
End Sub

Sub ApplyConditionalFormatting(ws As Worksheet)
    ' Supprimer d'abord toute mise en forme conditionnelle existante
    ws.Cells.FormatConditions.Delete
    
    ' Ajouter une nouvelle mise en forme conditionnelle
    With ws.Cells.FormatConditions.Add(Type:=xlExpression, Formula1:="=LIGNE()=CELLULE(""ligne"")")
        .Interior.Color = RGB(214, 220, 228)
    End With
End Sub

Sub RemoveConditionalFormatting(ws As Worksheet)
    ws.Cells.FormatConditions.Delete
End Sub

Ensuite, dans le module de classe:
Code:
Option Explicit

Public WithEvents App As Application

Private Sub App_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    ' Accéder à la variable publique highlightActive dans le module standard
    If Module5.highlightActive Then
        Module5.ApplyConditionalFormatting activeSheet ' Appliquer la mise en forme conditionnelle
    End If
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
314 841
Messages
2 113 482
Membres
111 877
dernier inscrit
thierry@1965