VBA : Mise en forme conditionnelle (xl(Not)Between) à la souris

Fermé
Rom - Modifié par baladur13 le 24/06/2016 à 11:43
 Rom - 27 juin 2016 à 10:16
Bonjour,

Je débute sur VBA et j'aurais voulu déboguer mon code afin de réaliser des mises en forme conditionnelles.
J'ai un tableau avec 6 colonnes : les 2 premières correspondent à des valeurs requises respectivement minimale et maximale, et les 4 dernières sont des mesures.

Je voudrais que les colonnes de mesures se colorent en vert ou en rouge selon que les mesures sont comprises ou non dans les spec (min et max).

Etant donné que j'ai beaucoup de lignes, je voudrais pouvoir sélectionner à la souris une ligne de mesures (exemple : A1 à D1) que je voudrais voir colorée, puis les cellules correspondant au min et au max.

Mon code est le suivant :

Sub MacroTableauVertOuRouge()
'
' MacroTableauVertOuRouge Macro
' Illustre la conformité ou non d'une mesure par rapport à une spec en colorant la cellule en vert ou en rouge
'

Dim Plage As Range
Set Plage = Application.InputBox("Choix de cellules", Type:=8)
MsgBox Plage.Address
MsgBox Plage.Worksheet.Name

Dim StrAdressCellMin As String
Set CellMin = Application.InputBox("Choix du min", Type:=8)


Dim StrAddressCellMax As String
Set CellMax = Application.InputBox("Choix du max", Type:=8)


    

 Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _
        Formula1:="=INDIRECT(" & CellMin & ")", Formula2:="=INDIRECT(" & CellMax & ")"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Font
        .Color = -16752384
        .TintAndShade = 0
    End With
    
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 13561798
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlNotBetween, _
        Formula1:="=INDIRECT(" & CellMin & ")", Formula2:="=INDIRECT(" & CellMax & ")"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Font
        .Color = -16777024
        .TintAndShade = 0
    End With
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 13421823
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
End Sub


J'ai obtenu la partie "traitement de la couleur" des cellules sélectionnées avec l'enregistreur de macro.
Pour l’exécuter, je clique sur un bouton à côté du tableau.
Je n'obtiens pas de message d'erreur après avoir lancé le programme et fait les 3 sélections (plage de cellules, min et max), mais rien ne se passe !
Avant d'avoir tenté de modifier ce qu'il y avait dans "Formula1" et "Formula2", tout fonctionnait très bien. C'est le fait de vouloir sélectionner ces cellules à la souris qui empêche le résultat espéré.

Je vous remercie pour toute aide que vous pourriez m'apporter !

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
A voir également:

2 réponses

EDIT : Je l'ai fait fonctionner à moitié. J'utilisais les =INDIRECT() pour rien, je les ai remplacés directement par mes &CellMin& et &CellMax&.

Résultat : j'obtiens bien mes cases colorées en rouge pour la ligne sur laquelle j'ai testé le macro et où les mesures n'étaient pas dans les spec. Seulement lorsque je modifie mes spec pour que les mesures sont comprises dedans, les cellules ne deviennent pas vertes. Je ne vois pas d'où ça vient pour le moment.
Après avoir mis en commentaire la seconde partie du code, j'en ai déduit que c'est la première partie qui a un souci étant donné qu'il ne se passe rien, alors que tout fonctionne quand je fais l'inverse (c'est-à-dire mettre en commentaire la première partie pour n'exécuter que la seconde --> les cases deviennent rouges dans les bonnes conditions).

Et dernier souci : j'aimerais modifier le code de façon à ce que les cellules traitées par le code du macro soient bien celles que je sélectionne au début à la souris, et non comme c'est le cas actuellement que ce soit la ou les cellules que j'ai sélectionnée(s) avant son exécution qui soient traitées ?

Merci !
0
Up.
Je précise qu'il s'agirait de mettre en forme chaque ligne de mesures en fonction de la spec de la même ligne. Pour illustrer ma demande, je joins un fichier : http://www.cjoint.com/c/FFBipQ5Kb3p
0