Bonjour,

Voilà, je vais vous illustrer mon problème, en espérant être assez claire.

J'ai un classeur dans lequel la première feuille comporte de la cellule B1 jusqu'à la cellule FLP1, des date allant du 01/01/2010 jusqu'au 31/12/2021.

Dans la colonne A, de A2 jusqu'à A27, j'ai une suite d'horaires allant de 7:30 jusqu'à 20:00.

Il y a une durée d'une demi-heure entre chacune des horaires.

J'ai une macro qui applique une mise en forme conditionnelle au colonnes dont la date est un samedi ou dimanche, cette macro s'exécute à l'ouverture du classeur, dans une procédure Auto_Open.

Pour pouvoir suivre la cellule active, j'utilise une procédure événementielle SelectionChange, qui met automatiquement la cellule active en noir sur fond blanc.

Le problème est que cette procédure événementielle ne s'exécute pas lorsque je suis sur une colonne de samedi ou dimanche, j'ai comme l'impression que la MFC l'emporte sur la procédure événementielle et applique son format.

Ma question est la suivante :

Y aurait t-il un moyen de pouvoir utiliser la procédure événementielle même si je me déplace sur une colonne de samedi ou dimanche en restituant la couleur précédente lorsque je quitterai la cellule avec les flèches ou en cliquant sur une autre cellule?

Je vous soumet ci-dessous, les codes des deux procédures, l'une pour la création de la MFC et l'autre pour l'événement SelectionChange.

Je vous remercie d'avance si vous pouvez m'aider.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
Sub FormatConditionnel()
Range(Cells(1, 2), Cells(27, 4384)).Select
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=JOURSEM(B$1;2)>5"
With Selection.FormatConditions(1)
     .Interior.ColorIndex = 3
     .Font.ColorIndex = 6
End With
Range("B2").Select
End Sub
Et maintenant le code de la macro événementielle :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Public old_Cel As Range, old_color As Integer, old_color2 As Integer
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("B2:FLP27")) Is Nothing Then
     If Target.Count = 1 Then
          If Not old_Cel = "" Then
          Range(old_Cel).Interior.ColorIndex = old_color
          Range(old_Cel).Font.ColorIndex = old_color2
          End If
     old_Cel = Target.Address
     old_color = Target.Interior.ColorIndex
     old_color2 = Target.Font.ColorIndex
     Target.Font.ColorIndex = 1
     Target.Interior.ColorIndex = 2
     End If
End If
End Sub
Amicalement.