Macro pour mettre une couleur auto. dans tableau

Résolu
Tania -  
Gyrus Messages postés 3360 Statut Membre -
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. Gyrus Messages postés 3360 Statut Membre 526
     
    Ton fichier en retour.
    La procédure prend en compte la lettre ajoutée après le montant :
    r pour rouge - pourries
    o pour orange - en attente
    v pour vert - vendues

    https://www.cjoint.com/c/ECBu7Czw2TI

    A+
    1
  2. Gyrus Messages postés 3360 Statut Membre 526
     
    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. Tania
       
      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
      1. Gyrus Messages postés 3360 Statut Membre 526 > Tania
         
        Application.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
  3. Gyrus Messages postés 3360 Statut Membre 526
     
    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
  4. Tania
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Tania
     
    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
  7. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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. Tania
       
      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. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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