XL 2010 Court-circuiter des macros événementielles

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

J'ai 4 cellules liées, chacune, à une macro événementielle.
Sur la PJ tout est très clair, je ne rentrerai donc pas dans des explications absconses et abrutissantes.
Le problème est le suivant : quand je clique sur une cellule qui n'est pas jaune, tous les intitulés des cellules jaunes (à gauche de celles-ci) sont verts. Quand tous ces intitulés sont verts, je voudrais qu'alors toutes les macros événementielles, qui se déclenchent quand on clique sur toute autre cellule qui ne soit pas jaune, deviennent inactives.
Pourquoi ? Sur la feuille ce n'est pas visible, en revanche dans mon projet où il y a "un montón" (un paquet) de macros événementielles, ça ralenti singulièrement les calculs (hors cellules jaunes...) pour des raisons évidentes.
J'ai bien tenté en bidouillant avec la macro "CheckColor" (Módulo1), mais sans succès.
Comment s'y prendre ?
 

Pièces jointes

  • CheckColor.xlsm
    19.4 KB · Affichages: 41

chris

XLDnaute Barbatruc
Bonjour

La logique ne va pas.

Remplace tout par
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Limiter à 4 cellules
    If Intersect(Target, [C3]) Is Nothing And _
        Intersect(Target, [C5]) Is Nothing And _
        Intersect(Target, [F3]) Is Nothing And _
        Intersect(Target, [F5]) Is Nothing Then
        Exit Sub
    End If

'RAZ
    Dim lesautres As Range
    Set lesautres = Application.Union([B3], [B5], [E3], [E5])
    With lesautres
        .Value = "UX/1UY"
        .Interior.Color = 3899904 'vert
        .Font.Color = 49407 'orange
        .HorizontalAlignment = xlCenter
    End With
    Application.Union([C3], [C5], [F3], [F5]).Interior.Color = 13434879 'jaune pâle

'cellule cliquée  
With Target.Offset(0, -1)
        .Value = "UX/1UY désiré"
        .Interior.Color = 6634265 'bleu
        .Font.Color = 65535 'jaune
        .HorizontalAlignment = xlLeft
    End With
    Target.Interior.Color = 16777215 'blanc

End Sub

Un petit test pour éviter la multi-sélection pourrait être utile...
 

Magic_Doctor

XLDnaute Barbatruc
Bonjour chris, bebere, Si... & les autres,

Merci pour vos réponses, mais ce n'est pas encore ça. Je m'explique :

Si... : les cellules jaunes sont INDISPENSABLES. Quand elles sont jaunes est affiché dans chacune d'entre elles un résultat procédant d'un autre calcul. Quand on clique sur l'une d'entre elles, la cellule jaune devient alors blanche afin qu'on y entre directement une valeur.

chris : ta macro ne marche que lorsque l'on clique uniquement sur les cellules jaunes. Quand une cellule jaune est devenue blanche après avoir cliqué dessus pour y rentrer manuellement une valeur, je voudrais que cette cellule redevienne jaune en cliquant sur n'importe quelle autre cellule de l'ensemble de la feuille. Si l'on clique sur une autre cellule jaune, évidemment la précédente redevient jaune et la cellule jaune cliquée blanche. J'ai "concisé" ta macro en remplaçant :
VB:
    If Intersect(Target, [C3]) Is Nothing And _
        Intersect(Target, [C5]) Is Nothing And _
        Intersect(Target, [F3]) Is Nothing And _
        Intersect(Target, [F5]) Is Nothing Then
        Exit Sub
    End If
par :
VB:
If Intersect(Target, Union([C3], [C5], [F3], [F5])) Is Nothing Then Exit Sub
qui donne le même résultat.

bebere : ta macro ne marche malheureusement pas quand après avoir cliqué sur une cellule jaune on clique sur une autre cellule jaune. Sinon c'est presque ça.
 
Dernière édition:

Magic_Doctor

XLDnaute Barbatruc
Supposons qu'une cellule jaune donnée affiche le nombre 3.
Je clique sur la cellule jaune, celle-ci devient blanche --> on peut y rentrer manuellement une nouvelle valeur.
2 cas de figures :
1/ on se "rétracte" en cliquant sur n'importe quelle cellule de la feuille --> la cellule redevient jaune et conserve sa valeur initiale (3), puisqu'on ne l'a pas modifiée.
2/ on change sa valeur (supposons par 5) et on clique sur n'importe quelle cellule de la feuille --> la cellule redevient jaune et affiche la nouvelle valeur entrée (5).
 

chris

XLDnaute Barbatruc
Re
Dans ce cas je ne comprends pas bien le rôle des cellules à gauche et il faudrait plutôt tester le change que le selection_change.

Au lieu de suppositions, j'aimerais vraiment comprendre le contexte et l'objectif car ça me parait plus flou au fil des fils :(
 

Magic_Doctor

XLDnaute Barbatruc
La cellule à gauche est un intitulé qui, disons, "guide" le pèlerin qui utiliserait la feuille.
Par défaut elle est verte et sa cellule contiguë à droite est jaune, affichant un résultat procédant d'un calcul exécuté via une macro. Si l'on désire modifier ce résultat (ce qui aura forcément des conséquences sur l'ensemble des résultats de la feuille), la cellule jaune de cellule, disons, "réceptrice" devient blanche et cellule de saisie.
Dans ma feuille, toutes les cellules sont accompagnées (comme dans n'importe quel tableur du reste) d'une cellule qui stipule à quoi correspond la valeur. Sinon il faudrait être très imaginatif...
Par convention si la cellule est "réceptrice" son intitulé est vert. Si la cellule est une cellule de saisie, son intitulé est bleu.
Dans l'ensemble de la feuille, seules 4 cellules peuvent être soit réceptrices, soit de saisie.
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour à tous,
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim r As Range
Set r = [C3,C5,F3,F5]
r.Interior.Color = 13434879 'jaune pâle
With r.Offset(, -1)
  .Value = "UX/1UY"
  .Interior.Color = 3899904 'vert
  .Font.Color = 49407 'orange
  .HorizontalAlignment = xlCenter
End With
If Intersect(Target, r) Is Nothing Then Exit Sub
For Each r In r
  If Not Intersect(Target, r) Is Nothing Then
    r.Interior.Color = 16777215 'blanc
    With r(1, 0)
      .Value = "UX/1UY désiré"
      .Interior.Color = 6634265 'bleu
      .Font.Color = 65535 'jaune
      .HorizontalAlignment = xlLeft
    End With
  End If
Next
End Sub
A+
 

Magic_Doctor

XLDnaute Barbatruc
Rebonjour job,

Je viens à l'instant de tester ta routine qui marche très bien.
Seulement voilà, persiste un problème auquel je n'avais pas pensé. La feuille que j'ai adressée n'était qu'un exemple. Dans la version définitive, il se trouve que 2 des libellés sont chacun 2 cellules fusionnées. je déteste fusionner les cellules (source d'ennuis itératifs...), mais là, pour des raisons de présentation, je ne peux faire autrement.
J'essaye de résoudre ce problème...