Probleme VBA et mise en forme conditionnelle

Fermé
Taltema - 24 févr. 2009 à 17:21
Taltema Messages postés 8 Date d'inscription dimanche 4 décembre 2005 Statut Membre Dernière intervention 16 mars 2009 - 25 févr. 2009 à 16:59
Bonjour,
J'ai un petit souci j'aimerais passer une variable dans une MFC mais je n'y arrive pas.
Pour tenter d'etre plus clair voici mon code :


For Nol = 2 To 26
Cells(Nol, 9).Select

Range(Cells(Nol, 9), Cells(Nol, 42)).Select
selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=B9=GRANDE.VALEUR($B:$B;2)"

Next

C'est la variable B9 (que j'ai mis en gras au dessus) que j'aimerais modifier par la cellule active.

Si quelqu'un peut m'eclairer :)
A voir également:

5 réponses

wilfried_42 Messages postés 907 Date d'inscription mardi 19 août 2008 Statut Contributeur Dernière intervention 8 décembre 2009 244
24 févr. 2009 à 18:17
Bonjour

"=B9=GRANDE.VALEUR($B:$B;2)" devient : "=" & activecell.address & "=GRANDE.VALEUR($B:$B;2)"

sinon, plus rapide sans boucle ni select (en fonction de ce que j'ai compris
with Range(cells(2,9),cells(26,42)).formatconditions.add
       .type = xlexpression
       .formula1 = "=$B2=Grande.valeur($B:$B;2)"
       .Interior.ColorIndex = 3
end with
--
Cordialement
Wilfried

ps: n'oubliez pas de mettre votre fil sur résolu quand vous obtenez ce que vous cherchez. Merci
0
Merci de ta reponse, je teste ca demain à la premiere heure.
0
Taltema > Taltema
25 févr. 2009 à 09:29
En modifiant le code avec ce que tu m'as donné, cela ne fonctionne pas encore.
En fait je dois prendre les valeurs de chaque colonne, ces valeurs sont stockées de la ligne 9 à la ligne 42, et je dois identifier les 3 plus grandes valeurs de chaque colonne. Le plus grand chiffre est ainsi sur fond rouge, le 2e sur fond orange et le 3e plus grand est sur fond jaune.

Voici mon code actuel :

For Nol = 2 To 26

Cells(Nol, 9).Select


ActiveWindow.SmallScroll Down:=10

Range(Cells(Nol, 9), Cells(Nol, 42)).Select
selection.FormatConditions.Delete
selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=" & ActiveCell.Address & "=GRANDE.VALEUR($B:$B;2)"
selection.FormatConditions(1).Interior.ColorIndex = 3
selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=" & ActiveCell.Address & "=GRANDE.VALEUR($B:$B;3)"
selection.FormatConditions(2).Interior.ColorIndex = 46
selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=" & ActiveCell.Address & "=GRANDE.VALEUR($B:$B;4)"
selection.FormatConditions(3).Interior.ColorIndex = 27
ActiveWindow.SmallScroll Down:=2

Next

Pour le moment, ce code ne fonctionne pas. Donc si tu peux m'aider... :)
0
wilfried_42 Messages postés 907 Date d'inscription mardi 19 août 2008 Statut Contributeur Dernière intervention 8 décembre 2009 244
25 févr. 2009 à 09:47
re:

il faut eviter de confondre colonne et ligne : cells(ligne,colonne)
j'avais compris par ligne et non par colonne

with Range(cells(9,2),cells(42,26)).formatconditions.add
       .type = xlexpression
       .formula1 = "=B2=Grande.valeur(B:B;1)"
       .Interior.ColorIndex = 3
end with
with Range(cells(9,2),cells(42,26)).formatconditions.add
       .type = xlexpression
       .formula1 = "=B2=Grande.valeur(B:B;2)"
       .Interior.ColorIndex = 6
end with
with Range(cells(9,2),cells(42,26)).formatconditions.add
       .type = xlexpression
       .formula1 = "=B2=Grande.valeur(B:B;3)"
       .Interior.ColorIndex = 9
end with

par contre, j'ajouterais en debut de macro une procedure de suppression de MFC
Dim Fc as FormatCondition
For each Fc in range(cells(9,2),cells(42,26))
      fc.delete
next
0
Taltema Messages postés 8 Date d'inscription dimanche 4 décembre 2005 Statut Membre Dernière intervention 16 mars 2009
25 févr. 2009 à 10:14
Au niveau de cette ligne :

With Range(Cells(9, 2), Cells(42, 26)).FormatConditions.Add

Excel me retourne une erreur " Argument non facultatif" en surlignant le .Add alors que logiquement les arguments sont passés sur les lignes en dessous, à savoir :
.type = xlexpression
.formula1 = "=B2=Grande.valeur(B:B;1)"
.Interior.ColorIndex = 3

Pour le moment, je reste dans l'impasse. Merci de ton aide.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
25 févr. 2009 à 10:35
Bonjour taltema, cher Wilfried (ca va?),

A mon avis, il y a une petite faute de frappe dans la proposition de Wilfied:
au lieu de:
with Range(cells(9,2),cells(42,26)).formatconditions.add
.type = xlexpression
saisir
with Range(cells(9,2),cells(42,26)).formatconditions
.add type = xlexpression

0
Taltema Messages postés 8 Date d'inscription dimanche 4 décembre 2005 Statut Membre Dernière intervention 16 mars 2009
25 févr. 2009 à 10:41
Ca ne fonctionne pas plus malheureusement. Si cela peut vous aiguiller, j'ai Sub ma_macro() surlignée en jaune lors de l'affichage de l'erreur.

Avec ce code-ci, ca fonctionne presque. En fait la premiere colonne est traitée correctement, c'est a dire que les 3 plus grands chiffres sont identifiés et correctement colorisés mais ensuite toutes les autres colonnes sont coloriées au meme niveau que les chiffres de la 1ere colonne.

voici mon code :

For Nol = 2 To 26


Range(Cells(9, Nol), Cells(42, Nol)).Select
'Cells(9, Nol).Activate
selection.FormatConditions.Delete
selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=B9=GRANDE.VALEUR($B:$B;2)"
selection.FormatConditions(1).Interior.ColorIndex = 3
selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=B9=GRANDE.VALEUR($B:$B;3)"
selection.FormatConditions(2).Interior.ColorIndex = 46
selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=B9=GRANDE.VALEUR($B:$B;4)"
selection.FormatConditions(3).Interior.ColorIndex = 27

Next


Merci d'avance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
wilfried_42 Messages postés 907 Date d'inscription mardi 19 août 2008 Statut Contributeur Dernière intervention 8 décembre 2009 244
25 févr. 2009 à 13:38
re:, salut michel ça fait plaisir de te croiser

je n'ai pas pu faire autrement, bizarre
Sub essai()
    Range(Cells(9, 2), Cells(42, 26)).Select
    With Selection.FormatConditions.Add(Type:=xlExpression, Formula1:="=B9=Grande.valeur(B:B;1)")
       .Interior.ColorIndex = 3
    End With
End Sub

pourtant, j'ai horreur des select
0
Taltema Messages postés 8 Date d'inscription dimanche 4 décembre 2005 Statut Membre Dernière intervention 16 mars 2009
25 févr. 2009 à 13:50
Ca ne marche toujours pas désolé.
J'ai une erreur sur la ligne du with "Erreur définie par l'application ou par l'objet".
0
Taltema Messages postés 8 Date d'inscription dimanche 4 décembre 2005 Statut Membre Dernière intervention 16 mars 2009 > Taltema Messages postés 8 Date d'inscription dimanche 4 décembre 2005 Statut Membre Dernière intervention 16 mars 2009
25 févr. 2009 à 16:59
En fait, après maintes recherches, je sais exactement ce dont j'ai besoin :)

Dans ma macro, j'ai cette ligne :

Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=B9=GRANDE.VALEUR(B:B;2)"

Il me faudrait pouvoir changer le B que j'ai mis en gras par une variable afin je puisse faire une boucle qui irait de B à Z.

Si vous pouvez m'aider ... :D
0