Mise en forme conditionnelle en VBA
bonjour à tous,
je souhaite faire une MFC en VBA.
cela se déroule bien quand mes cellules sont égale à quelle chose ( exemple: ok, non, date......)
mais je souhaite que la case soit rouge lorsque elle case n'est pas renseigné:
Sub FormatageConditionnel()
'Création de l'objet Range
Dim MaPlage As Range
Set MaPlage = Range("Tableau[[ID]:[VAB]]")
'Supprime le formatage conditionnel existant dans cette plage
MaPlage.FormatConditions.Delete
'Création de la 1er règle
MaPlage.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=NBCAR(SUPPRESPACE(D1))=0"
MaPlage.FormatConditions(1).Interior.Color = vbRed
'Création de la deuxième règle
MaPlage.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
Formula1:="non"
MaPlage.FormatConditions(2).Interior.Color = vbBlue
End Sub
question:
par quoi je dois remplacer la partie en jaune afin que cette MFC puisse fonctionner
un grand merci à vous et bonnesss fetesss
très cdt
sans fichier ? c'est une supposition
"=NBCAR(SUPPRESPACE(" & MaPlage.range("D1").address & "))=0"
Bonjour,
merci pour cette réponse, je vous joins un fichier qui est un exemple par rapport au fichier de base.
mon but dans cette MFC est de mettre dans une certaine couleur les cases vides
merci d'avance à vous
cdt
Sub FormatageConditionnel()
Dim sForm
'Création de l'objet Range
With Range("TableauR10[[age]:[code Postal]]") 'plage = ces colonnes de ce tableau
.FormatConditions.Delete 'Supprime le formatage conditionnel existant dans cette plage
'Création de la 1er règle
MsgBox "l 'adresse que je veut utiliser est : " & .Cells(1).Address(0, 1) 'ligne relative, colonne absolute
sForm = "=NBCAR(SUPPRESPACE(" & .Cells(1).Address(0, 1) & "))=0" 'votre système est francophone
'sForm = "=lengte(spaties.wissen(" & .Cells(1).Address(0, 1) & "))=0" 'votre système est néérlandophone, mais est pour le moment commentaire
MsgBox sForm & vbLf & "plage : " & .Address
.FormatConditions.Add Type:=xlExpression, Formula1:=sForm 'colonne age est vide
.FormatConditions(1).Interior.Color = vbRed
'Création de la deuxième règle
.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="non"
.FormatConditions(2).Interior.Color = vbBlue
End With
ActiveWorkbook.SaveAs Filename:="C:\Users\Eigenaar\Downloads\essai-mfc.xlsb" _
, FileFormat:=xlExcel12, CreateBackup:=False
End Subre,
la plage est les colonnes C:F du tableau
re,
merci pour ce code mais je pense que je me suis mal exprimé.
si je ne me trompes pas le code actuel mais en rouge la ligne si la colonne age n'est pas rempli.
moi je souhaiterai mettre en rouge des que la case n'est pas remplit.
nb: je changerai la couleur après pour que cela n'agresse pas trop l'utilisateur, mais mon but est de mettre en relief les cases non remplit
re,
si je prends la formule mis dans la MFC via VBA:
=NBCAR(SUPPRESPACE($C3))=0
alors que je m'aimerais une formule du type:
=NBCAR(SUPPRESPACE(C3))=0
mais je ne sais pas faire
merci d'avance à toi
cdt
re,
c'est plus facile de faire cela sans VBA, non ?
Sub FormatageConditionnel()
Dim sForm
'Création de l'objet Range
With Range("TableauR10") 'plage = ces colonnes de ce tableau
.FormatConditions.Delete 'Supprime le formatage conditionnel existant dans cette plage
'Création de la 1er règle
MsgBox "l 'adresse que je veut utiliser est : " & .Cells(1).Address(0, 1) 'ligne relative, colonne absolute
sForm = "=NBCAR(SUPPRESPACE(" & .Cells(1).Address(0, 0) & "))=0" 'votre système est francophone
'sForm = "=lengte(spaties.wissen(" & .Cells(1).Address(0, 0) & "))=0" 'votre système est néérlandophone, mais est pour le moment commentaire
MsgBox sForm & vbLf & "plage : " & .Address
.FormatConditions.Add Type:=xlExpression, Formula1:=sForm 'colonne age est vide
.FormatConditions(1).Interior.Color = vbRed
'Création de la deuxième règle
.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="non"
.FormatConditions(2).Interior.Color = vbBlue
End With
End Subun grand merci à vous c génial
petite question très bête:
sommes nous limité dans le nb de MCF en VBA.
à partir de 6 j'ai un message d'erreur de type: erreur d'exécution type"9"
merci à vous
re,
6 MFCs, ce n'est pas beaucoup, non, cela n'est pas la cause, il manque quelque chose avec la formule ou ... de votre 6ième MFC. Difficile à dire quoi exactement ! Vous savez le réaliser manuellement ?
Un exemple bête avec 100 MFCs presque similaires, simplement pour vous montrer que le nombre n'est pas la problème.
Sub FormatageConditionnel()
Dim sForm
'Création de l'objet Range
With Range("TableauR10") 'plage = ces colonnes de ce tableau
.FormatConditions.Delete 'Supprime le formatage conditionnel existant dans cette plage
'Création de la 1er règle
For i = 1 To 100
sForm = "=NBCAR(SUPPRESPACE(" & .Cells(i, i).Address(0, 0) & "))=0" 'votre système est francophone
'sForm = "=lengte(spaties.wissen(" & .Cells(i, i).Address(0, 0) & "))=0" 'votre système est néérlandophone, mais est pour le moment commentaire
.FormatConditions.Add Type:=xlExpression, Formula1:=sForm 'colonne age est vide
.FormatConditions(i).Interior.Color = RGB(WorksheetFunction.RandBetween(0, 255), WorksheetFunction.RandBetween(0, 255), WorksheetFunction.RandBetween(0, 255))
Next
'Création de la deuxième règle
' .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="non"
' .FormatConditions(2).Interior.Color = vbBlue
End With
End Subbonjour
je pense bien que cela doit venir de moi
je vous joins mon erreur afin de pouvoir progresser
merci à vous
cdt
re,
c'est un "xlsx", donc sans VBA et je supposes que le dernier MFC était le problème. Il a maintenant le couleur vert. Si ce n'était pas cela, veuillez m'expliquer ce qu'il manque.
Bonsoir,
par rapport au premier message et fichier joint au troisième, je vous propose ceci :
Sub FormatageConditionnel()
'Création de l'objet Range
Dim MaPlage As Range
Set MaPlage = Range("Tableau")
'Supprime le formatage conditionnel existant dans cette plage
MaPlage.FormatConditions.Delete
'Création de la 1er règle
MaPlage.FormatConditions.Add Type:=xlExpression, Formula1:="=NBCAR(SUPPRESPACE(" & Replace(MaPlage.Cells(1, 1).Address, "$", "") & "))=0"
MaPlage.FormatConditions(1).Interior.Color = vbRed
'Création de la deuxième règle
MaPlage.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="non"
MaPlage.FormatConditions(2).Interior.Color = vbBlue
End SubJ'ai mis un "Replace" afin de supprimer les "$" dans l'adresse de la première cellule de donnée du tableau structuré ayant pour nom "Tableau".
Car en effet, vous aviez mis A1 je crois dans votre formule ou D1, mais la "première" cellule de la MFC est A3, du moins sur le fichier joint...
@ bientôt
LouReeD
Oui bon ben en fait j'arrive après la bagarre
BsAlv, le fait de mettre Cells(0,0) permet de retirer automatiquement les "$" ?
Va falloir que je l'enregistre celle-là !
@ bientôt
LouReeD
bonjour LouReeD, JeromeB, le fil,
mon code est fait en néerlandais et puis traduit, pour vous montrer la système, donc plus tard vous n'avez pas besoin de tout le "if...then...else ...endif", seulement la partie "else"
Pour les couleurs et patterns, le plus facile est d'utiliser le recorder des macros en changeant une cellule en le format désiré et de copier et coller le résultat de la macro. La même chose avec la formule et puis pour les addresses des cellules (relatives ou absolutes), il faut créer un string et le coller dans la macro. ET ... quand on a un " dans la formule, il faut le doubler !!!
Sub FormatageConditionnel()
'Création de l'objet Range
Dim b, s, s1
b = (Application.UserName = "BSA") 'l'ordinateur de BSA ?
With Range("TableauR10")
s = .Cells(1).Address(0, 0) 'addresse relative de la première cellule de cette plage
.FormatConditions.Delete 'Supprime le formatage conditionnel existant dans cette plage
'******************* Création de la 1er règle **************************
If b Then
.FormatConditions.Add Type:=xlExpression, Formula1:="=LENGTE(SPATIES.WISSEN(" & s & "))=0" 'colonne age est vide
Else
.FormatConditions.Add Type:=xlExpression, Formula1:="=NBCAR(SUPPRESPACE(" & s & "))=0" 'colonne age est vide
End If
With .FormatConditions(.FormatConditions.Count).Interior 'dans les parenthèses le plus grand numéro des FC (donc le dernier)
.Color = RGB(255, 10, 10) 'sorte de rouge, 'à modifier
.Pattern = xlCrissCross 'sorte de pattern
End With
'******************* Création de la 2ième règle **************************
If b Then
.FormatConditions.Add Type:=xlExpression, Formula1:="=OF(" & s & "=""non"";" & s & "=""Nok"")"
Else
.FormatConditions.Add Type:=xlExpression, Formula1:="=OU(" & s & "=""non"";" & s & "=""Nok"")"
End If
.FormatConditions(.FormatConditions.Count).Interior.Color = RGB(255, 0, 0)
'******************* Création de la 3ième règle **************************
s1 = .Cells(1, 7).Address(0, 0) 'addrese relative de la cellulle ligne 1, colonne 7 de cette plage
With .Columns(7) 'uniquement la 7ième colonne !!!!
If b Then
.FormatConditions.Add Type:=xlExpression, Formula1:="=VANDAAG()-" & s1 & "> 682"
Else
.FormatConditions.Add Type:=xlExpression, Formula1:="=AUJOURDHUI()-" & s1 & "> 682"
End If
.FormatConditions(.FormatConditions.Count).Interior.Color = RGB(255, 255, 0)
End With
'******************* Création de la 4ième règle **************************
s2 = .Cells(1, 9).Address(0, 0) 'addrese relative de la cellulle ligne 1, colonne 9 de cette plage
With .Columns(9) 'uniquement la 9ième colonne !!!!
If b Then
.FormatConditions.Add Type:=xlExpression, Formula1:="=VANDAAG()-" & s2 & "> 540"
Else
.FormatConditions.Add Type:=xlExpression, Formula1:="=AUJOURDHUI()-" & s2 & "> 540"
End If
.FormatConditions(.FormatConditions.Count).Interior.Color = RGB(0, 255, 0)
End With
End With
End Sub
Bonjour,
merci pour ce retour, je vais travailler pour comprendre le code notamment lorsque sur une MCF je souhaite mettre 2 conditions du type:
.........>540 ==> case en jaune mais si .......>682==> case en rouge
cependant, petit question que veut dire:
Application.UserName = "BSA"
un grand merci à vous
amicalement
pour répondre a mon besoin sur votre code je l'ai modifier comme cela:
s1 = .Cells(1, 7).Address(0, 0) 'addrese relative de la cellulle ligne 1, colonne 7 de cette plage
With .Columns(7) 'uniquement la 7ième colonne !!!!
.FormatConditions.Add Type:=xlExpression, Formula1:="=AUJOURDHUI()-" & s1 & "> 682"
.FormatConditions(.FormatConditions.Count).Interior.Color = vbRed
.FormatConditions(.FormatConditions.Count).StopIfTrue = False
End With
With .Columns(7) 'uniquement la 7ième colonne !!!!
.FormatConditions.Add Type:=xlExpression, Formula1:="=AUJOURDHUI()-" & s1 & "> 540"
.FormatConditions(.FormatConditions.Count).Interior.Color = vbYellow
'
End Withcela fonctionne mais cette formulation est elle la plus simple?
merci à vous
cdt
bonjour,
Je penses que c'est presque le plus simple, comme on reste dans la 7ième colonne les 2 lignes suivantes peuvent disparaitre
End With
With .Columns(7) 'uniquement la 7ième colonne !!!!Comme j'avais écrit la code sur mon ordinateur néerlandophone, VBA vérifie le "username" et le mien est "BSA". Comme ca, il savait qu'il devait prendre la ligne néerlandophone dans les "IF...EndIF"
super merci j'ai adapter et simplifier les lignes => merci à vous.
je continue a avancer et j'ai pu faire plusieurs MCF qui fonctionnent parfaitement.
petit bloquage
'******************* Création de la 5ième règle recyclage PSE1**************************
S3 = .Cells(1, 57).Address(0, 0) 'addrese relative de la cellulle ligne 3, 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
If IsEmpty(S3) = True Then
With .Columns(56) 'uniquement la 56ième colonne recyclage PSE1!!!!
.FormatConditions.Add Type:=xlExpression, Formula1:="=AUJOURDHUI()-" & S31 & "> 1050"
.FormatConditions(.FormatConditions.Count).Interior.Color = vbRed
.FormatConditions(.FormatConditions.Count).StopIfTrue = False
MsgBox "vide"
End With
With .Columns(56)
.FormatConditions.Add Type:=xlExpression, Formula1:="=AUJOURDHUI()-" & S31 & "> 930"
.FormatConditions(.FormatConditions.Count).Interior.Color = vbYellow
End With
Else: MsgBox "non vide"
End Ifmon but dans la seconde partie serait de dire si la case "X" de la colonne 57 est vide alors MFC de la cellule juxtaposé à la case " X-1" de la colonne 56=> MFC.
si la case X de la colonne 57 est remplit alors pas de MFC pour la Case "X-1" de la colonne56
je souhaite utiliser la variable S3 que vous avez créé mais cela ne fonctionne pas trop bien .
je ne sais pas si je suis très claire
merci d'avance à vous
cdt