Macro pour mettre une couleur auto. dans tableau

Résolu
Bonjour,
J'aimerais mettre une couleur automatique dans un tableau excel sans utiliser la mise en forme conditionnelle vue que mon critère n'est pas standard.
Je veux que mon tableau mettre la couleur selon ma légende (ex: tomates pourries en rouges; tomates vendues en vert ) .

Mon tableau contient la quantité de tomates récoltées ( donc des chiffres)

trimeste 1 trimeste 2
Tomates pourries 50000 500
Tomates vendues 150000 5000

6 réponses

  1. Tout d'abord, j'ai créé une plage nommée "Quantités" qui couvre la plage C7:N10 (voir Formules > Gestionnaire de noms).

    La procédure est évènementielle. Il s'agit de la procédure Worksheet_Change qui est lancée lorsqu'une modification de cellule est détectée.
    Target représente la cellule modifiée.

    Quelques explications du code :

    If Target.Count > 1 Then Exit Sub
    'Si plusieurs cellules ont été modifiées, on sort de la procédure (ce qui évite une erreur dans le cas d'une suppression de cellules par exemple).

    If Not Application.Intersect(Target, Range("Quantités")) Is Nothing Then

    'Si la cellule modifiée fait partie de la plage "Quantités"
    (littéralement, si l'intersection entre la plage "Quantités" et la cellule modifiée n'est pas rien)

    Application.EnableEvents = False

    'On désactive les évènements afin d'éviter une boucle infinie sur la procédure. En effet, la procédure est lancée par une modification de valeur de cellule mais la procédure elle-même change la valeur de la cellule modifiée puisqu'on supprime le dernier caractère ajouté avec l'instruction
    Target = Left(Target, Len(Target) - 1)

    Application.EnableEvents = True
    Je te laisse deviner.

    A+
    1
    1. Bonjour Gyrus,

      Je suppose que Application.EnableEvents = True est la réactivation ou l'activation des évènements.Je suppose dans ce cas on aura une boucle infinie?

      Merci pour tout et A+
      0
    2. @TaniaApplication.EnableEvents = True est effectivement la réactivation des évènements mais tu ne risques plus de boucler à l'infini sur la procédure puisque cette instruction est placée après celle de la modification de cellule.

      L'intérêt de cette réactivation est de permettre d'utiliser à nouveau les évènements.

      A+
      0
  2. Bonjour,

    Je ne vois pas pourquoi tu ne peux pas utiliser une mise en forme conditionnelle.
    Tu devrais joindre un fichier exemple.
    Tu peux utiliser https://www.cjoint.com/

    A+
    0
    1. voilà le lien :

      http://www.cjoint.com/confirm.php?cjoint=ECBtSSR8PKw

      Je veux par exemple mettre en rouge la quantité de pommes pourries ou de tomates pourries ,en vert celles qui ont été vendues et en orange ,celle qui sont en attente de livraison .
      Avec la mise en forme conditionnelle, il faut entrer un chiffre obligatoirement > ou < ou = ou contient .... . Tandis que si j'ai une macro qui me dit que si j'écris "60000r" signifie que ma cellule soit en rouge et m'affiche le nombre "60000" dans cette même cellule.

      Mon problème est au niveau de la création de code.
      0
      1. Merci Cyrus ,

        ça fonctionne super Bien !!! mais j'aimerais comprendre ton code un peu Quand tu mets ça (qu'est ec que tu veux dire?) :
        If Target.Count > 1 Then Exit Sub
        If Not Application.Intersect(Target, Range("Quantités")) Is Nothing Then
        Application.EnableEvents = False

        et à la fin du code tu met ça :

        Target = Left(Target, Len(Target) - 1)
        Application.EnableEvents = True
        0
        1. Contributeur
          Bonjour,

          tes colonnes ne sont pas toujours dans le même ordre ?
          Si oui tu peux le faire par MFC.
          https://www.cjoint.com/c/ECCj0p3w2jr

          eric
          0
          1. Mes colonnes ne sont pas dans le même ordre .C'est pour cela, ça me prend une macro. J'ai regardé ton fichier pour la mise en forme conditionnelle et je crois pas avoir trop compris la formule .
            0
          2. Contributeur
            Mod() te retourne le reste d'une division entière.
            Ici ça te permet de savoir si tu es dans les colonnes 1, 4, 7, etc ou 2, 5, 8, etc ou 3, 6, 9, etc pour appliquer une MFC ou une autre

            eric
            0