Mise en forme conditionnelle Excel date

Bonjour j'ai un fichier pour gestion allocations familiale ou je voudrais utiliser la mise en forme conditionnelle date.
je m'explique je voudrais dans la colonne C (Enfant) change de couleur en orange losque l'enfant à atteint l'age de 6 ans pour recevoir les allocations, et en même temps la (colonne i) le nombre d'enfants change quand il dépasse l'age de 6 ans automatiquement bien sûr suivant la date de ça naissance.
Bien sûr l'application sera dans tout le tableau.

Bonjour Zinou2019,

Un solution avec macro VBA te conviendrait-elle ?

Bonsoir GVIALLES oui bien sûr je suis prenneur l'essentiel c'est de repodre à mes attentes.

merci bonne soirée.

Bonjour Zinou019,

Ma proposition en pièce jointe.

J'ai apporté à ton classeur les modifications suivantes :

  • J'ai supposé que la colonne "MAT." contenait un matricule identique pour les enfants d'une même famille (nécessaire car tu veux compter le nombre d'enfants de cette famille entre 6 et 18 ans)
  • J'ai ajouté une feuille "Paramètre" dans laquelle se trouve 2 cellules colorisées avec les couleurs désirées et nommées afin de pouvoir les récupérer dans le code VBA (Cette technique te permet de modifier les couleurs de fonds rouge et orange pour d'autres couleurs si tu le désires).
  • J'ai ajouté un bouton permettant d'exécuter le code de colorisation.
  • Lors de l'ouverture du classeur, le code VBA de colorisation est automatiquement exécuté.

Ci dessous le code VBA commenté :

Option Explicit
'Déclaration des constantes pour tout le module
Const c6Ans = 6
Const c18Ans = 18
Sub Recoloriser()
    Application.Cursor = xlWait
    mefAges
    Application.Cursor = xlDefault
    MsgBox "Fin du traitement de colorisation", vbExclamation, "OK"

End Sub
Sub mefAges()
    'Déclaration des constantes - A ajuster si besoin
    Const cSheetNumber = 1
    Const cColMatricule = 1
    Const cColDateNaissance = 4
    Const cColNombre = 9
    Const cColCouleurDeb = 3
    Const cColCouleurFin = 8

    'Déclaration des variables utilisées dans la suite de la procédure
    Dim oSheet As Worksheet
    Dim oRange As Range
    Dim lRowMax As Long
    Dim lRow As Long, iNb As Integer
    Dim lCouleur6Ans As Long, lCouleur18Ans As Long
    Dim i As Long
    Dim lRowDeb As Long
    Dim sMatricule As String
    Dim lAge As Integer

    'Initialisation des couleurs à utiliser
    lCouleur6Ans = ThisWorkbook.Names("Couleur6Ans").RefersToRange.Interior.Color
    lCouleur18Ans = ThisWorkbook.Names("Couleur18Ans").RefersToRange.Interior.Color

    'Affectation de la feuille à modifier
    Set oSheet = ThisWorkbook.Worksheets(cSheetNumber)

    'Recherche de la dernière ligne renseignée dans la feuille
    lRowMax = oSheet.Cells(oSheet.Rows.Count, 1).End(xlUp).Row

    'On initialise toutes les couleurs de fond en transparent
    Set oRange = oSheet.Range(oSheet.Cells(2, cColCouleurDeb), oSheet.Cells(lRowMax, cColCouleurFin))
    oRange.Interior.ColorIndex = 0
    'On efface le nombre d'enfants allocataires
    Set oRange = oSheet.Range(oSheet.Cells(2, cColNombre), oSheet.Cells(lRowMax, cColNombre))
    oRange.Value = ""

    'On initialise les variables du traitement
    sMatricule = ""
    iNb = 0
    lRowDeb = 2

    'On boucle sur toutes les lignes renseignées du tableau
    For i = 2 To lRowMax
        'On affecte la plage de cellules à coloriser
        Set oRange = oSheet.Range(oSheet.Cells(i, cColCouleurDeb), oSheet.Cells(i, cColCouleurFin))
        'On récupère l'âge à partir de la date de naissance
        lAge = recupAge(oSheet.Cells(i, cColDateNaissance).Value)
        'On colorise le fond de la plage de cellules en fonction de l'âge récupéré
        Select Case lAge
            Case Is = c6Ans
                oRange.Interior.Color = lCouleur6Ans
            Case Is = c18Ans
                oRange.Interior.Color = lCouleur18Ans
        End Select

        'Dans le cas où le matricule n'est pas le même que le précédent
        If sMatricule <> CStr(oSheet.Cells(i, cColMatricule).Value) Then
            'Si le nombre d'enfants entre 6 et 18 ans est plus grand que 0, on l'indique dans la première ligne de la famille précédente
            If iNb > 0 Then
                oSheet.Cells(lRowDeb, cColNombre).Value = iNb
            End If
            'On affecte le nouveau matricule dans la variable
            sMatricule = CStr(oSheet.Cells(i, cColMatricule).Value)
            'Si l'enfant a entre 6 et 18 ans, on donne la valeur 1 au nombre d'enfant
            If lAge = c6Ans Then
                iNb = 1
            End If
            'On stocke le numéro de la première ligne pour la famille
            lRowDeb = i
        Else
            'Si le matricule est identique à celui stocké et si l'enfant a entre 6 et 18 ans on incrémente de 1
            If lAge = c6Ans Then
                iNb = iNb + 1
            End If

        End If
    Next
    'Si le nombre d'enfants entre 6 et 18 ans est plus grand que 0, on l'indique dans la première ligne de la dernière famille
    If iNb > 0 Then
        oSheet.Cells(lRowDeb, cColNombre).Value = iNb
    End If

End Sub
'Fonction retournant 6, 18 ou 0 suivant la date de naissance de l'enfant
Function recupAge(dDateNaissance As Variant) As Long
    Dim lDiff As Long

    'On s'assure la la valeur en entrée est bien une date
    If IsDate(dDateNaissance) Then
        'On calcule l'age par différence en années entre la date de naissance et la date du jour
        lDiff = DateDiff("yyyy", CDate(dDateNaissance), Now())
        'On affecte la valeur de retour suivant le résultat obtenu
        Select Case lDiff
            Case Is >= 18
                recupAge = c18Ans
            Case Is >= 6
                recupAge = c6Ans
            Case Else
                'Dans le cas où l'enfant a moins de 6 ans on renvoie 0
                recupAge = 0
        End Select
    Else
        'Dans le cas où la valeur en entrée n'est pas une date, on renvoie 0
        recupAge = 0
    End If

End Function

bonjour GVIALLES toutes mes excuses pour le retard les vacances sont passé par là je vais voir si le fichier me convient.

merci beaucoup pour votre aide et votre effort.

bonne journée

vba

Zinou2019,

Les 2 dernières lignes que tu as ajouté ont une date de naissance en 2018 et 2019 : aucune colorisation car l'âge des enfant est inférieur à 6.

Bonjour m^me sur la colonne i il n' ya pas de chiffre pourquoi!

Bonjour Zinou2019,

Du fait que le matricule que tu as indiqué dans la colonne A, les lignes de 9 à 14 sont considérés dans la même famille.

v

oui effectivement merci beaucoup pour ton aide bonne journée

C'est fait bonne fin de journée.

Rechercher des sujets similaires à "mise forme conditionnelle date"