Probleme VBA et mise en forme conditionnelle

Taltema -  
Taltema Messages postés 10 Statut Membre -
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

5 réponses

  1. wilfried_42 Messages postés 912 Statut Contributeur 245
     
    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
    1. Taltema
       
      Merci de ta reponse, je teste ca demain à la premiere heure.
      0
      1. Taltema > Taltema
         
        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
  2. wilfried_42 Messages postés 912 Statut Contributeur 245
     
    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
    1. Taltema Messages postés 10 Statut Membre
       
      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
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  4. Taltema Messages postés 10 Statut Membre
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. wilfried_42 Messages postés 912 Statut Contributeur 245
     
    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
    1. Taltema Messages postés 10 Statut Membre
       
      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
      1. Taltema Messages postés 10 Statut Membre > Taltema Messages postés 10 Statut Membre
         
        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