VBA - Mise en forme condictionelle en VBA

Bonjour,

J'ai créer un fichier de saisi de Facture avec une mise en forme conditionnelle qui permet de "colorier" les factures avec deux couleurs alternées pour chaque mois : janvier en bleu, février en jaune, mars en bleu ... . Le truc c'est que j'ai une Macro qui permet d'insérer une ligne en haut de ma liste de facture et une seconde Marco qui permet de les trier par mois, je fais également des "copié collé" parfois sur certaines cellules. Du coup ma mise en forme conditionnelle à l'origine en deux règles sur l'ensemble des cellules se divisent en énormément de règles divisées sur pleins de cellules.

En soit ça fonctionne, mais je me demande si cela ne va pas faire "ramer" mon fichier à force de rajouter des règles de mise en forme ?

Du coup j'ai pensé à une macro dans le code source de la page qui reprend ce principe si quelqu'un sait le faire ?

Merci d'avance,

Antho-

Bonjour Antho,

Proposition de code pour la colorisation des lignes de facture:

Sub ColorLignes()
    Const cFirstCol = 2
    Const cLastCol = 8

    Dim lColor1 As Long, lColor2 As Long
    Dim oCell As Excel.Range
    Dim oRange As Excel.Range
    Dim oSheet As Excel.Worksheet

    Set oSheet = ActiveSheet
    'Initialisation des 2 couleurs
    lColor1 = RGB(217, 225, 242)
    lColor2 = RGB(255, 242, 204)

    'Parcours de la feuille
    For Each oCell In oSheet.UsedRange.Columns(cFirstCol).Cells
        If IsDate(oCell.Value) Then
            Set oRange = oSheet.Range(oSheet.Cells(oCell.Row, oCell.Column), oSheet.Cells(oCell.Row, cLastCol))
            'si mois pair alors couleur1
            If Month(oCell.Value) Mod 2 = 0 Then
                oRange.Interior.Color = lColor1
            'si mois impair alors couleur2
            Else
                oRange.Interior.Color = lColor2
            End If
        End If
    Next

    'On fait le ménage
    Set oRange = Nothing
    Set oSheet = Nothing

End Sub

NB : Si tu utilises le code VBA, n'omets pas de supprimer les règles appliquées aux cellules.

Merci pour ton retour, ça a l'air de fonctionner par contre es que c'est possible de la mettre dans le "code de la feuille" afin que dès que j'écrive la date dans la première cellule, l'ensemble de la ligne se colorie sans avoir à cliquer sur un bouton ?

Cordialement,

Antho-

Antho,

Je te propose de d'activer la macro de colorisation à la fin de la macro "Trier_facture_bl()"

Oui j'y ai pensé mais j'aime bien le fait que la case se colorie directement à la saisie (comme le fait actuellement la mise en forme conditionnelle), du coup si c'est possible de l'ajouter sans passer par le bouton pour l'activer c'est mieux.

En ce cas, je te propose d'ajouter le code suivant en fin de procédure "Worksheet_Change" de la feuille "BL FACT" :

    
    Dim oRange As Excel.Range
    If Target.Column = 2 And IsDate(Target.Value) Then
        Set oRange = ActiveSheet.Range(ActiveSheet.Cells(Target.Row, Target.Column), ActiveSheet.Cells(Target.Row, 8))
        ColorLigne oRange
    End If

et dans "module2" cette nouvelle procédure :

Sub ColorLigne(zRange As Excel.Range)
    Dim lColor1 As Long, lColor2 As Long
    Dim oCell As Excel.Range
    'Initialisation des 2 couleurs
    lColor1 = RGB(217, 225, 242)
    lColor2 = RGB(255, 242, 204)

    Set oCell = zRange.Cells(1, 1)
    If IsDate(oCell.Value) Then
        'si mois pair alors couleur1
        If Month(oCell.Value) Mod 2 = 0 Then
            zRange.Interior.Color = lColor1
            'si mois impair alors couleur2
        Else
            zRange.Interior.Color = lColor2
        End If
    End If

    'On fait le ménage
    Set oCell = Nothing

End Sub

Ok c'est bien !

Petit problème quand je fais insérer ça met une couleur direct dans la ligne, possible de la garder vide ?

Second problème quand je met une date et que ensuite je l'efface, la ligne conserve la couleur.

Du coup quand je trie, j'ai des lignes de couleurs vides.

A voir si tu peux l'arranger,

Merci par avance !

capture

Antho,

Sans monter une usine à gaz, je ne vois pas comment remédier aux inconvénients que tu mentionnes.

Solution: supprimer la ligne lorsqu'elle ne convient pas.

D'accord très bien, merci quand même

Rechercher des sujets similaires à "vba mise forme condictionelle"