Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 Enregistrer une MFC

jui42

XLDnaute Junior
Bonjour le forum,
J'ai une question et je n'ai aucune idée de comment la développé...
En effet, je souhaite enregistrer une MFC via l'enregistreur de macro afin de l'intégrer dans un programme VBA qui fait pas mal de choses..
Le problème est que je n'y arrive pas et que je n'arrive pas à ecrire le code de la MFC directement. Je vous joint les fichiers, mon but est de colorier les cases "mesures" en vert si elles contiennent C et rouge si elle contiennent NC.

Merci beaucoup pour votre temps.
 

Pièces jointes

  • fiche_op.xlsm
    57.9 KB · Affichages: 2
  • tableau_controle.xlsm
    36.2 KB · Affichages: 1
  • 6.B27.xlsm
    16.2 KB · Affichages: 2

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Jui,
Je ne vois pas l'intérêt de passer par l'enregistreur de macro, autant la faire "à la main".
En PJ un essai avec la macro :
VB:
Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin: If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("I2:J1000")) Is Nothing Then
         Application.ScreenUpdating = False
        Select Case Target
            Case "C": Target.Interior.Color = RGB(0, 255, 0)         ' vert
            Case "NC": Target.Interior.Color = RGB(255, 0, 0)       ' rouge
            Case Else: Target.Interior.Color = RGB(255, 255, 255)   ' blanc
        End Select
    End If
Fin:
Application.ScreenUpdating = True
End Sub
L'exécution est automatique dès qu'on change une valeur dans les colonnes I:J, "C" vert, "NC" rouge.
 

Pièces jointes

  • 6.B27.xlsm
    20.3 KB · Affichages: 1

Lolote83

XLDnaute Barbatruc
Bonjour JUI42,
Ne sachant pas sur quel fichier exactement tu souhaitais cette MFC, je l'ai faite sur le "Tableau_Controle".
Voici donc le code
VB:
Sub MFC_Build()
    Application.ScreenUpdating = False
    With Sheets("Feuil1")
        .[A2].Select
        .Cells.FormatConditions.Delete
        '------------------------------------------------
        ' MFC pour C (VERT)
        '------------------------------------------------
        With Range("Tableau1[Mesures]")
            .FormatConditions.Add Type:=xlExpression, Formula1:="=$J2=""C"""
            .FormatConditions(.FormatConditions.Count).SetFirstPriority
            With .FormatConditions(1).Interior
                .PatternColorIndex = xlAutomatic
                .Color = RGB(0, 176, 80)
                .TintAndShade = 0
            End With
        End With
        '------------------------------------------------
        ' MFC pour NC (ROUGE)
        '------------------------------------------------
        With Range("Tableau1[Mesures]")
            .FormatConditions.Add Type:=xlExpression, Formula1:="=$J2=""NC"""
            .FormatConditions(.FormatConditions.Count).SetFirstPriority
            With .FormatConditions(1).Interior
                .PatternColorIndex = xlAutomatic
                .Color = RGB(255, 0, 0)
                .TintAndShade = 0
            End With
        End With
    End With
End Sub

ca qui donne une fois le programme exécuté



@+ Lolote83
 

jui42

XLDnaute Junior
Salut Lolote83 et sylvanu je viens de me reconnecter sur le fil ^^,

Merci pour vos solutions, je vais essayer cela de suite.
J'ai voulu passer par l'enregistreur de macro car mes essais de code directement en VBA n'était pas concluant. J'essaye cela et je reviens vers vous !
 

jui42

XLDnaute Junior
Re all, après un petit peu de cassage de tête voici le code nécessaire pour une MFC appliqué à un nombre de colonne variable.
Toute remarques est bonne à prendre
VB:
        For i = 1 To colonne
            ActiveSheet.Range("I1") = ("Mesures " & i)
            ActiveSheet.Range("I2:I8").Select
            
            Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
             "=SI(ESTVIDE($A2);FAUX;SI(OU(I2<INDEX($A2:$AA2;;EQUIV(""Valeur minimum"";$A$1:$AA$1;0));I2>INDEX($A2:$AA2;;EQUIV(""Valeur maximum"";$A$1:$AA$1;0)));VRAI;FAUX))"
            
                
            Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
            
            With Selection.FormatConditions(1).Font
                .Bold = True
                .Italic = False
                .TintAndShade = 0
            End With
            With Selection.FormatConditions(1).Interior
                .PatternColorIndex = xlAutomatic
                .ThemeColor = xlThemeColorAccent2
                .TintAndShade = 0.399945066682943
            End With
             Selection.FormatConditions(1).StopIfTrue = False
            
           Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
             "=SI(ESTVIDE($A2);FAUX;SI(OU(I2>INDEX($A2:$AA2;;EQUIV(""Valeur minimum"";$A$1:$AA$1;0));I2<INDEX($A2:$AA2;;EQUIV(""Valeur maximum"";$A$1:$AA$1;0)));VRAI;FAUX))"
            
             With Selection.FormatConditions(2).Interior
                .ColorIndex = 4
            End With
            ActiveSheet.Range("I2:I8").Select
            
            
            With Selection
                .FormatConditions.Add Type:=xlExpression, Formula1:="=$I2=""C"""
                .FormatConditions(.FormatConditions.Count).SetFirstPriority
                With .FormatConditions(1).Interior
                    .PatternColorIndex = xlAutomatic
                    .Color = RGB(0, 176, 80)
                    .TintAndShade = 0
                End With
            End With
            
            


            ActiveSheet.Columns("I").Insert CopyOrigin:=xlFormatFromLeftOrAbove
            
        Next
 

Discussions similaires

Réponses
3
Affichages
557
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…