Cas de non détection d'un changement de valeur de cellule dans Worksheet_Change

Lone Programmer

XLDnaute Nouveau
Bonjour à tous !

J'ai actuellement créé un formulaire dynamique sur une feuille excel où, lorsque le contenu de certaines cellules change d'autres sont mises à jour en conséquence.

Voici un exemple arbitraire pour vous faire comprendre l'idée :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  Select Case Target.Address
     ' les modifications de valeurs ne sont détectées que sur A1 et A3 (Ailleurs ça ne m'intéresse pas)
      Case thisWorkbook.[A1].Address, thisWorkbook.[A3].Address 
                 ' Modification du contenu de B1 selon la présence du département 31 dans A1 ou A3
                 If thisWorkbook.[A1].value = 31 or thisWorkbook.[A3].value = 31 Then
                      ThisWorkBook.[B1].value = "Le département Haute-garonne est concerné"
                 Else
                      ThisWorkBook.[B1].value = vbNullString
                 end if
    End Select
End Sub

Là où ça se complique, c'est lorsque [A1] contient une liste de validation.
En supposant que j'y renseigne par exemple les valeurs 31, 32 et 33.

Si je sélectionne la valeur 31, la cellule [B1] contiendra le message "Le département Haute-garonne est concerné". Si ensuite je sélectionne les valeurs 32 ou 33, la cellule [B1] sera vidée de son contenu. De même si j'efface le nombre "31" avec la touche backSpace et appuie sur "Entrée", la cellule [B1] sera vidée de son contenu (toute liste de validation accepte le champs vide). Jusque là, tout fonctionne comme prévu, pas de soucis.

Là où réside mon problème, est si j'utilise la touche "Suppr" sur [A1] pour effacer le "31" et non la touche BackSpace puis "Entrée" : le contenu de [B1] n'est pas mis à jour comme si la cellule [A1] contenant toujours la valeur "31" ! A noter que ça fonctionne si [A1] ne contient pas une liste de validation.

Pour résumer mon problème :

Le changement de valeur d'une cellule contenant une liste de validation n'est pas détecté lorsqu'on utilise la touche "Suppr" sur cette cellule alors qu'il fonctionne s'il ne s'agit pas d'une liste de validation.


Piste de solution de contournement...
Le principe serait de détecter que la touche "Suppr" ait été pressée. Néanmoins, je n'ai pas non plus trouvé de solution dans "Worksheet_Change" même avec l'utilisation de Declare Function GetAsyncKeyState Lib "User32" (ByVal vKey As Long) As Integer (Détection de l'appui sur une touche du clavier)
 
Dernière édition:

Lone Programmer

XLDnaute Nouveau
Re : Cas de non détection d'un changement de valeur de cellule dans Worksheet_Change

J'ai fini par résoudre mon problème : le problème venait du fait que ma liste de validation concernait une cellule fusionnée. L'adresse correspondait à Target si je sélectionne une valeur de la liste mais pas si j'utilise "Suppr" (elle est alors égale à la plage de cellules fusionnées). Du coup j'ai dé-fusionné les cellules même si ça m'arrange pas question interface et ça fonctionne désormais.
 

job75

XLDnaute Barbatruc
Re : Cas de non détection d'un changement de valeur de cellule dans Worksheet_Change

Bonjour LoneProgrammer,

1) ThisWorkbook.[A1].Address n'a aucun sens, il faut écrire simplement [A1].Address

2) Je pense que les cellules A1:A2 sont fusionnées, ce qui explique ce qui se passe :

- quand on efface A1 Target.Address vaut "$A$1:$A$2"

- alors que [A1].Address vaut "$A$1"

- donc B1 ne s'efface pas.

La validation de données n'a rien à voir la-dedans.

Edit : le temps de rédiger vous avez vu une partie de vos erreurs.

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Cas de non détection d'un changement de valeur de cellule dans Worksheet_Change

Bonjour Gilbert, Marc,

Je dirais même plus, A1 et A2 étant fusionnées :

Code:
=REPT("Le département Haute-garonne est concerné";SIGNE(NB.SI(A1:A3;31)))
Quand c'est possible j'évite la fonction SI qui prend beaucoup d'octets en mémoire.

A+
 

Discussions similaires

Statistiques des forums

Discussions
314 842
Messages
2 113 489
Membres
111 877
dernier inscrit
thierry@1965