IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Modifier la couleur de la cellule active


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 9
    Points : 12
    Points
    12
    Par défaut Modifier la couleur de la cellule active
    Bonjour,
    J'aurai besoin d'un avis de pro.
    Voilà, dans ma feuille F1, je voudrais que la cellule active change de couleur pour être plus visible et qu'elle reprenne sa couleur d'origine quand on la quitte.
    Pour ce faire j'ai mis dans Visual Basic Feuille F1 la procédure suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public old_color, old_sel  
    Option Explicit  
    Sub Worksheet_SelectionChange(ByVal sel As Range)  
    If Not old_sel = "" Then Range(old_sel).Interior.ColorIndex = old_color  
    old_sel = sel.Address  
    old_color = sel.Interior.ColorIndex  
    sel.Interior.ColorIndex = 6 'Mets la cellule active en jaune.  
    End Sub
    Ça marche bien pour une cellule blanche, mais pour une cellule de couleur... elle ne retrouve pas sa couleur quand on change de cellule.
    Pire, quand on sélectionne plusieurs cellules, c'est la cata... je ne peux même plus changer la couleur.
    Quelqu'un aurait'il une procédure qui fonctionne?

    Je crois savoir que l'on peut modifier la couleur de la cellule active d'excel dans le registre. Mais la j'avoue que je n'aime pas trop toucher au moteur de l'ordi mais s'il le fallait pourquoi pas. Mais quoi changer ou modifier?

    Si quelqu'un peut m'aider je suis preneur.

    Merci .

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Sans changer les couleurs, tu peux sélectionner la ligne et la colonne de la cellule active. Mets cette macro dans le module de la feuille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Application.EnableEvents = False
        Union(Target.EntireRow, Target.EntireColumn).Select
        Application.EnableEvents = True
    End Sub
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  3. #3
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonjour polonVBA

    Si tu tiens mordicus à changer la couleur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Public r As Range
     
    Sub Worksheet_SelectionChange(ByVal Target As Range)
     
    Target.Copy Feuil3.Range(Target.Address)
     
    If Not r Is Nothing Then
       r.Copy
       Application.EnableEvents = False
       Target.Parent.Range(r.Address).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
       Target.Select
       Application.EnableEvents = True
    End If
     
    Target.Interior.ColorIndex = 6 'Mets la cellule active en jaune.
    Set r = Feuil3.Range(Target.Address)
     
    End Sub
    Cordialement

    Docmarti.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 9
    Points : 12
    Points
    12
    Par défaut
    Merci à Daniel et à Docmarti d'avoir essayé de me dépanner.
    La proc de Daniel me mets toute les cellules de ma feuille en surbrillance... ce n'est pas le but recherché.

    La proc de Docmarti bloque à la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Target.Copy Feuil3.Range(Target.Address)
    La feuille sur laquelle je travaille s'appelle F1. J'ai bien remplacé Feuil3 par F1 mais ça ne change rien.

    Désolé, je suis loin de tout comprendre.

    Merci.

    Bonne soirée

  5. #5
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    La proc de Daniel me mets toute les cellules de ma feuille en surbrillance... ce n'est pas le but recherché.
    Regarde le classeur joint, tu comprendras mieux :
    PJ : polonVBA.xlsm
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 9
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Daniel.C Voir le message
    Regarde le classeur joint, tu comprendras mieux :
    PJ : polonVBA.xlsm
    Merci Daniel pour ta réponse.
    Ta macro fonctionne bien dans une feuille vierge, mais dans une feuille élaborée avec des cellules fusionnées cela ne répond pas à ce que je recherche.
    Je veux simplement augmenter la visibilité de la cellule active (ou des cellules fusionnées) en la changeant de couleur par exemple. Il faut que lorsque l'on change de cellule active la précédente retrouve sa couleur d'origine.
    J'y suis presque avec ma macro que j'utilise, mais ça coince avec les cellules fusionnées et je ne vois pas comment m'en sortir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public old_color, old_sel  
    Option Explicit  
    Sub Worksheet_SelectionChange(ByVal sel As Range)  
    If Not old_sel = "" Then Range(old_sel).Interior.ColorIndex = old_color  
    old_sel = sel.Address  
    old_color = sel.Interior.ColorIndex  
    sel.Interior.ColorIndex = 6 'Mets la cellule active en jaune.  
    End Sub
    Si vous avez une solution... Merci.

    PS je garde ta macro, elle me servira à autre choise.

  7. #7
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut




    Bonjour,

    ne pas fusionner les cellules ‼

    Mieux vaut utiliser l'alignement Centré sur plusieurs colonnes


    ___________________________________________________
    Tous unis, tous Charlie
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  8. #8
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Points : 2 156
    Points
    2 156
    Par défaut
    Bonjour,

    L"ancienne couleur ne doit pas être mémorisée dans une variable mais dans un nom de champ parce que la variable est perdue lors de la fermeture du classeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
       On Error Resume Next
       If [mémoAdresse] <> "" Then Range([mémoAdresse]).Interior.ColorIndex = [mémoCouleur]
       ActiveWorkbook.Names.Add Name:="mémoAdresse", RefersToR1C1:=""
       If Not Intersect([A1:D20], Target) Is Nothing And Target.Count = 1 Then
         ActiveWorkbook.Names.Add Name:="mémoAdresse", RefersToR1C1:="=" & Chr(34) & Target.Address & Chr(34)
         ActiveWorkbook.Names.Add Name:="mémoCouleur", RefersToR1C1:="=" & Target.Interior.ColorIndex
         Target.Interior.ColorIndex = 6
       End If
    End Sub

    Boisgontier

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 9
    Points : 12
    Points
    12
    Par défaut
    Merci Boisgontier,

    Grace à toi je progresse et ça marche presque. C'est impeccable avec des cellules uniques, mais ça ne marche pas avec des cellules fusiionnées.
    Encore un petit effort...
    Grand MERCI.

  10. #10
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Voici une version multi-sélections.
    Fichiers attachés Fichiers attachés
    Cordialement

    Docmarti.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 9
    Points : 12
    Points
    12
    Par défaut
    Bonjour et un grand merci à Docmarti qui est vraiment un pro en VBA.
    J'avoue que je ne comprends pas tout, mais ça marche comme je le souhaitais à la perfection.
    J'ai mis la feuille Couleurs dans mon classeur et impeccable, mes cellules actives sont vraiment bien visibles.
    Merci et à une prochaine.

  12. #12
    Membre averti Avatar de Citrax
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2014
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2014
    Messages : 188
    Points : 385
    Points
    385
    Par défaut
    Bonjour,

    En effet, Docmarti a fait un boulot excellent. Merci ce code peut s'averer tres pratique pour des presentation ou des feuillets non colorés, avec beaucoup de valeurs.
    Seule remarque et sans vouloir froisser ou chippoter, toute selection "déplacée" gardera la couleur jaune.

    @+
    "Pourquoi faire compliqué......quand on peut faire simple......"

  13. #13
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Points : 2 156
    Points
    2 156
    Par défaut
    Bonjour,

    Sans feuille intermédiaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      Set champ = Range("A1:D20")
      '---- restitution couleurs
      If Not Intersect(champ, Target) Is Nothing And Target.Count < 100 Then
        CoulCurseur = RGB(255, 255, 0)
        For Each n In ActiveWorkbook.Names
          If Left(n.Name, 7) = "MémoAdr" Then
            adr = Mid(n.Name, 8): Coul = Val(Mid(n, 2)): If Coul = 16777215 Then Coul = xlNone
            If Range(adr).Interior.Color = CoulCurseur Then Range(adr).Interior.Color = Coul
          End If
        Next n
        '------ sauvegarde couleurs
        For Each n In ActiveWorkbook.Names
          If Left(n.Name, 7) = "MémoAdr" Then n.Delete
        Next n
        For Each c In Target
             ActiveWorkbook.Names.Add Name:="MémoAdr" & Replace(c.Address, "$", ""), RefersTo:=c.Interior.Color
        Next c
        Target.Interior.Color = CoulCurseur
      End If
    End Sub
    Jacques Boisgontier
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Modifié la couleur d'une cellule
    Par keks42 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/08/2008, 08h53
  2. Modifier la couleur d'une cellule
    Par KRis dans le forum Composants VCL
    Réponses: 2
    Dernier message: 22/05/2008, 09h56
  3. Modifier la couleur d'une cellule
    Par karkass59 dans le forum Excel
    Réponses: 2
    Dernier message: 07/04/2008, 10h46
  4. Comment modifier la couleur d'une cellule d'un TStringgrid
    Par francois.delpierre dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/11/2007, 12h38
  5. [Word97 / Delphi6] Comment modifier la couleur d'une cellule ?
    Par Lolo1988 dans le forum API, COM et SDKs
    Réponses: 0
    Dernier message: 29/10/2007, 10h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo