Microsoft 365 mise en forme conditionnel VBA

jamespatagueul

XLDnaute Occasionnel
Bonjour a tous,

je souhaiterai pouvoir réaliser un fichier avec mise en forme conditionnel en vba.
dans l'exemple, sur la feuil1 la source, sur la feuil2 le futur tableau, pour lequel je ne connais pas encore les ligne ni colonne.

J'ai noter plus d'explication dans le fichier.
Merci de votre aide.

Cordialement
 

Pièces jointes

  • MFC VBA.xlsx
    10.3 KB · Affichages: 5

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir jamespatagueul,
Vraiment pas clair.
En Feuil1 vous avez des blocs de 2 colonnes de 4 lignes, ce qui ferait 8 cellules.
Cependant vos lignes en Feuil2 n'ont que 7 cellules, et vos plages ont soit 12 cellules (b3:c8) soit 8 cellules (b10:c13)
Doué celui qui comprendra. Quoi coller où ?
Vous ne pouvez pas mettre l'attendu sur les deux lignes de la Feuil3 pour qu'on puisse comprendre ?
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
J'espère avoir été assez claire.
Guère plus.
Quand vous faites référence à B3:C8 alors on a deux Vert. Lequel prend t-on ? 80/100 ou 92/100 ?

Bref, en PJ un truc que vous pouvez adapter à votre guise :
Code:
' Plage est la plage qui sera traitée
' L1 à L4 définit les 4 niveaux où seront apppliquées les couleurs (L1 à L4 compris entre 0 et 1, car traités en % )
' Les 4 couleurs peuvent être redéfinies

Sub MFC(Plage As Range, L1, L2, L3, L4)
    Couleur1 = RGB(0, 0, 0)         'Noir
    Couleur2 = RGB(255, 0, 0)      'Rouge
    Couleur3 = RGB(250, 190, 0)   'Orange
    Couleur4 = RGB(0, 180, 80)      'Vert
    For Each cell In Plage
        Select Case cell
            Case Is <= L1: cell.Font.Color = Couleur1
            Case Is <= L2: cell.Font.Color = Couleur2
            Case Is <= L3: cell.Font.Color = Couleur3
            Case Is <= L4: cell.Font.Color = Couleur4
        End Select
    Next cell
End Sub
Ainsi la macro est universelle, puisqu'on y définit la plage, les niveaux, et les 4 couleurs à utiliser.
La syntaxe est MFC Plage à utilisée, 4 niveaux de couleurs. Par ex MFC [A3:H17], 0.39, 0.59, 0.79, 1
En PJ un test avec :
VB:
Sub TestMFC()
    MFC [A3:H17], 0.39, 0.59, 0.79, 1
End Sub
 

Pièces jointes

  • MFC VBA (2).xlsm
    22.4 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Est ce vous avez lu ce que j'ai écrit :
Ainsi la macro est universelle, puisqu'on y définit la plage, les niveaux, et les 4 couleurs à utiliser.
La syntaxe est MFC Plage à utilisée, 4 niveaux de couleurs. Par ex MFC [A3:H17], 0.39, 0.59, 0.79, 1
Donc avec MFC(Plage, L1,L2,L3,L4) vous définissez ce que vous voulez.
Il suffit que par macro vous fournissiez les bons paramètres.

Quand vous faites référence à B3:C8 alors on a deux Vert. Lequel prend t-on ? 80/100 ou 92/100 ?
Et surtout, ne répondez pas aux questions posées.:confused:
 

jamespatagueul

XLDnaute Occasionnel
Re, effectivement, mauvaise plage; il n y a que 4 couleurs.
Quand vous faites référence à B3:C8 alors on a deux Vert. Lequel prend t-on ? 80/100 ou 92/100 ?
Et surtout, ne répondez pas aux questions posées.:confused:

Navré.

autre point :
Sub TestMFC()
MFC [A3:L3], 0.39, 0.59, 0.79, 1
End Sub
comment paramétré les % pour que ce soit la valeur d'une cellule, et non pas 0.39 ...,1

Merci encore, j'arrive a avancer doucement
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Par ex simplement avec :
VB:
Si les % sont exprimés entre 0 et 100:
MFC [A3:L3], [C6]/100,[C5]/100,[C4]/100,[C3]/100

Si les % sont exprimés en ... % :
MFC [A3:L3], [C6],[C5],[C4],[C3]
La seconde solution est meilleure, je ne vois pas pourquoi exprimer les seuils par des valeurs de 0 à 100, pour les appliquer à des cellules comprises entre 0 et 1 en format %. Autant mettre directement les seuils en %.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Quand on voit [C3] c'est la cellule C3 de la bonne page.
Donc dans votre cas, il faut mettre Sheets("Base").[C3], sinon il va en [C3] de la feuille Exemple qui est la feuille par défaut.
ou plus simple quand il y en a plusieurs :
VB:
Sub TestMFC()
    With Sheets("Base")
        MFC [A3:L3], .[C6], .[C5], .[C4], .[C3]
        MFC [A5:L5], .[C11], .[C10], .[C9], .[C8]
    End With
End Sub
 

Pièces jointes

  • MFC VBA (2) (2).xlsm
    25 KB · Affichages: 1

sylvanu

XLDnaute Barbatruc
Supporter XLD
Peut être plus simple pour vous, et on peut modifier les couleurs.
Dans une plage de seuils, on définit les 4 niveaux ainsi que la couleur désirée.
1656598606741.png
 

Pièces jointes

  • MFC VBA (3).xlsm
    22.5 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
"Just for the fun" ... une V4 où on peut aussi définir la couleur de fond. Peut être plus visuel.
Avec :
VB:
Sub MFC(Plage As Range, Seuils As Range)
    Dim tablo(4, 2): N = 1
    For Each cell In Seuils
        tablo(N, 0) = cell.Value
        tablo(N, 1) = cell.Font.Color
        tablo(N, 2) = cell.Interior.Color
        N = N + 1
    Next cell
    For Each cell In Plage
        Select Case cell
            Case Is <= tablo(4, 0): cell.Font.Color = tablo(4, 1): cell.Interior.Color = tablo(4, 2)
            Case Is <= tablo(3, 0): cell.Font.Color = tablo(3, 1): cell.Interior.Color = tablo(3, 2)
            Case Is <= tablo(2, 0): cell.Font.Color = tablo(2, 1): cell.Interior.Color = tablo(2, 2)
            Case Is <= tablo(1, 0): cell.Font.Color = tablo(1, 1): cell.Interior.Color = tablo(1, 2)
        End Select
    Next cell
End Sub
Même syntaxe d'utilisation.
 

Pièces jointes

  • MFC VBA (4).xlsm
    22.8 KB · Affichages: 2

Discussions similaires

Statistiques des forums

Discussions
314 608
Messages
2 111 114
Membres
111 044
dernier inscrit
MauriceLebon