Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
bonjour à tous, je patauge toujours dans la construction de mon tableau, j'ai écrit un bout de code(surement trop long mais là n'est pas le souci du moment) pour créer une mfc sur un ensemble de cellules.
voici le code
Code:
For i = 2 To S Step 3
Cells(i, 2).Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
" =countif(RC(6):RC(31),RC)>3"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 5287936
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
Next i
en prenant pour exemple la cellule (2,2), je vérifie que la mfc est chargée et c'est bien le cas. Pourtant, si sur la ligne 2, dans la plage prévue( 6 à 31), j'inscris à 4 reprises la meme valeur que la cellule (2,2), rien ne se passe.
Quelqu'un peut-il éclairer ma lanterne?
Nb: j'aimerai également comprendre comment remplacer dans la formule countif les valeurs 6 et 31 par des variables, mais je ne trouve pas la syntaxe correcte.
Merci d'avance
un code avec enregistreur de macro et modifié pour variables
Code:
For i = 2 To 10
Cells(i, 2).Select
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=NB.SI(C" & i & ":K" & i & ";B" & i & ")>3"
Selection.FormatConditions(1).Interior.ColorIndex = 43
Next
a adapter
pour modifier les colonnes via des variables, appliquer le priincipe retenu sur la ligne "NB.SI" : le texte est entre guillemets et les variables sans guillemets, avec des & pour concaténer
merci pour la macro, moi aussi j'avais utilisé l'enregistreur pour m'aider à la construire.
Cela étant, je ne comprends toujours pas comment remplacer les colonnes par des variables : pour les lignes, pas de problèmes, il s'agit de nombres, donc avec une boucle for to next, on balaie les plages qu'on souhaite, mais pour les "lettres" représentant les colonnes, je vois pas comment faire. Sauf à changer les formules afin d'utiliser une formule du type formulaR1C1 ="fonctionsouhaitée(RC(" & i & ".... "
bon j'ai avec l'aide d'excel-lent réussi à écrire correctement mon code, mais pour autant la cellule ne "réagit" pas lorsque la condition de la mfc est remplie
voici le code :
Code:
For i = 2 To 8 Step 3
db = 6
fn = 30
For o = 2 To 7
Cells(i, o).Select
Selection.FormatConditions.Delete
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
" =NB.SI(RC(" & db & "):RC(" & fn & "),RC)>2"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 5287936
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
fn = fn - 1
db = db - 1
Next o
Next i
telle que je pense avoir écrit la mfc, voici comment elle devrait fonctionner
exemple :
A1: chou
si en A10, A11 et A15, on trouve aussi la valeur 'chou', alors la cellule A1 est peinte en vert.
Re grodep, bonsoir Eric, bonsoir à toutes et à tous 🙂
Envoyé par grodep
bon j'ai avec l'aide d'excel-lent réussi à écrire correctement mon code, mais pour autant la cellule ne "réagit" pas lorsque la condition de la mfc est remplie
voici le code :
Code:
For i = 2 To 8 Step 3
db = 6
fn = 30
For o = 2 To 7
Cells(i, o).Select
Selection.FormatConditions.Delete
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
" =NB.SI(RC(" & db & "):RC(" & fn & "),RC)>2"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 5287936
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
fn = fn - 1
db = db - 1
Next o
Next i
telle que je pense avoir écrit la mfc, voici comment elle devrait fonctionner
exemple :
A1: chou
si en A10, A11 et A15, on trouve aussi la valeur 'chou', alors la cellule A1 est peinte en vert.
Prenons l'exemple pour la 1ère exécution de ta boucle :
i = 2
db = 6
fn = 30
o = 2
Tu sélectionnes Cells(i, o), i.e. Cells(2, 2) soit la cellule B2.
Décortiquons la formule de ton format conditionnel :
" =NB.SI(RC(" & db & "):RC(" & fn & "),RC)>2"
Elle est syntaxiquement correcte et compte tenu des valeurs de db et fn, cela donne :
" =NB.SI(RC(6):RC(30),RC)>2"
En vérifiant la formule de ton format conditionnel avec la cellule B2 active, tu liras :
=NB.SI(H2:AF2,B2)>2
Tu as indiqué les colonnes relatives à la colonne B : début 6 colonnes plus loin, soit colonne H, et fin 30 colonnes plus loin, soit colonne AF, le tout sur la même ligne R.
Or, tu écris :
telle que je pense avoir écrit la mfc, voici comment elle devrait fonctionner
exemple :
A1: chou
si en A10, A11 et A15, on trouve aussi la valeur 'chou', alors la cellule A1 est peinte en vert.
Pour que cela soit le cas, il faudrait que tu commences à la colonne 1, ligne 1 pour ta formule conditionnelle, or elle est inscrite en colonne 2, ligne 2 (je l'ai déjà ecrit : B2). De plus, tu cherches dans les lignes sous la cellule qui contient ta MFC alors que ton code fait rechercher dans les colonnes à droite de celle-ci.
Je pense qu'il faut un peu revoir ta copie.
Pour info (au cas où) :
Cells(Ligne, Colonne)
RC signifie Row/Column (ligne/colonne).
Si tu souhaites chercher dans les lignes sous ta cellule à MFC, il faut que tu utilises R(décalage)C et non RC(décalage).
bon ben, corrigé afin que la mfc s'applique aux lignes et non aux colonnes(vraiment quelle burne!!), la mfc ne fonctionne toujours pas. Si joint un fichier avec le bout de code récalcitrant au cas où une bonne ame pourrait y jeter un oeil...
merci d'avance
NB: je précise a toute fin utile qu'il est enregistré à partir d'xl 2007 au format 97-2003
bon ben, corrigé afin que la mfc s'applique aux lignes et non aux colonnes(vraiment quelle burne!!), la mfc ne fonctionne toujours pas. Si joint un fichier avec le bout de code récalcitrant au cas où une bonne ame pourrait y jeter un oeil...
merci d'avance
NB: je précise a toute fin utile qu'il est enregistré à partir d'xl 2007 au format 97-2003
Ok, pour ta version d'XL. Je n'ai pas toutes ces options dans FormatConditions mais peu importe pour l'exemple. Une question avant de te proposer un code : as-tu une version française d'XL2007 ou américaine (anglaise) ?
@+
PS : dans ton exemple, ce sont bien les colonnes qui sont à prendre en compte puisque les valeurs sont sur la même ligne 😉
Ok, pour ta version d'XL. Je n'ai pas toutes ces options dans FormatConditions mais peu importe pour l'exemple. Une question avant de te proposer un code : as-tu une version française d'XL2007 ou américaine (anglaise) ?
il s'agit d'une version américaine que j'ai patché en français. Ce qui est étrange effectivement, c'est qu'en utilisant l'enregistreur de macro, il m'a parfois donné la formule avec nb.si et parfois avec counta. Je n'ai pas fait suffisament d'essai pour débrouiller cette histoire. peut etre devrais je fouiller de ce coté pour voir si cela fonctionne avec l'un ou avec l'autre.
raaa mais c'est pas possible d'être aussi neuneu et de s'embrouiller à ce point... donc OUI c'est bien sur les colonnes que doit jouer ma mfc, puisque les cellules à vérifier sont toutes sur la meme ligne 😛*
voir si cela convient.
J'ai supprimé les lignes, version 2007, qui ne fonctionnaient pas avec la mienne !
Code:
Sub TESTMFC()
For li = 2 To 15 Step 3
For col = 2 To 8
Cells(li, col).Select
Selection.FormatConditions.Delete
Selection.Interior.Color = 65535
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=NB.SI($I$" & li & ":$M$" & li & ";" & Chr(64 + col) & li & ")>1"
Selection.FormatConditions(1).Interior.Color = 5287936
Next
Next
End Sub
et bien grand merci ça fonctionne parfaitement! mais, car il y a toujours un mais..
je souhaite que cette formule prenne en compte des variables, car la plage à explorer sera de taille variable selon les cas.
M'inspirant de ta formule, j'ai tenté de remplacer "I" et "M" par des variables en utilisant chr, ce qui fonctionne jusqu'à ... la limite de l'utilisation de chr : il n'y a aucun charcode pour désigner AA, AB, etc,etc ! du coup je suis dans la mouise..
faut il procéder à du bricolage en mettant deux chr accolés basés sur un modulo 26 du style Chr(64+2) & Chr(64+20) si je veux désigner la colonne BT ?
du style (en prenant pour exemple j, la variable qui détermine la dernière colonne de la plage à prendre en compte) :
Code:
j=53
i = WorksheetFunction.RoundDown((j / 26), 0)
S = j - i * 26
.Value = Chr(64 + i) & Chr(64 + S)
c'est pas que ça me gene de faire comme ça, mais bon c'est vraiment du code bricolé à la p'tite semaine, je suis sur que y a mieux à faire, mais c'est hors de mon maigre champ de connaissances actuelles...
merci en tout cas pour le débugage de ma mfc, je retiendrais que visiblement on ne peut pas appliquer une formule de type RC pour des mfc.
Quand je dis que ça bricole !! voilà le résultat final pour réussir à mettre en place une mfc sur un nombre de cellules variables, dans un nombre de lignes et de colonnes variables également sur des plages de cellules également variables...
Code:
aa = aa - 1
col1 = WorksheetFunction.RoundDown((j / 26), 0)
col2 = j - col1 * 26
If col2 = 0 Then col2 = 1
If j > 26 Then
For i = 2 To S Step 2
For o = 2 To aa
Cells(i, o).Select
Selection.FormatConditions.Delete
Selection.Interior.Color = 65535
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=NB.SI($" & Chr(65 + aa) & "$" & i & ":$" & Chr(64 + col1) & Chr(64 + col2) & "$" & i & ";" & Chr(64 + o) & i & ")>=1"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 5287936
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=NB.SI($" & Chr(65 + aa) & "$" & i & ":$" & Chr(64 + col1) & Chr(64 + col2) & "$" & i & ";" & Chr(64 + o) & i & ")>=3"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
Next o
Next i
Else:
For i = 2 To S Step 2
For o = 2 To aa
Cells(i, o).Select
Selection.FormatConditions.Delete
Selection.Interior.Color = 65535
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=NB.SI($" & Chr(65 + aa) & "$" & i & ":$" & Chr(64 + j) & "$" & i & ";" & Chr(64 + o) & i & ")>=1"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 5287936
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
Selection.Interior.Color = 65535
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=NB.SI($" & Chr(65 + aa) & "$" & i & ":$" & Chr(64 + j) & "$" & i & ";" & Chr(64 + o) & i & ")>=3"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
Next o
Next i
End If
aa = aa + 1
dire que certains sont capables de remplacer tout ce fouillis par quelques lignes adroitement écrites...
mais bon, au moins ça fonctionne, c'est un bon début !!
Envoyé par grodep
Quand je dis que ça bricole !! voilà le résultat final pour réussir à mettre en place une mfc sur un nombre de cellules variables, dans un nombre de lignes et de colonnes variables également sur des plages de cellules également variables...
Code:
aa = aa - 1
col1 = WorksheetFunction.RoundDown((j / 26), 0)
col2 = j - col1 * 26
If col2 = 0 Then col2 = 1
If j > 26 Then
' Instructions
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=NB.SI($" & Chr(65 + aa) & "$" & i & ":$" & _
Chr(64 + col1) & Chr(64 + col2) & "$" & i & ";" & Chr(64 + o) & i & ")>=1"
' Autres instructions
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=NB.SI($" & Chr(65 + aa) & "$" & i & ":$" & _
Chr(64 + col1) & Chr(64 + col2) & "$" & i & ";" & Chr(64 + o) & i & ")>=3"
' Dernières instructions du If j > 26 Then
Else
' Instructions du Else
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=NB.SI($" & Chr(65 + aa) & "$" & i & ":$" & _
Chr(64 + col1) & Chr(64 + col2) & "$" & i & ";" & Chr(64 + o) & i & ")>=1"
' Autres instructions du Else
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=NB.SI($" & Chr(65 + aa) & "$" & i & ":$" & _
Chr(64 + col1) & Chr(64 + col2) & "$" & i & ";" & Chr(64 + o) & i & ")>=3"
' Dernières instructions du Else
End If
aa = aa + 1
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD