Cellule avec couleur

Bonjour à toutes et tous.

Savez-vous s’il est possible de modifier automatiquement la couleur de fond d’une cellule en fonction de la date.

Exemple, j’ai une ligne de A1 a D1. En A1 une date.

Si la date en A1 est inférieure à la date du jour, mettre la ligne A1 D1 avec couleur de fond.

En sachant que j’ai une énorme quantité de ligne comme A1 D1

Hello
oui c’est possible, et sans VBA, met dans la MFC

=$A1<aujourdhui()

Colonne A figée avec $ et cellule non figée qui suivra chaque ligne de A1 à A300 Si tu as une date dans cette plage, l’augmenter dans le champ d’application si tu en as plus…

puis dans format si tes lignes vont jusqu’a A300
=$A$1:$D$300

ou alors tu mets un fichier exemple, ce qui sera plus simple pour te répondre.
MFC date inferieur a aujourdhui.xlsx (9,4 Ko)

Voilà mon fichier.

Dedans j ai une macro appelée test qui me sert pour le fonctionnement.

Du coup est il possible de mettre un codage en macro qui du coup va remplir de couleur la ligne ou la date de la cellule colonne C est passée

SF_INBOX_33549_0b1640_TEST.xlsm (21,6 Ko)

Hello
a l’ouverture du fichier les dates anterieur a celle d’aujourdhui sont verifié et la ligne en question mise en couleur
macro en module 3

Sub VerifierDates()

    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    
    Set ws = ThisWorkbook.Sheets(1) ' à adapter si besoin
    
    lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row
    
    For i = 1 To lastRow
    
        If IsDate(ws.Cells(i, 3).Value) Then
        
            If ws.Cells(i, 3).Value < Date Then
                ws.Range(ws.Cells(i, 3), ws.Cells(i, 6)).Interior.Color = RGB(255, 200, 200)
            Else
                ws.Range(ws.Cells(i, 3), ws.Cells(i, 6)).Interior.ColorIndex = xlNone
            End If
      End If
  Next i
End Sub

et la macro lançant la verification dans ThisWorbook

Private Sub Workbook_Open()
    VerifierDates
End Sub

SF_INBOX_33549_0b1640_TEST.xlsm (23,8 Ko)

Ca fonctionnement plutôt bien.

Mais est-ce que cela serait possible que le tri soit fait à chaque fois que je clique sur valider plutôt que de devoir fermer et ouvrir le fichier ?

donc ça suppose que tu compte mettre des dates déjà dépassées le jour même ?

Non mais le pc et le fichier sont en fonctionnement permanent.

Du coup la seule façon d’actualiser c’est lorsque je rentre une nouvelle date.

Ou une actualisation automatique des que je l’utilise et sans forcément entrer de date

à mettre dans le code de la feuille où les dates sont saisies, si la date en C est antérieure à aujourd’hui, la ligne se colorie automatiquement même sans cliquer sur « Valider »

Private Sub Worksheet_Change(ByVal Target As Range)

    ' Vérifie si la modification concerne la colonne C
    If Not Intersect(Target, Me.Columns("C")) Is Nothing Then
            Application.EnableEvents = False
                Dim cell As Range
                For Each cell In Target
                    If IsDate(cell.Value) Then
                          If cell.Value < Date Then
                    Me.Range(Me.Cells(cell.Row, 3), Me.Cells(cell.Row, 6)).Interior.Color = RGB(255, 200, 200)
                Else
                    Me.Range(Me.Cells(cell.Row, 3), Me.Cells(cell.Row, 6)).Interior.ColorIndex = xlNone
                End If
             End If
         Next cell
       Application.EnableEvents = True
    End If
End Sub

SF_INBOX_33549_0b1640_TEST.xlsm (27,5 Ko)

Comment tu veux automatiser un truc basé sur une date sans mettre de date ?
:thinking:

Est-ce qu’une actualisation toutes les minutes, par exemple, conviendrait ?

Daniel

Oui effectivement je pourrais essayer

Dans le module ThisWorkbook :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.OnTime Intervalle, "Actu", , False
End Sub

Private Sub Workbook_Open()
    Intervalle = Now + TimeValue("00:01:00")
    Application.OnTime Intervalle, "Actu"
End Sub

Dans Module3 :

Public Intervalle As Date
Sub Actu()
    Dim C As Range
    Intervalle = Now + TimeValue("00:01:00")
    Application.OnTime Intervalle, "Actu"
    With Sheets("Consignes temporaires")
      For Each C In .Range("C5", .Cells(.Rows.Count, 3).End(xlUp))
        If C.Value < Date Then
          C.Resize(, 4).Interior.Color = RGB(0, 176, 240)
        Else
            C.Resize(, 4).Interior.ColorIndex = xlNone
        End If
      Next C
    End With
    Debug.Print Now
End Sub


SF_INBOX_33549_0b1640_TEST.xlsm (26,0 Ko)

Daniel

Alors j’ai mis en application la réponse à Daniel, merci.

Donc je vais voir à l’usage si ça va.

Merci de votre aide

J’aurai une petite question.
Dans ton fichier, aurais-tu une macro pour désactiver le clic droit ?
Depuis que j’ai récupéré ton fichier, le clic droit ne fonctionne plus, j’ai du passer par le registre et regedit pour régler mon souci, et je ne veux pas le re-telecharger pour tester…

@taz :

C’est cette ligne :

For Each cb In Application.CommandBars
cb.Enabled = False
Next

Mets à True pour les réactiver

Daniel

Merci, ma question était juste pour confirmer ma supposition. Je suis passé par regedit en renommant le dossier Excel dans le registre en excel_old. Ainsi à l’ouverture, ça réouvre Excel comme lors d’un premier démarrage,avec tous les add-ins et macros désactivés. Ça refonctionnait après ma manip.
J’en ai profité pour me faire un petit fichier Excelreset.reg

Oui faut que je regarde

Oui, tu as une macro ,
J’ai eu la confirmation par Daniel. Comme je ne garde pas les fichiers, même après les avoir mis à la corbeille, j’avais le souci, donc ce serait bien à l’avenir de prévenir si ce genre de macro est dans un fichier.
J’avais même tenté via une manip en VBA

Application.CommandBars("Ply").Enabled = True
Application.CommandBars("Workbook Tabs").Enabled = True
Application.CommandBars("Cell").Enabled = True