IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Format conditionnel et événements [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 50
    Par défaut Format conditionnel et événements
    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.

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    En effet, la MEFC prime sur le format d'une cellule. C'est son but.
    A moins de supprimer momentanément par programmation la mise en forme conditionnelle et ce dans la procédure événementielle je ne vois pas très bien comment s'en sortir.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 50
    Par défaut
    Bonjour,

    Merci beaucoup, effectivement, la suppression momentannée de la mise en forme conditionnelle aurait corrigé partiellement le problème, mais de toute façon il aurait persisté lors de la circulation à l'intérieur même d'une colonne de samedi ou dimanche.

    C'est pourquoi j'ai choisi d'utiliser une autre méthode pour colorer les colonnes des samedis et dimanches, sans utiliser de mises en forme conditionnelles.

    Voici la procédure qui remplace ma macro qui créait une MFC.

    Ce n'est peut-être pas la meilleure solution mais ce code me donne entière satisfaction, dans la mesure ou il redonne la priorité à l'événement SelectionChange.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub CouleurSamDim()
    Dim Plage As Range, c As Range
    Set Plage = Range("B1:FLP1")
    For Each c In Plage
         If WeekDay(c.Value)>6 Then
              Range(Cells(c.Row, c.Column), Cells(27, c.Column)).Interior.ColorIndex = 3
              Range(Cells(c.Row, c.Column), Cells(27, c.Column)).Font.ColorIndex = 6
         End If
    Next c
    End Sub
    Amicalement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [E-03].re-Format conditionnel d'un graph
    Par Amandine P. dans le forum Excel
    Réponses: 7
    Dernier message: 16/05/2008, 13h50
  2. Format conditionnel sur un graphique
    Par Poletto dans le forum Excel
    Réponses: 7
    Dernier message: 08/05/2008, 12h36
  3. Format conditionnel vba et excel
    Par caloumaya dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/01/2008, 16h37
  4. format conditionnel d'une cellule
    Par hicham28 dans le forum Excel
    Réponses: 2
    Dernier message: 08/06/2007, 10h59
  5. Excel - macro (format conditionnel - run-time error 1004)
    Par Chewi dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 01/09/2006, 19h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo