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
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
A voir également:
- Macro pour mettre une couleur auto. dans tableau
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Excel cellule couleur si condition texte - Guide
6 réponses
Gyrus
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
524
27 mars 2015 à 20:48
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+
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+
Gyrus
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
524
27 mars 2015 à 21:37
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+
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+
Gyrus
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
524
>
Tania
29 mars 2015 à 20:55
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+
L'intérêt de cette réactivation est de permettre d'utiliser à nouveau les évènements.
A+
Gyrus
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
524
27 mars 2015 à 17:18
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+
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+
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.
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.
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
ç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
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 250
28 mars 2015 à 09:39
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
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
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 250
28 mars 2015 à 20:57
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
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