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 WithJuste 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
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 Sub2nd 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"
Mais pourquoi essayez-vous de faire cela en VBA, c'est plus facile et plus rapide en manuel ?
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 Subre,
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
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 = 5re,
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,
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 Subbonjour à 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 SubOn 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 Subma version (en orange et néerlandais) fonctionne, donc la version (en jaune et français), je l'éspères ...