Mise en forme conditionnelle en VBA

re,

je ne comprends pas justement, mais ici un essai, ce "if..endif" ne fonctionne pas dans cette construction, il faut l'intégrer dans la formule, quelque chose comme ca :

    '******************* Création de la 5ième règle recyclage PSE1**************************
          S3 = .Cells(1, 57).Address(0, 0)     'addrese relative de la cellulle ligne 1, colonne 57 de cette plage
          With .Columns(57)     'uniquement la 57ième colonne recyclage PSE1!!!!

               .FormatConditions.Add Type:=xlExpression, Formula1:="=AUJOURDHUI()-" & S3 & "> 1050"
               .FormatConditions(.FormatConditions.Count).Interior.Color = vbRed
               .FormatConditions(.FormatConditions.Count).StopIfTrue = False

               .FormatConditions.Add Type:=xlExpression, Formula1:="=AUJOURDHUI()-" & S3 & "> 930"
               .FormatConditions(.FormatConditions.Count).Interior.Color = vbYellow

          End With
     '******************* Création de la 5 bis règle recyclage PSE1**************************
          S31 = .Cells(1, 56).Address(0, 0)     'addrese relative de la cellulle ligne 3, colonne 56 de cette plage

          With .Columns(56)     'uniquement la 56ième colonne recyclage PSE1!!!!
               .FormatConditions.Add Type:=xlExpression, Formula1:="=ET(" & S3 & "="""",AUJOURDHUI()-" & S31 & "> 1050)"   '---> colonne 57 vide et aujourid'hui - colonne 56>1050
               .FormatConditions(.FormatConditions.Count).Interior.Color = vbRed
               .FormatConditions(.FormatConditions.Count).StopIfTrue = False
            End With

          With .Columns(56)
               .FormatConditions.Add Type:=xlExpression, Formula1:="=ET(" & S3 & "="""",AUJOURDHUI()-" & S31 & "> 930"
               .FormatConditions(.FormatConditions.Count).Interior.Color = vbYellow
          End With
 

Bonsoir,

ne manquerait il pas une parenthèse fermante sur la 4ième formule ?

Avez vous pensez à faire la MFC sous Excel avec l'enregistreur de macro, ce qui vous donne une représentation du code VBA où il "suffit" de rendre varaible ce qu'il faut ?

@ bientôt

LouReeD

merci,

en effet c'est ce que je souhaite:

si la colonne 57 vide et aujourid'hui - colonne 56>1050 alors MCF en rouge dans la colonne 56

j'ai mis votre code mais j'ai un retour d'erreur du type "5" : =>argument ou appel de procédure incorrect

@loureed: je ne sais pas concrètement faire cette formulation en code

merci d'avance à vous

re,

j'ai trouvé le PB :

FormatConditions.Add Type:=xlExpression, Formula1:="=ET(" & S3 & "="""";AUJOURDHUI()-" & S31 & "> 1050)" '---> colonne 57 vide et aujourid'hui - colonne 56>1050

un grid merci à vous

Bonjour,

afin de faciliter le rajout de colonne dans le tableau sans modifier toutes les MCF, est il possible de modifier :

s1 = .Cells(1, 29).Address(0, 0) 'addrese relative de la cellulle ligne 3, colonne 29 de cette plage
With .Columns(29) 'uniquement la 29ième colonne ==> date de fin ....... !!!!

...........

avec un esprit de code du type

s1 = .Cells(1, Range("TableauJK[DATE DE NAISSANCE]").Column).Address(0, 0) 'addrese relative de la cellulle ligne 3, colonne 29 de cette plage
With .Columns(Range("TableauJK[DATE NAISSANCE]").Column) 'uniquement la 29ième colonne ==> date de ..... !!!!

j'ai fait des tests cela fonctionne mais c'est pour être sur de moi

merci d'avance à vous

cdt

re,

je pense que vous commencez à comprendre le système, il faut juste dire la plage et la formule pour la première cellule. L'exemple suivant est peut-être bête, mais c'est un exemple

          With Range("TableauR10[code postal]")
               .FormatConditions.Add Type:=xlExpression, Formula1:="=AUJOURDHUI()-" & Range("TableauR10[date de naissance]").Cells(1).Address(0, 0) & "> 1050"
               .FormatConditions(.FormatConditions.Count).Interior.Color = vbRed
               .FormatConditions(.FormatConditions.Count).StopIfTrue = False
          End With

Juste pour dire : ce qui vient de vous n'est jamais bête BsAlv ! Mais ce doit être du à Google Translate !

@ bientôt

LouReeD

merci à tous et surtout bonnes fêtes de fin d'année

Bonjour à vous,

deux petites questions sur le MCF:

je vous joins un petit fichier.

j'ai compris pour les MCF à partir des colonnes de ref.

mais si je souhaite mettre en avant toutes les lignes qui ont la même référence ( ex S1=bleu, S2=rouge, S3=jaune....) comme puis je reprendre le code et le modifier dans ce sens. (1er question)

2nd question:

si je veux mettre en relief ( 1ER MCF) en jaune la personne dont sa ligne est target comment puis-je faire?

j'arrive avec les MCF via excel mais plus difficile en vba

merci d'avance à vous

cdt

7mcf2.xlsx (11.31 Ko)

re,

1st question :

Sub MFC_Priority()
     Dim i, MFC
     s0 = "=VIND.SPEC("  'pour BSALV en néerlandais
     's0 = "=CHERCHE(" 'pour JeromeB en français

     With Sheets("feuil1").ListObjects(1).DataBodyRange     'cette plage
          For Each MFC In .FormatConditions     'boucle les MFCs
               s = MFC.Formula1     'la formule utilisé
               If StrComp(Left(s, Len(s0)), s0, 1) = 0 Then     'si le début de la formule est comme ça
                    Select Case Mid(s, Len(s0) + 2, 2)     'regardez les 2 charactères 2 positions plus vers droite (le "Sx")
                         Case "s1", "S1": MFC.Priority = 1
                         Case "s2", "S2": MFC.Priority = 2
                         Case "s3", "S3": MFC.Priority = 3
                         Case Else: MsgBox Mid(s, 13, 2)     'dans le cas où les 3 précédents étaient faux, pour vous montrer ces charactères
                    End Select
               End If
          Next
     End With
End Sub

2nd question : c'est plus facile de créer votre formule dans une cellule aléatoire (ici S4), utiliser l'enregistreur dès que cette formule fonctionne et de l'adapter plus tard en VBA. Voire annexe, la "macro2" est l'enregistrement avec une formule "complexe" et puis la macro "MFC_complexe" est une adaptation de cette formule.

Mais pourquoi essayez-vous de faire cela en VBA, c'est plus facile et plus rapide en manuel ?

14mcf2.xlsb (25.04 Ko)

bonjour à tous,

merci pour ce retour

pour la 1ST question:

je n'arrive pas a faire fonctionner le code:

- dois je compléter pour qu'il fonctionne?

mon but est :

si dans la colonne "Section" est égale à "S1" alors

toutes les lignes passent en bleu

si dans la colonne "Section" est égale à "S2" alors

toutes les lignes passent en rouge

.......

merci d'avance à vous

cdt

re,

vous avez pour le moment 3 MFCs avec des formules pareilles "=CHERCHE("S1";$C4)" (votre version français)

La macro boucle tous les MFCs et donne une priorité de 1 à 3 pour les mettre au début. Peut-être vous devez aussi changer le "StopIfTrue", cela depend du résultat voulu. Faitez-cela à main pour commencer et vérifier le resultat.

presque la même macro avec 2 msgbox pour mieux comprendre.

Ca fonctionne maintenant ?

Sub MFC_Priority()
     Dim i, MFC
     's0 = "=VIND.SPEC("  'pour BSALV en néerlandais
     s0 = "=CHERCHE(" 'pour JeromeB en français

     With Sheets("feuil1").ListObjects(1).DataBodyRange     'cette plage
          For Each MFC In .FormatConditions     'boucle les MFCs
               s = MFC.Formula1     'la formule utilisé
               MsgBox s, vbInformation, "formule de cette MFC"
               If StrComp(Left(s, Len(s0)), s0, 1) = 0 Then     'si le début de la formule est comme ça
                    MsgBox Mid(s, Len(s0) + 2, 2), vbInformation, "le Sx de cette MFC est "
                    Select Case Mid(s, Len(s0) + 2, 2)     'regardez les 2 charactères 2 positions plus vers droite (le "Sx")
                         Case "s1", "S1": MFC.Priority = 1
                         Case "s2", "S2": MFC.Priority = 2
                         Case "s3", "S3": MFC.Priority = 3
                         Case Else: MsgBox Mid(s, 13, 2)     'dans le cas où les 3 précédents étaient faux, pour vous montrer ces charactères
                    End Select
               End If
          Next
     End With
End Sub

re,

je suis vraiment désolé mais là je sèche complètement, je n'arrive pas a voir comment fonctionne le code et comment il peut mettre les lignes de la bonne couleurs en fonction de la valeur dans la colonne "C" soit "S1 ou S2 ou S3 ou S4".

d'avance merci a vous pour votre patience

cdt

re,

voir annexe, vous pouvez changer la priorité avec ce valeur iW, maintenant le triage est S3,S2,S1,S4,SK dépendant des valeurs de ce iW

14mcf2.xlsb (26.63 Ko)
                             Case "s1", "S1": iW = 3      'wanted priority
                              Case "s2", "S2": iW = 2
                              Case "s3", "S3": iW = 1
                              Case "s4", "S4": iW = 4
                              Case "sk", "SK": iW = 5

re,

je suis vraiment désolé mais comment (en vba et non par le mode classique de MFC) les lignes peuvent prendre la bonne couleur.

cdt

je ne sais pas si cela peut vous aider a comprendre ce que je souhaiterai:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("$C$4:$C$200")) Is Nothing Then
Select Case Target.Value
Case "S1"
Rows(Target.Row).Interior.ColorIndex = 3
Case "S2"
Rows(Target.Row).Interior.ColorIndex = 5
Case "S3"
Rows(Target.Row).Interior.ColorIndex = 7
Case "S4"
Rows(Target.Row).Interior.ColorIndex = 9
Case "SK"
Rows(Target.Row).Interior.ColorIndex = 11
End Select
End If
End Sub

le probleme de ce code est:

qu'il agit lors d'une sélection et non sur la valeur de la cellule

il agit sur toute la page est non que sur le tableau

j'espère ne pas être lourd

un grand merci à vous

cdt

re,

6mcf2.xlsb (25.90 Ko)
Sub Sans_MFC()
     Dim i, iC, s, LO

     Set LO = Sheets("feuil1").ListObjects(1)
     With LO.Range     'cette plage
          For i = 1 To 5
               Select Case i     'regardez les 2 charactères 2 positions plus vers droite (le "Sx")
                    Case 1: s = "s1": iC = 5     'valeur pour l'autofilter et le couleur voulu
                    Case 2: s = "S2": iC = 7
                    Case 3: s = "s3": iC = 9
                    Case 4: s = "s4": iC = 11
                    Case 5: s = "sk": iC = 13
               End Select
               .AutoFilter
               .AutoFilter 1, s
               LO.DataBodyRange.SpecialCells(xlVisible).Interior.ColorIndex = iC     'colorer les cellules visibles
               .AutoFilter
          Next
     End With

End Sub

bonjour à tous,

merci beaucoup pour ce code il fonctionne très bien.

pouvez vous me dire lorsque j'ai une MCF qui fonctionne " manuellement" comment puis-je utiliser l'enregistreur de macro pour avoir sa transposition?

pouvez vous aider sur la 2nd question:

- par une MCF mettre en jaune les 3 première colonnes de la ligne "X" lorsque je sélectionne une cellule de la ligne "X"

bonne fête de fin d'année à tous

très cdt

bonjour et bonne année,

pouvez vous me dire lorsque j'ai une MCF qui fonctionne " manuellement" comment puis-je utiliser l'enregistreur de macro pour avoir sa transposition?

- Vous lancez l'enregistreur

- vous sélectionnez la cellule avec la formule fonctionnante

- vous utilisez le bouton F2 et puis "Enter/Entrer"

- vous terminez l'enregistreur

Si je fais cela avec mon fichier précédent, le résultat est ceci ... et vous continuez avec la partie "=RC4=""bsalv"""

Sub Macro1()
'
' Macro1 Macro
'

'
    Range("S4").Select
    ActiveCell.FormulaR1C1 = "=RC4=""bsalv"""
    Range("T4").Select
End Sub

On peut faire la même chose sans l'enregistreur = copier le contenu (=la formule) de votre cellule en VBA

Donc vous avez 2 possibilités.

re,

- par une MCF mettre en jaune les 3 première colonnes de la ligne "X" lorsque je sélectionne une cellule de la ligne "X"

il faut encore ajouter une petite macro pourque ce MFC fonctionne

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     If Application.CutCopyMode = False Then Application.Calculate
End Sub

ma version (en orange et néerlandais) fonctionne, donc la version (en jaune et français), je l'éspères ...

11mcf2.xlsb (26.65 Ko)
Rechercher des sujets similaires à "mise forme conditionnelle vba"