XL 2016 Colorer l'intérieur d'une cellule sélectionnée

ReneDav14000

XLDnaute Occasionnel
Bonjour le forum,
Pourriez-vous me dire où dois-je insérer cette instruction dans le code ci-dessous s'il vous plaît ?
L'instruction est censée colorer en vert la cellule sélectionnée ensuite je dois ajouter une autre instruction pour annuler la couleur lorsqu'une autre cellule est sélectionnée.
Je vous en remercie par avance

Instruction :
VB:
Selection.Interior.Color = RGB(0,255,0) 'Vert'

Code où doit-être insérée cette instruction :
Code:
Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim pos As Integer
Dim sem As String
    Application.ScreenUpdating = False
    
    If Target.Row = 5 Or Target.Row = 14 Then 'Ligne des mois
        Range("B24") = Target.Offset(0, -1).Value 'maj mois
        Range("B26").Value = Target.Offset(0, -1).Value 'début mois choisi
    End If
    
    If Target.CountLarge > 1 Then Exit Sub
    If Target.Row >= 7 And Target.Row <= 21 Then
        Range("B24") = Target.Value  'maj mois
        
        sem = CStr(Application.IsoWeekNum(Target.Value)) 'semaine
        
        Range("B26").Value = DateSerial(Year(Target.Value), Month(Target.Value), 1)  ' début mois choisi
        
        With Worksheets(sem)  'sélection feuille
            .Visible = True
            .Activate
            pos = 1 'sélection date
            While .Range("A2").Offset(0, pos).Value <> Target.Value
                pos = pos + 1
            Wend
            .Range("A2").Offset(0, pos).Activate 'position colonne
        End With
    End If
    Application.ScreenUpdating = True
End Sub
 

Gégé-45550

XLDnaute Accro
Bonjour,
une possibilité, parmi plein d'autres, qui a l'avantage de mémoriser la cellule à "dépeindre", en supposant que les cellules Z1 et Z2 soient "libres" (sinon adapter avec deux autres cellules, éventuellement dans une autre feuille dédiée) :
VB:
Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim pos As Integer
Dim sem As String
Dim AncienneAdresse, AncienneCouleur
   
    Application.ScreenUpdating = False
   
    If Target.Row = 5 Or Target.Row = 14 Then 'Ligne des mois
        Range("B24") = Target.Offset(0, -1).Value 'maj mois
        Range("B26").Value = Target.Offset(0, -1).Value 'début mois choisi
    End If
   
    If Target.CountLarge > 1 Then Exit Sub
    If Target.Row >= 7 And Target.Row <= 21 Then
        Range("B24") = Target.Value  'maj mois
       
        sem = CStr(Application.IsoWeekNum(Target.Value)) 'semaine
       
        Range("B26").Value = DateSerial(Year(Target.Value), Month(Target.Value), 1)  ' début mois choisi
       
        With Worksheets(sem)  'sélection feuille
            .Visible = True
            .Activate
            pos = 1 'sélection date
            While .Range("A2").Offset(0, pos).Value <> Target.Value
                pos = pos + 1
            Wend
            .Range("A2").Offset(0, pos).Activate 'position colonne
        End With
    End If
    Target.Interior.Color=RGB(0,255,0)
    AncienneAdresse=Range("Z1").value
    AncienneCouleur=Range("Z2").value
    if Range("Z1") <>"" Then Range(AncienneAdresse).Interior.Color=AncienneCouleur
    AncienneAdresse=Target.Address
   Range("Z1")=AncienneAdresse   
 AncienneCouleur=Target.Interior.Color
Range("Z2")=AncienneCouleur
    Application.ScreenUpdating = True
End Sub
Cordialement
 

ReneDav14000

XLDnaute Occasionnel
Bonsoir Gégé-45550,

Merci pour votre participation. Toutefois, cela ne fonctionne pas comme je le souhaiterai.
Dans la feuille "Calendrier" je clique sur une date qui ouvre la feuille où se trouve cette date, et c'est précisément dans cette feuille que je souhaite que la cellule sélectionné soit mise en vert.
Merci par avance
Voici le fichier
 

Pièces jointes

  • Agenda.xlsm
    634.6 KB · Affichages: 7

patricktoulon

XLDnaute Barbatruc
bonsoir @ReneDav14000
là encore la conception est bien mal réfléchi
déjà quand je sélectionne ailleurs que dans les carré du calendirier ça déclenche forcement une erreur
soit parce qu'elle est vide soit par ce qu'elle vaut zero (voir capture plus bas )
corriger cela reviendrait a repérer chaque carré mois en les nommant par exemple (je parle de name)
ensuite
quelle est l'utilité de colorer la cellule dans le carré mois choisi puisque ca te conduit directement vers la feuille semaine correspondante


1669155414244.png


tu devrais réfléchir un peu plus dans la conception avant de te lancer dans sa construction
je ne vais pas parler des mises en forme conditionnelles bien trop nombreuse a mon goût
quand j'ai ouvert ton fichier mon écran a fait sapin de noel il m'a créé 52 feuilles
j'ai cru faire une crise d'épilepsie

1° sans code on peut très bien faire un seul carré calendrier pour tout les mois et années

2° les mise en forme conditionnelles pour les fériés ou date qui te sont particulieres
tu n'en a besoins de 3 ou 4 pas des dizaines

3° la création des feuilles ne pourrait être fait que si clique dans un carré calendrier
(on évite ainsi d'alourdir le fichier de plus de 50 feuilles)

4°les tableau cachés est ce bien nécessaire, alors que déterminer le scrollarea de la feuille suffirait
et ça te permettrait quand même d'y avoir accès pour d’éventuelles modifications

etc...etc....

sinon pour faire un switch couleur sur cellule a la sélection se serait très simple (mais je me répète dans ton contexte inutile sauf erreur de ma part )
 

ReneDav14000

XLDnaute Occasionnel
Bonjour GeGe, bonjour patrick,
Merci pour vos réponses.
GeGe jee regarderai le fichier plus tard car je sais sur mon téléphone (désolé pour le manque d'accents). Merci par avance pour ton investissement.
Patrick, j'ai besoin des 52 semaines (feuilles) afin de conserver une trace des informations au cours d'une année. Pour le calendrier sur 12 mois la demande hiérarchique a été faite comme ça. Je devais également limiter le code vba, d'où les Mfc. Ce n'est pas le carré du clic qui doit être coloré mais le jour correspondant au clic dans une des autres feuilles. Les tableaux sont ainsi cachés pour le moment, en phase finale je procéderai autrement pour les données
Merci toutefois pour tes remarques.
Je reviendrai plus tard car je suis en soin.
Bonne journée à vous deux
 

p56

XLDnaute Occasionnel
Bonjour à tous,

Une année, 52 onglets! :eek: C'est déjà pas bon comme conception!!
Voici un exemple très simplet de planning hebdo sur une année :
* 2 onglets : un pour l'affichage d'une semaine, l'autre pour enregistrer les données
* 6 lignes de code pour enregistrer et/ou afficher les données au changement du n° de la semaine. 6 lignes, pas plus.

L'exemple joint reste très simplet et simpliste (mais fonctionnel) : un jour=2 cases (matin et aprèm) mais il serait assez simple d'ajouter des cases

Les avantages du principe de regroupement des données sur 1 seule feuille :
* fichier moins lourd qu'avec 52 onglets
* formules simples pour faire des bilans annuel d'horaires ou des comptages, ou Tcd très basique

P.
 

Pièces jointes

  • Hebdo_Simplet_démo_.xlsm
    23.1 KB · Affichages: 7

patricktoulon

XLDnaute Barbatruc
Patrick, j'ai besoin des 52 semaines (feuilles) afin de conserver une trace des informations au cours d'une année. Pour le calendrier sur 12 mois la demande hiérarchique a été faite comme ça. Je devais également limiter le code vba, d'où les Mfc
mmmouais..... ben ta hiérarchie réfléchie encore moins que toi 🤣
ce fichier ne tiendra pas la route
la consommation par MFC est énorme
 

patricktoulon

XLDnaute Barbatruc
re
de plus j'avais oublié(et surtout ça repond a ta question )
la coloration par le interior.color en vba ou par la palette couleur dans excel n'est pas possible quand ces cellule ont une MFC

il faut une astuce

au cas ou ça t'intéresserait de travailler proprement voici un calendrier sur feuille
décanté sous deux versions
version 1 xlsx
version 2 xlsm avec l'astuce pour colorer le jour sélectionné même sur les cellule avec MFC

démonstration
demo.gif



et pour le vba je n'ai en tout et pour tout ceci comme code dans la feuille
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If Not Intersect(Target, [C6:i11]) Is Nothing Then
            If ActiveCell <> "" Then [i2] = ActiveCell Else [i2] = ""
        Else
          [i2] = ""
        End If
    'exemple d' action  à  faire sur selection du jour
    [c15] = [i2]
End Sub
 

Pièces jointes

  • calendrier cellules avec ou sans macro.zip
    26.4 KB · Affichages: 7

ReneDav14000

XLDnaute Occasionnel
mmmouais..... ben ta hiérarchie réfléchie encore moins que toi 🤣
ce fichier ne tiendra pas la route
la consommation par MFC est énorme
On ne leur demande pas de réfléchir mais de donner des ordres, souvent absurdes, j'en conviens mais pauvres subalternes que nous sommes, nous devons obéir sans trop réfléchir, car chez nous, commencer à réfléchir c'est déjà désobéir. C'est une des raisons qui me conforte dans mon départ à la retraite. Je regarde ton fichier et je reviens. Merci par avance
 

ReneDav14000

XLDnaute Occasionnel
Bonjour à tous,

Une année, 52 onglets! :eek: C'est déjà pas bon comme conception!!
Voici un exemple très simplet de planning hebdo sur une année :
* 2 onglets : un pour l'affichage d'une semaine, l'autre pour enregistrer les données
* 6 lignes de code pour enregistrer et/ou afficher les données au changement du n° de la semaine. 6 lignes, pas plus.

L'exemple joint reste très simplet et simpliste (mais fonctionnel) : un jour=2 cases (matin et aprèm) mais il serait assez simple d'ajouter des cases

Les avantages du principe de regroupement des données sur 1 seule feuille :
* fichier moins lourd qu'avec 52 onglets
* formules simples pour faire des bilans annuel d'horaires ou des comptages, ou Tcd très basique

P.
Bonjour et merci p56, je regarde également ton fichier et je reviens.
 

ReneDav14000

XLDnaute Occasionnel
Merci à tous les trois pour votre travail et votre participation.

Gégé-45550, c'est exactement ce que j'attendais, merci beaucoup. Mais comme l'a dit fort justement patrick, ça tourne à l'usine à gaz et c'est très énergivore.

p56, l'idée n'est pas si simpliste que ça et le regroupement des données annuelles sur une seule feuille est intéressante. Toutefois, j'ai besoin d'un agenda avec des horaires de 6h à 23h30.

patrick, comme à ton habitude, ton exemple de calendrier unique est bien. Mais comme pour p56, j'ai besoin d'une gestion journalière et horaire sur l'année afin de conserver une trace des tâches demandées et du résultat obtenu.

C'est pour toutes ces raisons que je suis parti sur 53 feuilles distinctes (54 avec celle de l'agenda) et puis t'elle était la demande de mon supérieur. Il faudrait que j'arrive à lui démontrer matériellement que l'on peut faire autrement car il a la tête dure et son idée est forcément la meilleure.
Je vous remercie chaleureusement pour vos commentaires, réflexions et exemples. Je suis toujours ouvert à la critique quand celle-ci est constructive. 👏 👏 👏
Je vais faire un petit mélange des trois solutions pour arriver à quelque chose de propre et de viables à longs termes.
 

ReneDav14000

XLDnaute Occasionnel
p56,
Dans une précédente discussion, tu m'avais présenté un fichier pour des réservations de tables, fichier que je n'ai pas gardé, mais je me souviens que tu gérais toutes les tables sur une même feuille pour toute l'année.
Le principe est le même pour la gestion de mon agenda, je vais essayer de développer cette nouvelle idée.
On clique sur une date, un UF s'affiche où l'on entre des données, qui elles sont figées dans une autre feuille.
Je vais partir sur cette idée qui me semble moins énergivore.
 

p56

XLDnaute Occasionnel
Re à tous,

Avec quelques lignes de code en plus, sur le même modèle "simplet" précédent voici un agenda à l'année "2 onglets" de 6h00 à 23h30. Le fichier fait 30 ko.
Démo_agd.gif


Il vous reste à combiner ça avec la proposition de @patricktoulon et ajouter quelques fioritures
 

Pièces jointes

  • Hebdo_Simplet_démo_2.xlsm
    30 KB · Affichages: 9
Dernière édition:

ReneDav14000

XLDnaute Occasionnel
Re à tous,

Avec quelques lignes de code en plus, sur le même modèle "simplet" précédent voici un agenda à l'année "2 onglets" de 6h00 à 23h30. Le fichier fait 30 ko.
Regarde la pièce jointe 1156194

Il vous reste à combiner ça avec la proposition de @patricktoulon et ajouter quelques fioritures
Merci beaucoup pour ce coup de main et pour le code.
Je m'y met de suite et je reviens vers vous..
 

Discussions similaires