Macro pour mettre une couleur auto. dans tableau

Résolu/Fermé
Tania - 27 mars 2015 à 16:05
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 - 29 mars 2015 à 20:55
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



A voir également:

6 réponses

Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
27 mars 2015 à 20:48
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
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
27 mars 2015 à 21:37
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
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
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523 > Tania
29 mars 2015 à 20:55
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
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
27 mars 2015 à 17:18
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
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

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

Posez votre question
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
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 213
28 mars 2015 à 09:39
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
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
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 213
28 mars 2015 à 20:57
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