mise en forme conditionnelle Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
a
an.pi
Membre fidèle
Membre fidèle
Messages : 254
Inscrit le : 15 mai 2008
Version d'Excel : 2007 FR

Message par an.pi » 26 avril 2016, 10:34

Pour tenter de comprendre mon desir, mon écriture

En modifiant la date du 28/04/2016 en 26/04/2016 on remarque l'application d'une mise en forme
RVRVRV.xlsm
mon écriture primitive
(60.08 Kio) Téléchargé 6 fois
Le Bon et le Rapide s’excluent mutuellement.
De la discussion jaillit la lumière.
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 446
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 26 avril 2016, 12:04

Autre problème : l'ordre des MFC a son importance.
1) faire remonter la seconde à la place de la première et supprimer toutes les coches interrompre.
2) il me semble que ta MFC n'est pas définie complètement pour ce que tu veux :
Je pense qu'on s'en approche de plus près avec ceci :
=ET($D4>=AUJOURDHUI();OU($D5<AUJOURDHUI();ET($D4=AUJOURDHUI();$D5=AUJOURDHUI())))
Avec celle-ci tu évites d'avoir à la fois aujourd'hui et le jour suivant mis en forme. Tu n'as qu'aujourd'hui et dans ce cas tous les aujourd'hui, ou bien le prochain jour mais juste la 1re ligne si plusieurs sont sur le même jour.
Ce n'est peut-être pas ça, mais cela me choquait d'avoir 2 jours différents signalés.
a
an.pi
Membre fidèle
Membre fidèle
Messages : 254
Inscrit le : 15 mai 2008
Version d'Excel : 2007 FR

Message par an.pi » 26 avril 2016, 12:26

OK pour la MFC.
Maintenant lorsque j'ajoute une date. Comment ne pas emplifier le nombre de lignes de MFC.
Une copie de la procédure me conviendrai. :oops:
Avec les réponses je fais un pas supplémentaire dans l'ecriture VBA
Annette
Le Bon et le Rapide s’excluent mutuellement.
De la discussion jaillit la lumière.
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 446
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 26 avril 2016, 12:38

Retour sur ta macro :
Private Sub Workbook_Open()
    Dim plage As Range, fml As String
    Sheets("Feuil1").Unprotect
    Set plage = Sheets("Feuil1").Range("C4:F1000")
    plage.FormatConditions.Delete
    fml = "=ET($D4>=AUJOURDHUI();OU($D5<AUJOURDHUI();ET($D4=AUJOURDHUI();$D5=AUJOURDHUI())))"
    With plage.FormatConditions.Add(xlExpression, , fml)
        .Interior.Color = vbYellow
        With .Font
            .FontStyle = "Bold Italic"
            .Color = vbRed
        End With
    End With
    fml = "=$D4>AUJOURDHUI()"
    With plage.FormatConditions.Add(xlExpression, , fml).Font
        .FontStyle = "Bold Italic"
        .Color = vbBlue
    End With
    'Sheets("Feuil1").Protect DrawingObjects:=False, Contents:=True, Scenarios:=False
    Sheets("Feuil1").Activate
    ActiveWindow.Zoom = 150
End Sub
Si la feuille doit être protégée, réactiver la protection...
Les autres éléments étaient inutiles :
EnableEvents : pas d'interaction avec la feuille, donc pas de possibilités d'évènements, et de plus il n'y en a aucun de programmé...
ScreenUpdating : il peut être utile de le mettre à False pendant le déroulement, lorsqu'il y a une interaction avec la feuille entrainant une mise à jour de l'affichage, ce n'est pas le cas ici. Si on l'a mis à False, on le remet à True à la fin.
Les sélections auraient constitué une interaction avec la feuille, mais étant inutiles, on s'en dispense...
On active la feuille, à la fin seulement, pour assurer qu'à l'ouverture ce soit bien celle-ci qui s'affiche (dans ce cas, activer est un service au bénéfice de l'utilisateur !)
J'en oublie certainement... :mrgreen:

Bon courage.

Effectivement, à l'ouverture ça ne suffit pas, donc en faire une procédure autonome, à transférer dans Module1 :
Sub RéactiveMFC()
    Dim plage As Range, fml As String
    Sheets("Feuil1").Unprotect
    Set plage = Sheets("Feuil1").Range("C4:F1000")
    plage.FormatConditions.Delete
    fml = "=ET($D4>=AUJOURDHUI();OU($D5<AUJOURDHUI();ET($D4=AUJOURDHUI();$D5=AUJOURDHUI())))"
    With plage.FormatConditions.Add(xlExpression, , fml)
        .Interior.Color = vbYellow
        With .Font
            .FontStyle = "Bold Italic"
            .Color = vbRed
        End With
    End With
    fml = "=$D4>AUJOURDHUI()"
    With plage.FormatConditions.Add(xlExpression, , fml).Font
        .FontStyle = "Bold Italic"
        .Color = vbBlue
    End With
    'Sheets("Feuil1").Protect DrawingObjects:=False, Contents:=True, Scenarios:=False
End Sub
A l'ouverture cela devient :
Private Sub Workbook_Open()
    RéactiveMFC
    Sheets("Feuil1").Activate
    ActiveWindow.Zoom = 150
End Sub
Et mettre : RéactiveMFC à la fin de la procédure saut (qui ne me paraît pas remplir tout à fait son office, mais j'ai assez bouffé de Select aujourd'hui)...
anpi_RVRVRV.xlsm
(62.49 Kio) Téléchargé 8 fois
a
an.pi
Membre fidèle
Membre fidèle
Messages : 254
Inscrit le : 15 mai 2008
Version d'Excel : 2007 FR

Message par an.pi » 26 avril 2016, 13:18

Merci beaucoup pour le temps passer. Je clos le dossier, la procédure fonctionne .Pour le reste des améliorations je m'en passerai pour l'instant.
Annette
Le Bon et le Rapide s’excluent mutuellement.
De la discussion jaillit la lumière.
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message