Clic colore une cellule en fonction de la couleur de colonne

Bonjour,

J'ai un tableau avec en ligne trois prénoms (pour l'exemple, cela pourrait être 100...) ; 3 colonnes (là encore, cela pourrait être +) ; je définis en B2, C2, D2 une couleur via l'outil remplissage d'une couleur pour une cellule. Ces 3 colonnes vont se répliquer pour semaine 1, 2, 3...36 ou 52 ; donc dans un exemple de 3 colonnes sur 30 semaines = 91 colonnes - la première étant les prénomsj'essaie d'être claire...).

Je souhaiterais à partir de là, en faisant un clic en B3 par exemple, que ce dernier se colore de la couleur définie en B2 ; ou clic sur D5 et obtenir couleur de D2... etc

J'espère être claire...

Ensuite, enfin, je souhaiterais que se fasse automatiquement

2018 09 02 1658

en fin de ligne (donc après la semaine 52 dans l'exemple) faire le total par couleur (donc dans 3 nouvelles colonnes avec dans la cellule, la couleur et le total de cellules colorées de la même couleurs pour bien sûr chacune des couleurs).

Merci de m'avoir lu ; je ne sais bien sûr pas si c'est possible bien que j'en suis presque certaine mais je n'ai pas les compétence (aucune ?) pour le réaliser en dehors de manuellement, ce qui alors est sans intérêt, cela prend trop de temps ! c'est pour moi un outil de gestion en direct, donc il faut que tout aille très vite.

Bonne fin de soirée et merci d'avance à qui me donnera une solution... simple à mettre en oeuvre pour ma modeste personne qui essaie de progresser cependant.

Hannah

Bonjour,

Il aurait été plus simple de fournir un fichier, d'autant que la couleur figure en ligne 3 dans ton image mais ligne 2 dans ta demande, et que tu numérotes allègrement des semaines jusqu'à 54... !

Bon ! En ce fiant à tes dires :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim n%, k%
    If Target.Count > 1 Then Exit Sub
    n = Target.Row: k = Target.Column
    If Me.Cells(n, 1) <> "" Then
        Target.Interior.Color = Me.Cells(2, k).Interior.Color
    End If
End Sub

A mettre dans le module de la feuille concernée.

Mais ne penses-tu pas qu'une procédure pour ôter la couleur pourrait être utile ? Non plus basé sur la sélection (clic simple) car cela t'ôterait la couleur ou la mettrait à chaque sélection... mais par exemple sur un double-clic ?

Pour tes totaux, il faut passer par une fonction personnalisée... Je reviens.

Bonjour M. Ferrand,

Merci pour la réponse si prompt : adorable.

Ah oui, j'y avais pensé et j'ai oublié de l'écrire : un clic qui enlève la couleur est plus que souhaitable ! donc un clic, met la couleur s'il n'y en a pas, enlève la couleur s'il y en a une...

Certes, mais mon document va être établi pour des périodes variables (6 semaines, 10 semaines, 5 semaines...) J'ai donc besoin de comprendre et que je fasse le nécessaire (il faut quand même bien que je travaille un peu aussi sur ma demande!) pour être capable d'adapter selon mes besoins sans avoir nécessairement à solliciter les aimables bonnes volontés du site... Je ne voudrais pas abuser.

Euh... c'est quoi le "module de la feuille concernée"... ?? j'ai copié les lignes de codes dans outils/macro/visual basic editor...un double clic sur "this workbook" cela m'a affiché une fenêtre et j'ai collé...

Cela ne doit pas être tout à fait ça, puisqu'il n'y a aucun effet...

Et il a créer seul (ou par une fausse manipulation de ma part) une feuille nommée macro... ?

Je dois ajouter, pour être complète, que mon classeur va avoir d'autres feuilles du même type...

Désolée par l'étendue de ma méconnaissance. Ne m'en voulez pas svp.

Merci

Hannah

8test.xlsm (36.92 Ko)

Code à placer dans un module Standard :

Function NBCOULEUR(Plg As Range, Clr As Range)
    Dim c As Range, n%, cl&
    cl = Clr.Interior.Color
    For Each c In Plg
        If c.Interior.Color = cl Then n = n + 1
    Next c
    NBCOULEUR = n
End Function

Utilisation : formule à placer dans la première cellule de ta zone Total (que l'on suppose en ligne 3 (ligne 4 dans ton image) et colonne N dans l'image

=NBCOULEUR($B3:$M3;B$2)

M est à remplacer par la dernière colonne qui précède la zone total.

Et la formule est recopiable sur l'ensemble de ta zone total.

NB- Un changement de couleur ne provoque pas de recalcul, aussi une ligne est à rajouter utilement à la proc précédente, et à revoir aussi pour la ligne 2...

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim n%, k%, nk%
    If Target.Count > 1 Or Target.Row < 2 Then Exit Sub
    n = Target.Row: k = Target.Column
    If Me.Cells(n, 1) <> "" Then
        nk = Me.Cells(1, k).MergeArea.Cells.Count
        k = (k - 2) Mod nk + 1
        Target.Interior.Color = Me.Cells(2, k).Interior.Color
        Me.Calculate
    End If
End Sub

Ainsi, tu pourras mettre la couleur par clic sur les semaines autres que la première, une fois qu'elles seront placées sur la première semaine (ligne 2), et le recalcul des totaux sera forcé à chaque ajout de couleur...

En prime au cas où, une proc. pour ôter la couleur :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim n%
    n = Target.Row
    If n < 3 Then Exit Sub
    If Me.Cells(n, 1) <> "" Then
        Target.Interior.ColorIndex = xlColorIndexNone
        Cancel = True
        Me.Calculate
    End If
End Sub

A placer comme la précédente dans le module de la feuille concernée.

Cordialement.

Tu as trouvé le module ThisWorkbook, très bien ! mais une procédure d'évènement de feuille ne fonctionnera pas dans le module classeur. Il faut la supprimer de là !

La liste qui se termine par ThisWorkbook dans le volet Projets de l'éditeur, liste toutes les feuilles de ton classeur. Tu choisis le module correspondant à ta feuille.

Tu y mets la version rectifiée, qui permettra de colorer la ligne 2 à partir du moment où celle-ci est colorée pour la 1re semaine.

Le clic se confond avec la sélection d'une cellule, donc la coloration se fera dès sélection. J'ai placé l'enlèvement de la couleur sur un évènement double-clic, sinon tu ne pourrais plus sélectionner une cellule colorée sans qu'elle se décolore...

La proc. double-clic est à placer dans le même module.

Pour créer un Module standard : menu Insertion > Module. Et dans le nouveau module qui apparaît, tu colles la fonction, qui elle doit être dans un module public (les modules de feuilles et classeur sont privés).

Les procédures s'adaptent à ton nombre de colonnes par semaine (qui doit être le même pour toutes les semaines), et pour la formule Total, j'ai indiqué l'adaptation à faire (lettre de la dernière colonne), mais respecter les $ (et ne pas en mettre d'autres) pour que la formule soit recopiable.

Cordialement.

Alors, j'ai bien effacer et pense avoir coller au bon endroit (double clic sur "Feuil1") et donc collé.

rien ne se colore. Chaque clic élimine le quadrillage de la feuille.

rien ne se passe au dessous de la ligne 7.

Cela n'étant pas réglé pour moi (désolée), je n'ai pas été plus loin.

J'ai joint à nouveau le fichier.

Merci pour ton temps et désolée d'être longue, trop longue à la détente.

Sincèrement

Hannah

10test.xlsm (37.96 Ko)

Je disais bien qu'en fournissant un fichier dès le départ on aurait été ajusté plus rapidement !

En outre, j'ai bien insisté sur l'écart entre ton propos et ton image (ligne 2 vs ligne 3) ! Je m'étais aligné sur ton propos ligne 2 et ton fichier est aligné sur ton image.

En outre, ton image montrait une fusion de cellule par semaine sur la ligne 1, ne figurant plus dans ton fichier !

Là ça empêchait encore de fonctionner : n'en déplaise aux tenants de la non fusion systématique, cette fusion est indispensable car elle permet de calculer le nombre de colonnes hebdomadaires, et à partir de là trouver la référence de la couleur.

J'avais aussi une petite erreur d'évaluation qui décalait les couleurs, mais non constatable avant rectif des erreurs précédentes.

J'ai fait les ajustements et en ai profité pour borner les procédures au niveau colonne pour que la coloration-décoloration s'arrête avant la zone Total (NB- il ne doit rien y avoir après Total...)

Donc le clic à partir de la colonne N (ou de la future colonne première de la zone Total de ton fichier) ne colore plus. Les couleurs N3:P3 doivent donc être mises manuellement.

J'ai modifié la formule en N4 pour pointer la couleur sur la cellule N3, mais si tu ne colores pas N3:P3, il faut alors pointer B3 dans la formule en N4...

Cordialement.

edit : Il semble que tu travailles sur MAC ? Toujours à préciser, car certaines commandes ne fonctionnent pas sur MAC...

Rapidement,

Désolée pour tous mes oublis, fausses manoeuvres et autres. Je cherche aussi à comprendre et donc à être capable d'adapter à des choses un peu différentes, mais c'est peut être prétentieux de ma part.

Oui je suis sur mac...

Je vais donc tester, mais demain, désolée ; là il faut que j'aille dormir, je me réveille très tôt demain.

Merci pour tout et en particulier pour ta patience et gentillesse.

Bonne fin de soirée et surement, un autre message demain, au minimum pour dire si j'y arrive !!

Sincèrement,

Hannah

Bonsoir,

Ce n'est que maintenant que j'ai une minute et donc avant d'aller retrouver Morphée dans un instant :

1. Bien sûr, ton fichier marche à merveille... merci.

J'y vais doucement et je m'occupe ce soir que de la macro activate :

2. Si j'ajoute une semaine à mon tableau :

n devient q

k devient n

nk devient qn

if n < 4 devient if q < 5

if k > Me devient if n > Me

Dim n%, k%, nk% devient Dim q%, n%, qn%

etc

Il semble donc dans mon intérêt de faire le tableau de départ avec le nombre de semaines maximum et simplement de laisser blanc les semaines dont je n'ai pas besoin, sommes nous d'accord ?

Si j'ajoute une valeur D supplémentaire, dois je changer la valeur 3 en 4 ?

Merci M. Ferrand

Bonne nuit,

Hannah

Il me semble que tu fais quelques confusions...

    Dim n%, k%, nk%

Cette ligne représente des déclarations de variables. n, k et nk sont des noms de variables que je déclare de type Integer (nombre entier 'court', soit limité de -32768 à +32767). Le caractère % qui suit les noms est appelé caractère de déclaration de type (il en existe pour les variables numériques et String). % est synonyme dans cette position de As Integer. J'aurais pu écrire : Dim n As Integer

Ton remplacement des noms de variables n'a aucun sens, en tout cas strictement aucun rapport avec les modification que tu apportes à ton fichier.

Dans la procédure SelectionChange qui s'exécute lorsque tu fais une nouvelle sélection dans la feuille, on commence d'abord par éliminer des cas de non intervention :

    If Target.Count > 1 Or Target.Row < 3 Then Exit Sub

Target est la cellule ou plage sélectionnée (la procédure nous la fournit en tant qu'argument) : si elle comporte plusieurs cellules ou si elle se situe avant la ligne 3 on n'interviendra pas.

Ensuite, parce que c'est plus commode pour la suite, on initialise les variable n et k. n prend le numéro de ligne de la cellule sélectionnée et k son numéro de colonne.

    n = Target.Row: k = Target.Column

(NB- le ':' qui sépare les deux instructions est un séparateur de lignes de code, on a ci-dessus deux lignes de code écrites sur la même ligne physique.)

On initialise également nk à la suite :

    nk = Me.Cells(1, k).MergeArea.Cells.Count

On considère la cellule dans la même colonne que la cellule sélectionnée, qui est une cellule fusionnée, et on compte le nombre de cellules individuelles qui y sont fusionnées, que l'on affecte à la variable nk. Ce nombre correspond donc au nombre de colonnes composant une semaine.

Ainsi, si tu as sélectionnée la cellule F6, à ce stade de la procédure n aura la valeur 6, k aura la valeur 6, et nk vaudra 3 parce que F1 fait partie de l'ensemble E1:G1 fusionné, comportant 3 cellules.

On procède encore à des tests pour savoir si la sélection est réalisée dans un emplacement justifiant l'intervention que l'on projette :

    If k > Me.Range("A1").CurrentRegion.Columns.Count - nk Then Exit Sub

On considère la zone utilisée par les données à partir de A1 (le fait que A1 soit vide ne gêne pas car B1 ne l'est pas, ni B2) : la région courante de A1 (dans le fichier modèle) couvrira la plage A1:P2, soit 16 colonnes, ce qui nous intéresse, on en défalque la valeur de nk (cela dans le but d'exclure la zone Total comme zone où l'on intervient), reste 13 colonnes. on compare à k, colonne de la sélection. Si k était supérieur à 13 (au-delà de la colonne M) on n'interviendrait pas...

Encore une condition pour intervenir :

    If Me.Cells(n, 1) <> "" Or n = 3 Then

Que la cellule située sur la même ligne que la sélection, en colonne A ne soit pas vide, ou que la sélection soit en ligne 3 (ceci pour te permettre de colorer automatiquement les semaines autres que la première).

L'intervention répondant aux conditions d'emplacement, on réinitialise la variable k avec une nouvelle valeur calculée :

        k = (k - 2) Mod nk + 2

Soit à partir de la valeur k, colonne de la sélection, on la convertit en n° colonne de même rang dans la première semaine, laquelle commence en B. On soustrait 2 à k (2 parce que la semaine commence à B, si elle commençait en A, on ne soustrairait qu'1, si elle commençait en C on soustrairait 3), on en prend le modulo de nk, soit on détermine le reste de la division de k-2 par nk, puis on rajoute 2 (ce qu'on a ôté) à ce reste pour établir la colonne cherchée [j'espère que tu comprends pourquoi on enlève 1 (ici 2 pour compenser le fait qu'on commence en B) avant de déterminer le reste pour le rajouter au reste ensuite, sinon demande...]

Disposant donc de la colonne de la première semaine équivalant à la colonne de la cellule sélectionnée, que l'on a affectée à la variable k (parce qu'inutile d'utiliser une nouvelle variable dès lors qu'on en dispose d'une du type qui convient et qui devient inutilisée).

On dispose en ligne 3 des couleurs de chaque colonne de la première semaine. Il ne reste plus qu'à affecter la couleur de la cellule de la colonne calculée en k de la ligne 3, à la cellule sélectionnée.

       Target.Interior.Color = Me.Cells(3, k).Interior.Color

Puis :

        Calculate

fera recalculer les formules de la zone Total que la modification de couleur ne suffirait pas à faire recalculer.

Alors, si tu étends le nombre de semaine, tu élargis la ragion courante occupée par des données, et la procédure en tiendra compte... La seule chose à réajuster ce sera les formules de totalisation qui ne vont pas suivre.

Si tu augmentes le nombre de colonnes par semaine, les cellules fusionnées en ligne 1 vont comporter plus de cellules et ce sera pris en compte dans le calcul de la variable nk.

Ces modifications ne nécessitent aucune modification du code.

Cordialement.

Merci, merci pour ce long message explicatif et détaillé et le temps que tu as passé à le rédiger.

La programmation que tu (je me permets le tutoiement) est simplement géniale et tiens compte de tout !

Formidable et bien d'autres superlatifs qui me manque.

J'ai bien compris que j'ai seulement à changer la formule du total ce qui ne devrait pas me poser de problème.

Je t' envie pour tes compétences...

Je te souhaite une excellente journée.

Hannah

Rechercher des sujets similaires à "clic colore fonction couleur colonne"