Création d'un code VBA

Bonjour le forum

Je cherche à créer un code VBA qui me permette de colorer des cellules en fonction du contenu d'une autre.

Ci joint le fichier essai

Bonne journée

M07

Bonjour Marius,

Je te retourne ton fichier Excel modifié :

Je te laisse faire les tests.

Si besoin, tu peux demander une adaptation.

Merci de me dire si ça te convient.

dhany

Bonjour

Tout d'abord merci pour le retour.

Concernant la sélection, c'est exactement cela que je recherchais.

En fonction de la sélection enC9, les cellules concernées se colorent.

Par contre, si je glisse une valeur du Tab 4 dans le Tab 1, la macro qui me permettait de récupérer les valeurs à droite et à gauche, ne fonctionne plus.

Idem, si je glisse un nom du Tab 1 dans une autre cellule du même tableau, seul le nom apparait mais plus les valeurs de gauche et de droite. (elles restent à l'ancienne place)

Enfin si j'efface un nom de Tab 1, les valeurs à droite et à gauche restent en place ainsi que la couleur.

J'espere que ces petits dysfonctionnements sont faciles à neutraliser.

Merci

M07

Voici la nouvelle version du fichier :

À l'ouverture du fichier, la cellule active est C20 ; supprime "VERT" ; c'est ok ?

ensuite, tape "vert" en minuscule : tout est remis comme au départ !

Pour tes 2 problèmes de glisser, je n'ai pas de solution, mais à la place,

tu peux faire un copier / coller valeurs.

dhany

Bonjour dhany

Merci pour le travail effectué. Je m'y suis penché pour essayer un peu de comprendre.

D'après ce que j'ai vu , l'ancienne macro a donc été totalement supprimé. Je pensais que l'on pouvait" simplement" en ajouter une nouvelle pour colorier les cellules en fonction de la sélection ?

Je continue l'exploration et :

Je ne saisi pas trop le pourquoi de la valeur Y2 dans les deux codes

'Set celX = [Y2].Offset(, dh)

'If Not [Y2].Offset(, dh).Resize(10).Find(Target) Is Nothing Then

Bonne journée

M07

Tu a écrit :

Je ne saisis pas trop le pourquoi de la valeur Y2 dans les deux codes

Ce n'est pas la valeur de Y2 (qui est vide) que j'utilise, mais sa référence !


1) Dans Module1, sub Couleurs() : dh = 1 - ([C9] = "MOYEN") - 2 * ([C9] = "MAUVAIS")

➯ pour "BON" : dh = 1 ; pour "MOYEN" : dh = 2 ; pour "MAUVAIS" : dh = 3

dh est à partir de 1, donc OK pour : coulX = Choose(dh, CLR01, CLR02, CLR03)

ensuite, au lieu de mettre dh = dh - 1 et pointer selon Z2, j'ai laissé dh tel que, et pointé selon Y2 :

Set celX = [Y2].Offset(, dh) ➯ celX pointe sur Y2 avec un décalage colonne dh

➯ celX pointe sur le 1er item de la liste adéquate de TABLEAU 3 :

pour "BON" : dh = 1 et celX pointe sur Y2 + 1 colonne à droite = Z2 ; 1er item : "Lyon"

pour "MOYEN" : dh = 2 et celX pointe sur Y2 + 2 colonnes à droite = AA2 ; 1er item : "papa"

pour "MAUVAIS" : dh = 3 et celX pointe sur Y2 + 3 colonnes à droite = AB2 ; 1er item : "Belgique"

(la boucle Do .. Loop lira donc ce 1er item ; puis ceux en dessous, dans la même colonne)


2) Dans le code de "Feuil1" : dh = 1 - ([C9] = "MOYEN") - 2 * ([C9] = "MAUVAIS")

puis [Y2].Offset(, dh)... : même principe que ci-dessus. le complément

.Resize(10) est pour étendre la référence sur 9 lignes en plus (donc 10 lignes en tout) :

c'est la plage de la recherche pour le .Find ; et dh (1 à 3) est toujours OK pour :

.Interior.ColorIndex = Choose(dh, CLR01, CLR02, CLR03)


Tu a écrit :

l'ancienne macro a donc été totalement supprimée ; je pensais que l'on pouvait "simplement" en ajouter une nouvelle pour colorier les cellules en fonction de la sélection ?

C'est pas aussi simple que ça, de tout mettre dans la même Sub Worksheet_Change() ! je pensais qu'avec ce que j'ai fait, tout ton ancien travail de cette sub était devenu inutile, mais s'il y a quelque chose qui te manque de l'ancienne sub, dis-moi ce que c'est et j'essayerai de le rajouter (attention : c'est sans garantie que j'y arriverai ! ).

dhany

Bonjour

Merci beaucoup pour toutes ces explications. Mon niveau VBA est très bas , mais ça me permet de comprendre certaines petites astuces....c'est génial.

J'ai commencé a modifier mon projet, mais je n'ai pas fini.

Par contre en effet, j'avais un code qui me permettait de détecter d'éventuel doublons dans les colonnes C,F,I,L,O,R. Je vais essayer de le remettre et de voir ce que cel donne....

Une fois tout ça terminé, je reviendrai vers toi pour te dire si tout fonctionne, ou pas

Merci encore pour les codes te le temps passé.

M07

Bonjour

J'ai travaillé un peu sur mon projet....pas facile

Si je souhaite augmenter le nombre de noms des colonnes (Bon, Moyen , mauvais ), par exemple 30 au lieu des 10 lignes ou dois je apporter les modifications ? Seulement au niveau du Rezise

J'ai également augmenté des choix avec des colonnes .pour se faire j'ai ajouter :

4 * ([C9] = "ROUGE") - 5 * ([C9] = "BLEU") - 6 * ([C9] = "VERT" et CRL 04, CRL à5 et CRL06

Enfin est il possible le laisser griser certaines lignes: E13:P13,E20:P20, E25:P25; E32:P32,E39:P39,?

J'essaie de remettre mon code VBA pour le doublon.

Merci et bonne journée

M07

Bonjour Marius,

Tu a écrit :

Si je souhaite augmenter le nombre de noms des colonnes (Bon, Moyen , mauvais ), par exemple 30 au lieu des 10 lignes ou dois je apporter les modifications ?

Si tu veux avoir 30 lignes au lieu de 10, ce n'est donc pas le nombre de colonnes que tu veux augmenter mais le nombre de lignes !

C'est à faire en 2 étapes ; d'abord, modifier ainsi la feuille de calcul : il faut ajouter 20 lignes sous la ligne 11, et cela pour les 3 colonnes Z, AA, AB ; pour faire cela sans modifier ce qu'il y a à gauche : sélectionne Z7:AB11 ; onglet Accueil, groupe Cellules, Insérer, Insérer des cellules (raccourci clavier : Alt L i i) et sélectionne la 2ème option

screen 1

* si tu t'es trompé et que ça a décalé les cellules vers la droite : fais aussitôt Ctrl z pour annuler la dernière opération

* ça a inséré 5 lignes vierges ; sélectionne Z7:AB16 ; Alt L i i, 2ème option : ça ajoute encore 10 autres lignes

* comme tu viens d'insérer 15 lignes, faut en ajouter 15 autres (si j'ai bien compté ! )

2ème étape, au niveau du VBA, faut remplacer 10 par 30 dans 2 instructions :

1) pour Module1, sub Couleurs(), c'est dans : If chn = "" Or dv = 10 Then Exit Do

2) pour Feuil1, sub Worksheet_Change(), ici : If Not [Y2].Offset(, dh).Resize(10).Find(Target) ...

donc oui, c'est bien au niveau du Resize : bien vu ! tu auras donc pour la sub Couleurs() :

If chn = "" Or dv = 30 Then Exit Do et pour la sub Worksheet_Change() :

If Not [Y2].Offset(, dh).Resize(30).Find(Target) ...


Si tu as ajouté 3 autres choix, y'a pas mal de modifs à faire !

Et là oui, faut ajouter 3 autres colonnes à droite de la colonne AB, donc en AC:AE.

Les 3 choix actuels étant "BON", "MOYEN", "MAUVAIS", quels sont les 3 autres ?

"SUPER NUL", "TRÈS BON", "EXCELLENT" ?

Pour les couleurs à associer, quelles sont les 3 autres couleurs, à part celles déjà utilisées ?

bleu-vert à pois jaunes ? rouge-indigo ? arc-en-ciel psychédélique ?

Comme la couleur exacte est difficile à décrire, c'est mieux que tu envoies un fichier avec 3 exemples de cellules qui sont déjà colorées comme tu veux ; je ferai ce qu'il faut au niveau du VBA.


Tu a écrit :

Enfin, est-il possible de laisser grisé certaines lignes : E13:P13, E20:P20, E25:P25, E32:P32, E39:P39 ?

Oui, je pense que ça doit pouvoir se faire ! je verrai ça le moment venu, quand tu m'auras transmis ton fichier.

dhany

Bonjour Dhany

Merci pour ce petit cours matinal qui m'a permis une nouvelle fois d'avancer...c'est super.

Je joins mon fichier rallongé

Les petits bémols que j'ai indiqué dans la feuille excel

  • la selection de plusieurs noms
  • geler la couleur de certains lignes
  • un code doublon qui "beug"

Mille fois merci encore

Bonne journée

M07

Bjr

Après quelques essais avec mon code VBA pour le doublon, il semblerait que le code suivant :

' .Interior.ColorIndex = -4142: If Target = "" Then .Resize(, 3).ClearContents: Exit Sub

ne permette pas d'effacer la couleur des cellules concernées en cas de doublon.....

D'autre part comment conserver la police des cellules car j'ai remarqué qu'elle changeait. Surement quand j'efface un contenu, non ?

Je continue mon apprentissage .....

Merci et belle après midi

M07

Bonjour Marius,

Dans ton message du 10 avril à 22:37, tu as écrit :

« Est-il possible de laisser griser certaines lignes: E13:P13, E20:P20, E25:P25, E32:P32, E39:P39 ? »

Dans ton message du 11 avril à 11:44, tu as écrit : « geler la couleur de certaines lignes »

Dans ton fichier Excel, tu as écrit en W67 et en W68 :

« Je souhaite que B13:P13,B17:E17,E19:P19,B25:E25,B31:E31,BD17,BD21,BD26 restent toujours grisés, même avec une sélection en C9.

Que la ligne 19 puisse également toujours conserver les 4 couleurs comme indiqué dans le tableau 1. »

Pour le tout, c'est fait dans cette nouvelle version de ton fichier Excel :


Suite à la modif de la structure de la feuille de calcul, tu as adapté correctement une bonne partie de mon code VBA, y compris le calcul de dh ; bravo ! ainsi, mon instruction initiale dh = 1 - ([C9] = "MOYEN") - 2 * ([C9] = "MAUVAIS") est devenue :

dh = 1 - ([C9] = "MOYEN") - 2 * ([C9] = "MAUVAIS") - 3 * ([C9] = "FAIBLE") - 4 * ([C9] = "FORT") - 5 * ([C9] = "PETIT")

La syntaxe est tout à fait correcte, et ça retourne bien le résultat adéquat ; mais pour éviter cette ligne à rallonge, j'ai utilisé une autre méthode : dh = Evaluate("=MATCH(C9,Z1:AE1,0)")VBA évalue la fonction Excel EQUIV() = MATCH() en anglais ; c'est valable pour les 6 cas, et c'est bien plus court, n'est-ce pas ?


Je te laisse faire tous les tests nécessaires, même si je ne me suis pas occupé de tes autres demandes (voir ci-dessous).


Dans ton fichier Excel, tu as écrit en W65 :

« Si je sélectionne plusieurs valeurs dans le tableau 4, je les copie puis les colle dans le tableau 1, je ne récupère pas les données des colonnes V et X. Ca fonctionne pour une valeur mais pas pour plusieurs. »

Désolé : je n'ai pas de solution pour ça !


Pour le problème ci-dessus, ainsi que celui des doublons, je te laisse voir ça avec un autre intervenant ; bonne chance !

(mais si tu veux une adaptation ou des infos pour les exceptions de couleurs, hors doublons, tu peux me demander)

dhany

Rechercher des sujets similaires à "creation code vba"