Rechercher : dans
Par :

Probleme VBA et mise en forme conditionnelle

Dernière réponse le 25 fév 2009 à 16:59:47 Taltema, le 24 fév 2009 à 17:21:27 
 Signaler ce message aux modérateurs

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 :)

Configuration: Windows XP
Internet Explorer 7.0

Meilleures réponses pour « Probleme VBA et mise en forme conditionnelle » dans :
Excel - Mises en forme conditionnelles illimitées Voir Mises en Forme Conditionnelles Illimitées Introduction Principe Code Fichier joint Introduction La Mise en Forme Conditionelle (ou MFC) permet d'appliquer, à une cellule ou à plusieurs cellules sélectionnées, différents formats qui...
[VBA] Fonction qui retourne la couleur active d'une MFC VoirCette fonction retourne la valeur du format actif d'une mise en forme conditionnelle. Avec la fonction de la démo, deux valeurs peuvent êtres retournées. Mode = 0 : retourne la valeur de Interior.ColorIndex Mode = 1 : retourne la valeur de...

1

wilfried_42, le 24 fév 2009 à 18:17:28

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

Répondre à wilfried_42

2

Taltema, le 24 fév 2009 à 22:54:17

Merci de ta reponse, je teste ca demain à la premiere heure.

Répondre à Taltema

3

Taltema, le 25 fév 2009 à 09:29:14

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... :)

Répondre à Taltema

4

wilfried_42, le 25 fév 2009 à 09:47:10

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
Cordialement
Wilfried

ps: n'oubliez pas de mettre votre fil sur résolu quand vous obtenez ce que vous cherchez. Merci

Répondre à wilfried_42

5

Taltema, le 25 fév 2009 à 10:14:32

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.

Répondre à Taltema

6

michel_m, le 25 fév 2009 à 10:35:42

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

Le forum est basé sur le partage de connaissances:Je ne répo­nds donc pas à des questions techniques par message privé.
Cordialement, Michel

Répondre à michel_m

7

Taltema, le 25 fév 2009 à 10:41:04

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

Répondre à Taltema

8

wilfried_42, le 25 fév 2009 à 13:38:42

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
Cordialement
Wilfried

ps: n'oubliez pas de mettre votre fil sur résolu quand vous obtenez ce que vous cherchez. Merci

Répondre à wilfried_42

9

Taltema, le 25 fév 2009 à 13:50:11

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".

Répondre à Taltema

10

 Taltema, le 25 fév 2009 à 16:59:47

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

Répondre à Taltema