Un truc bizarre avec cellule clignotante [Presque Résolu]

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

Voilà un certain temps, avec l'aide du forum, j'avais adapté une petite macro (nom : "Clignotement") permettant de faire clignoter une cellule de son choix.
Ça marche très bien (très joli aussi...), mais je suis confronté au problème suivant :

Dans Worksheet_Change, si j'écris :
VB:
If Not Intersect(Target, [E6]) Is Nothing Then
    If Target > [F2] Then
        Target = [F2]
        Clignotement Target.Offset(0, -1) 'la cellule juste à gauche clignote
    End If
End If
Quand la valeur entrée est supérieure à la valeur de F2, celle-ci est substituée par la valeur de F2 et la cellule qui se trouve immédiatement à gauche clignote pour avertir de l'erreur. Ça marche !

Maintenant j'écris :
VB:
If Not Intersect(Target, [E6]) Is Nothing Then
    If Target > [F2] Then
        Clignotement Target.Offset(0, -1) 'la cellule juste à gauche clignote
    End If
End If
Quand la valeur entrée est supérieure à la valeur de F2, target devrait "théoriquement" conserver sa valeur et la cellule qui se trouve immédiatement à gauche devrait clignoter pour avertir de l'erreur. Ça ne marche pas !

Si quelqu'un pouvait m'expliquer cette curiosité et comment faire pour que target conserve sa valeur.

Merci d'avance.
 

Pièces jointes

  • Cellule clignotante.xlsm
    28.4 KB · Affichages: 47

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

Derrière un problème se cache toujours un autre...
Dans mon projet il y a une valeur indépassable. Si l'on rentre une valeur supérieure à celle-ci, la cellule à gauche de la cellule de saisie clignote et cette dernière prend la valeur indépassable.
J'ai tenté comme ceci :
VB:
If Not Intersect(Target, [E6]) Is Nothing Then
    If Target > [I2] Then
        Target = [I2]: Target.Select
        Clignotement Target.Offset(0, -1) 'la cellule juste à gauche clignote
        Exit Sub
    ElseIf Target > [F2] And Target <= [I2] Then
        Target.Select
        Clignotement Target.Offset(0, -1) 'la cellule juste à gauche clignote
    End If
    Target.Select
End If
Ça marche bien quand la valeur entrée est supérieure à la valeur MAX et <= VALEUR INDÉPASSABLE. En revanche, si l'on rentre une valeur > VALEUR INDÉPASSABLE, alors la série de clignotements s'effectue 2 fois d'affilé. Comment faire en sorte pour qu'il n'y ait qu'une seule série de clignotements ?
 

Pièces jointes

  • Cellule clignotante2.xlsm
    28.6 KB · Affichages: 25

Calvus

XLDnaute Barbatruc
Bonsoir le Forum, Magic Doctor,

Peut être peux tu essayer comme ceci..
VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
'Macros événementielles quand on introduit une donnée dans certaines cellules de la feuille

    If Not Intersect(Target, [E6]) Is Nothing Then
        If Target > [I2] Then
            Clignotement Target.Offset(0, -1) 'la cellule juste à gauche clignote
Application.EnableEvents = False
            Target = 100:  Target.Select
Application.EnableEvents = True
            Exit Sub
        ElseIf Target > [F2] And Target <= [I2] Then
            Target.Select
            Clignotement Target.Offset(0, -1) 'la cellule juste à gauche clignote
        End If
        Target.Select
    End If
   
End Sub

A+
 

Magic_Doctor

XLDnaute Barbatruc
Une nouvelle curiosité.

Dans mes macros les cellules y figurant sont toutes nommées, pour des raisons pratiques, au cas où l'on modifierait la feuille (ainsi on n'a pas à se prendre la tête à changer certaines adresses dans les macros). Dans l'exemple qui suit, la cellule nommée est [MVol1].
Je précise ceci pour que ce soit plus clair.
Pour le clignotement de la cellule à gauche de l'une des cellules traitées dans Worksheet_Change, j'ai remarqué que Clignotement Target.Offset(0, -1) ne marchait pas. Il faut écrire Clignotement [MVol1].Offset(0, -1), alors que ça revient strictement au même.
Dans l'exemple, pour mieux les repérer, j'ai encadré les REM par des *.
Donc, bon à savoir.
Mais c'est quand même bizarre.

VB:
If Not Intersect(Target, [MVol1]) Is Nothing Then
    Dim f, haut1 As Integer, haut2 As Integer, MVmax As Double, MVsup As Double

    Set f = Application.WorksheetFunction
    haut1 = f.Match(100, [Tableau2].Columns(1), 1)
    MVmax = f.Index([Tableau2], haut1, 3) 'masse volumique correspondant à la concentration maximale (100%)
    haut2 = f.Match([Gamma1], [Tableau2].Columns(1), 1)
    MVsup = f.Index([Tableau2], haut2, 3) 'masse volumique correspondant à la concentration choisie
      
    Target.NumberFormat = MFDecApVirg(Target.Value, 4, True, " g/mL") 'fonction permettant de faire automatiquement, selon certaines conditions, une mise en forme personnalisée des résultats qui apparaissent
      
    If Target > MVmax Then
        Clignotement [MVol1].Offset(0, -1) '********** curieusement, ne marche pas avec Target.Offset(0, -1) **********
        Application.EnableEvents = False
        Target = MVmax:  Target.Select
        Application.EnableEvents = True
        Exit Sub
    ElseIf Target > MVsup And Target <= MVmax Then
        Target.Select
        Clignotement [MVol1].Offset(0, -1) '********** curieusement, ne marche pas avec Target.Offset(0, -1) **********
    End If
    Target.Select 'maintient la sélection de la cellule après qu'elle ait été validée
End If
 

Magic_Doctor

XLDnaute Barbatruc
Bonsoir mapomme,

Pas de problème. Mais je mets tout.
Il s'agit toujours du même fichier sur lequel je travaille depuis un moment.
En principe toutes les macros sont claires (expliquées).
Si tu vois des conneries, signale-les-moi s'il te plaît.
La cellule en question est MVol1 (P57), couleur fuchsia.

**********************************************
Nouvelle PJ avec amélioration des macros.
 

Pièces jointes

  • Target Bizarre.xlsm
    145.5 KB · Affichages: 27
  • Target Bizarre2.xlsm
    139.8 KB · Affichages: 22
Dernière édition:

Statistiques des forums

Discussions
312 100
Messages
2 085 290
Membres
102 851
dernier inscrit
didine501